【iOS XMPP】使用XMPPFramewok(二):用户登陆

转自:http://www.cnblogs.com/dyingbleed/archive/2013/05/10/3069397.htmlhtml

用户登陆服务器

 

准备工做dom

比较知名的开源XMPP服务器:一个是Openfire,一个是ejabberdpost

Openfire 使用 Java 语言编写,比较容易上手,地址:http://www.igniterealtime.org/projects/openfire/ui

ejabberd 使用 Erlang 语言编写,是一款很是知名的 Erlang 开源项目,地址:http://www.ejabberd.im/this

安装 ejabberd,能够参考个人博客:【ejabberd】安装XMPP服务器ejabberd(Ubuntu 12.04)spa

搭建一个本身的 XMPP 服务器以后,就让咱们开始吧!线程

 

链接服务器code

一、新建一个 XMPPStream 对象,添加委托server

添加委托方法 - (void)addDelegate:(id)delegate delegateQueue:(dispatch_queue_t)delegateQueue

参数 delegateQueue 为委托回调所使用的 GCD 队列,dispatch_get_main_queue() 获取主线程 GCD 队列

二、设置 JID 和 主机名

JID 通常由三部分构成:用户名,域名和资源名,例如 test@example.com/Anthony

若是没有设置主机名,则使用 JID 的域名做为主机名

端口号是可选的,默认是 5222

三、链接

复制代码
- (void)connect {
    if (self.xmppStream == nil) {
        self.xmppStream = [[XMPPStream alloc] init];
        [self.xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];
    }
    
    if (![self.xmppStream isConnected]) {
        NSString *username = [[NSUserDefaults standardUserDefaults] objectForKey:@"username"];
        XMPPJID *jid = [XMPPJID jidWithUser:username domain:@"lizhen" resource:@"Ework"];
        [self.xmppStream setMyJID:jid];
        [self.xmppStream setHostName:@"10.4.125.113"];
        NSError *error = nil;
        if (![self.xmppStream connect:&error]) {
            NSLog(@"Connect Error: %@", [[error userInfo] description]);
        }
    }
}
复制代码

 

身份认证

实现 - (void)xmppStreamDidConnect:(XMPPStream *)sender 委托方法

链接服务器成功后,回调该方法

This method is called after the XML stream has been fully opened. More precisely, this method is called after an opening <xml/> and <stream:stream/> tag have been sent and received, and after the stream features have been received, and any required features have been fullfilled. At this point it's safe to begin communication with the server.

身份认证方法 - (BOOL)authenticateWithPassword:(NSString *)inPassword error:(NSError **)errPtr

复制代码
- (void)xmppStreamDidConnect:(XMPPStream *)sender {
    NSString *password = [[NSUserDefaults standardUserDefaults] objectForKey:@"password"];
    NSError *error = nil;
    if (![self.xmppStream authenticateWithPassword:password error:&error]) {
        NSLog(@"Authenticate Error: %@", [[error userInfo] description]);
    }
}
复制代码

 

上线

实现 - (void)xmppStreamDidAuthenticate:(XMPPStream *)sender 委托方法

身份认证成功后,回调该方法

This method is called after authentication has successfully finished. 

If authentication fails for some reason, the xmppStream:didNotAuthenticate: method will be called instead.

新建一个 XMPPPresence 对象,类型为 available,发送!

- (void)xmppStreamDidAuthenticate:(XMPPStream *)sender {
    XMPPPresence *presence = [XMPPPresence presenceWithType:@"available"];
    [self.xmppStream sendElement:presence];
}

 

退出并断开链接

新建一个 XMPPPresence 对象,类型为 unavailable,发送!

断开链接

- (void)disconnect {
    XMPPPresence *presence = [XMPPPresence presenceWithType:@"unavailable"];
    [self.xmppStream sendElement:presence];
    
    [self.xmppStream disconnect];
}

 

 

Android 开发讨论群:84778336 
iOS 开发讨论群:82873648 

知识共享许可协议
本做品采用知识共享署名-非商业性使用 3.0 许可协议进行许可。
转载请署名李震(博客地址:http://www.cnblogs.com/dyingbleed/),且不得用于商业目的。
相关文章
相关标签/搜索