xmpp學習筆記(一)


 自己學習xmpp官方文檔,慢慢整理的筆記,不見得都是正確的,請用選擇性眼光看待,也有問題尚未解決,持續更新中~~~

 

 

 

創建新工程,命名為XMPPIOS.

 

 

 

一:導入XMPPFramework

 

 

將XMPP拖拽到工程中。

 

添加靜態庫

 

 

 

 

並在Build Settings中設置如下

 

 

 

 

此時Run一下,成功,證明導入正確。

注意:XMPP使用了ARC,Edit -> Refactor -> convert to Objective-C ARC,轉換。

頭文件也可以自己創建,內容是需要import的頭文件,可以根據自己的需求來確定。

------------------------------------------------可愛的分界線------------------------------------------------------------------

 

 

:連接和注冊 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"的錯誤。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM