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"的錯誤。

相關文章
相關標籤/搜索