xmpp-iOS-添加好友和删除好友

#import "XMPPData.h"
#import "XMPPFramework.h"

//导入花名册相关头文件
#import "XMPPRoster.h"
#import "XMPPRosterMemoryStorage.h"
#import "XMPPRosterCoreDataStorage.h"

@interface XMPPData()<XMPPStreamDelegate,XMPPRosterDelegate>
@property(strong,nonatomic) XMPPStream *xmppStream;
@property(assign,nonatomic) BOOL isRegister;
@property(strong,nonatomic) NSString*user,*pwd,*hostName,*domain;
@property(assign,nonatomic) UInt16 port;
@property(strong,nonatomic) XMPPRosterCoreDataStorage * rosterStorage;//花名册存储
@property(strong,nonatomic) XMPPRoster * rosterModule;//花名册模块
@end

@implementation XMPPData

//开始连接聊天服务器
-(BOOL) connectWithUserName:(NSString*) username andPwd:(NSString*) pwd andHostName:(NSString*) hostname andDomain:(NSString*) domain andHostPort:(UInt16) port andIsRegister:(BOOL) isRegister
{
    self.hostName = hostname;
    self.port = port;
    self.domain = domain;
    self.user = username;
    self.pwd = pwd;
    self.isRegister = isRegister;
    self.xmppStream = [[XMPPStream alloc] init];
    //设置代理
    [self.xmppStream addDelegate:self delegateQueue:dispatch_get_global_queue(0, 0)];
    //设置聊天服务器地址
    self.xmppStream .hostName = hostname;
    //设置聊天服务器端口 默认是5222
    self.xmppStream.hostPort = port;
    //设置Jid 就是用户名
    XMPPJID *jid = [XMPPJID jidWithUser:username domain:domain resource:@"test"];
    self.xmppStream.myJID = jid;
    NSError * error = nil;
    //验证连接
    [self.xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:&error];
    if (error) {
        NSLog(@"连接失败:%@",error);
        return NO;
    }
    else
    {
        //注册所有的模块
        [self activeModules];
        return  YES;
    }
}

//激活相关的模块
-(void) activeModules
{

    //1.花名册存储对象
    self.rosterStorage = [XMPPRosterCoreDataStorage sharedInstance];
    //2.花名册模块
    self.rosterModule = [[XMPPRoster alloc] initWithRosterStorage:self.rosterStorage];
    //3.激活此模块
    [self.rosterModule activate:self.xmppStream];
    //4.添加roster代理
    [self.rosterModule addDelegate:self delegateQueue:dispatch_get_main_queue()];

}

//添加好友
-(BOOL) addFriend:(NSString*) friendName
{
    XMPPJID * friendJid = [XMPPJID jidWithString:[NSString stringWithFormat:@"%@@%@",friendName,self.domain]];
    [self.rosterModule subscribePresenceToUser:friendJid];
    return YES;
}

//删除好友
-(BOOL) deleteFriend:(NSString*) friendName
{
    XMPPJID * friendJid = [XMPPJID jidWithString:[NSString stringWithFormat:@"%@@%@",friendName,self.domain]];
    [self.rosterModule removeUser:friendJid];
    return  YES;
}

//收到好友请求 代理函数
-(void)xmppRoster:(XMPPRoster *)sender didReceivePresenceSubscriptionRequest:(XMPPPresence *)presence
{

    XMPPJID * fromJid = presence.from;
    //直接通过
    [self.rosterModule acceptPresenceSubscriptionRequestFrom:fromJid andAddToRoster:YES];
}

-(void)xmppRoster:(XMPPRoster *)sender didReceiveRosterItem:(DDXMLElement *)item
{
    NSString *subscription = [item attributeStringValueForName:@"subscription"];
    NSLog(@"%@",subscription);
    if ([subscription isEqualToString:@"both"]) {
        NSLog(@"双方成为好友!");
    }
}

 //连接成功的代理函数
-(void)xmppStreamDidConnect:(XMPPStream *)sender
{
    NSLog(@"连接成功");
    if (self.isRegister) {
        NSError* error = nil;
        [sender registerWithPassword:self.pwd error:&error];
        if (error) {
            NSLog(@"注册失败1,%@",error);
        }
    }
    else
    {
        NSError *error = nil;
        [sender authenticateWithPassword:self.pwd error:&error];
        if (error) {
            NSLog(@"验证失败1,%@",error);
        }
    }
}
//连接失败代理函数
-(void)xmppStreamDidDisconnect:(XMPPStream *)sender withError:(NSError *)error
{
    NSLog(@"连接失败,%@",error);
}

//验证成功代理函数
-(void)xmppStreamDidAuthenticate:(XMPPStream *)sender
{
    NSLog(@"验证成功");
    //4.登陆成功后 在线
    [self.xmppStream sendElement:[XMPPPresence presence]];//用户在线
}

