xmpp学习笔记(一)

 本身学习xmpp官方文档,慢慢整理的笔记,不见得都是正确的,请用选择性眼光看待,也有问题还没有解决,持续更新中~~~并发

 

 

 

建立新工程,命名为XMPPIOS.app

 

 

 

一:导入XMPPFramework学习

 

 

将XMPP拖拽到工程中。ui

 

添加静态库spa

 

 

 

 

并在Build Settings中设置以下3d

 

 

 

 

此时Run一下,成功,证实导入正确。代理

注意:XMPP使用了ARC,Edit -> Refactor -> convert to Objective-C ARC,转换。code

头文件也能够本身建立,内容是须要import的头文件,能够根据本身的需求来肯定。xml

------------------------------------------------可爱的分界线------------------------------------------------------------------blog

 

 

:链接和注册 XEP-0077  XEP-0020

 

 

 

 

拖拽相应控件到页面中。

在appdelegate.h中建立相应属性

 

.m

 

这里建立xmpp的地方比官方的demo少了不少,主要是由于开始使用的时候我的认为并不用那么多变量,以后会一点一点添加。

添加建立链接方法

 

建立链接成功后,两个代理方法调用,分别为

- (void)xmppStreamWillConnect:(XMPPStream *)sender

- (void)xmppStreamDidConnect:(XMPPStream *)sender

此时添加注册的代码

 

若是注册成功,调用以下代理方法

- (void)xmppStreamDidRegister:(XMPPStream *)sender

如今看看后台openfire中已经存在注册的用户了。

若是没有注册成功则调用

- (void)xmppStream:(XMPPStream *)sender didNotRegister:(NSXMLElement *)error

若是发现以下错误

<iq xmlns="jabber:client" type="error" to="saas.kanyabao.com/213e75ed"><query xmlns="jabber:iq:register"><username>dawn</username><password>1111</password></query><error code="409" type="cancel"><conflict xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq>

则是由于当前的用户已经存在。

而后在- (void)xmppStreamDidRegister:(XMPPStream *)sender

 

 

 

 

 

为当前用户作认证,若是认证成功,则调用

- (void)xmppStreamDidAuthenticate:(XMPPStream *)sender

不然调用

- (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(NSXMLElement *)error

此时,当前用户已经与后台openfire链接,可是在openfire中,当前用的状态是未登陆状态,因此此时,当前用户发送状态告知后台,这样其余的用户才能收到当前用户的上线通知。

因此,在

- (void)xmppStreamDidAuthenticate:(XMPPStream *)sender

方法中添加以下代码

    XMPPPresence *presence = [XMPPPresencepresence];

[[self xmppStream] sendElement:presence];

再次run,刷新open fire  发现当前用户的状态已是上线了

 

注意:注册以前要建立链接,不然会报"Please wait until the stream is connected"的错误

            链接或者注册后须要作一次认证,并发送一个上线的消息,不然后台和其余用户都没法收到当前用户的上线消息,后台openfire中看到的当前用户是灰色的离线状态。

            注册以后若是要再次创建链接,最好断开后再建立,不然会报"Attempting to connect while already connected or connecting"的错误。

相关文章
相关标签/搜索