时间: 2024-10-20 11:53:59

xmpp-iOS-添加好友和删除好友的相关文章

xmpp ios 问题篇

1. libidn.a(stringprep.o), in section __TEXT,__text reloc 8: indirect symbol index out of range for architecture i386 clang: error: linker command failed with exit code 1 (use -v to see invocation) libidn.a 框架问题,去 https://github.com/robbiehanson/XMPP

XMPP iOS客户端 添加好友 (3)

这里记录下我实现添加好友的过程,网上虽然也有相应的例子,但说的不是很全面,其中有一篇没有给出 XMPPRoster类的初始化.我找这个类的初始化设置找了好久.不多说啦.下面开始贴代码啦. 初始化XMPPRoster   对象声明 @interface XMPPModel()<XMPPStreamDelegate,XMPPRosterDelegate> @property (nonatomic , strong) XMPPStream *xmppStream; @property (nonato

xmpp iOS的框架结构

下载框架 https://github.com/robbiehanson/XMPPFramework(下载releases版本的) Authentication  :  授权登录 Categorise  :  分类 Core  :  核心 -- 和服务器交互的类 主要在Core文件夹里面 Extensions   :  扩展模块  "默认在扩展模块里的功能都是没有开启的" Utilities(tool)   :  工具类 Vendor(供应商)  :  xmpp需要使用的第三方框架 -

XMPP之添加好友请求报文

Presence.Type有七种 available (默认)用户空闲状态,即在线 unavailable 用户没空看消息,即离线 subscribe 请求订阅别人,即请求加对方为好友 subscribed 统一被别人订阅,也就是确认被对方加为好友 unsubscribe 他取消订阅别人,请求删除某好友 unsubscribed 拒绝被别人订阅,即拒绝对方的添加请求 error -- 当前状态packet有错误 好友双方对彼此的状态,有网友总结如下: none:是用户和自己roster中的好友彼

XMPP iOS客户端实现三:登录、注册

1.创建一个单例模式来管理xmpp的连接和操作 1 +(XMPPManager *)share 2 { 3 static XMPPManager *_share=nil; 4 static dispatch_once_t onceToken; 5 dispatch_once(&onceToken, ^{ 6 _share=[[XMPPManager alloc] init]; 7 }); 8 return _share; 9 } 10 -(id)init 11 { 12 if (self=[su

XMPP iOS客户端实现二:xcode项目配置

1.下载XMPPFramework,下载地址:https://github.com/robbiehanson/XMPPFramework 2.创建项目并将XMPP库引入: 3.添加需要的库文件: 4.配置KissXML: OTHER_LDFLAGS  添加  -lxml2 HEADER_SEARCH_PATHS 添加  /usr/include/libxml2

【Tech】XMPP IOS客户端(三)

上一篇实现了一个美(hen)化(chou)的聊天界面,这一篇加上发送语音和图片的功能. 其实发送语音和图片最好的办法是一端上传到服务器,另一端从服务器下载:或者用File Transfer,无奈上述第一种我不会,第二种调不通,有大神路过,望不吝指教(Orz) 我这里就是直接把语音和图片都编码为base64格式,然后放在消息里面发送过去了,其中语音是录音得到,图片则掉用相机拍摄得到. 1.发送语音 设置一个录音按钮,实现点击以下录音,再点击以下停止的功能,并且在停止后,编码为base64发送出去.

[iOS XMPP] iOS XMPP 登录

一:搭建一个即时聊天服务器推荐一下两种,搭建方法大家自行百度一下,有很多详细的教程 Openfire 使用 Java 语言编写,比较容易上手,地址:http://www.igniterealtime.org/projects/openfire/ ejabberd 使用 Erlang 语言编写,是一款非常知名的 Erlang 开源项目,地址:http://www.ejabberd.im/ 二:开始进行登录操作 1.新建一个 XMPPStream 对象,添加委托 添加委托方法 - (void)add

XMPP iOS客户端开发(二) 通信

发送消息: - (void) sendMessage:(NSString *) message toUser:(NSString *) user { NSXMLElement *body = [NSXMLElement elementWithName:@"body"]; body.stringValue = message; NSXMLElement *msg = [NSXMLElement elementWithName:@"message"]; [msg add

Tigase开发笔记1:深入认识XMPP协议

要学习基于XMPP协议的IM开发,首先要熟悉XMPP协议本身. XMPP协议的组成 主要的XMPP 协议范本及当今应用很广的XMPP 扩展: RFC 3920 XMPP:核心.定义了XMPP 协议框架下应用的网络架构,引入了XML Stream(XML 流)与XML Stanza(XML 节),并规定XMPP 协议在通信过程中使用的XML 标签.使用XML 标签从根本上说是协议开放性与扩展性的需要.此外,在通信的安全方面,把TLS 安全传输机制与SASL 认证机制引入到内核,与XMPP 进行无缝