xmpp學習筆記(二)


三:朋友列表  XEP-0083

 

獲得朋友列表,我們要使用花名冊(roster)的方法

添加

 

setupStream方法中添加

    xmppRosterStorage = [[XMPPRosterCoreDataStoragealloc]init];

    xmppRoster = [[XMPPRosteralloc]initWithRosterStorage:xmppRosterStorage];

    [xmppRosteractivate:self.xmppStream];

    [xmppRosteraddDelegate:selfdelegateQueue:dispatch_get_main_queue()];

 

再次運行后,會發現,xmppstream發送了

<iq type="get"><query xmlns="jabber:iq:roster"/></iq>

並收到

<iq xmlns="jabber:client" type="result" to="dawn@saas.kanyabao.com/XMPPIOS"><query xmlns="jabber:iq:roster"/></iq>

我查看了相應的0083的協議,發現基本符合。

由於我們現在是一個新注冊的用戶,還沒有好友,所以收到的IQ中沒有朋友的列表的item.

XMPPRosterCoreDataStorage這個類是用於用戶保存的,在xmpp的官方框架中提供了兩種存儲好友列表的方法,這里使用coredata

 

 

添加新的viewcontroller 命名為FriendsListViewController繼承於uitableviewcontroller

添加添加好友的按鈕和方法

 

 

在這里,我的好友的JID已經寫死,實際應用中可以隨意填寫,此處看牙寶客服的客戶端使用的是spark,

點擊這個按鈕執行程序后,在spark中出現請求頁面

 

 

點擊接收

 

如果打印出接收和發送的IQ,presence,這這個操作的過程中,ios的客戶端和spark與openfire已經進行了一系列的溝通。

我們最后接收到了出席信息

<presence xmlns="jabber:client" id="pju7P-6" from="看牙寶客服@saas.kanyabao.com/Spark 2.6.3" to="dawn@saas.kanyabao.com/XMPPIOS"><status>在線</status><priority>1</priority></presence>

-------------以上是iOS添加spark的過程---------------------------------------------

如果是從spark向ios端發送添加好友的請求

我們會收到如下信息

<presence xmlns="jabber:client" id="pju7P-49" to="dawn@saas.kanyabao.com" type="subscribe" from="&#x770B;&#x7259;&#x5B9D;&#x5BA2;&#x670D;@saas.kanyabao.com"/>

 

 

推薦在- (void)xmppRoster:(XMPPRoster *)sender didReceivePresenceSubscriptionRequest:(XMPPPresence *)presence

方法中接收添加好友信息的代碼,方法多樣,隨君挑選!!

 

如果有添加好友的消息,則顯示

 

以下是接收請求的代碼

 

拒絕的代碼為rejectPresenceSubscriptionRequestFrom

上文提到的用於保存朋友信息的XMPPRosterCoreDataStorage已經將信息保存下來了

進入Library的文件夾內就能看到sqlite的數據庫了

 

 

在展示朋友信息的頁面中添加如下代碼

 

 

這樣就獲得了所有朋友的信息

 

此時,數據已經全部獲取到了,想怎么虐就怎么虐吧!

 

一個問題出現了,那就是好友狀態,在這個頁面中,如果好友狀態更新,這個列表並不能即時的更新,所以現在添加即時更新的代碼

現添加代理ChatDelegate

 

 

這樣的方法是更改了當前頁面的dataarray。

其實這個時候數據庫的數據已經改變了,但是必須要退出這個頁面再進入才能看到改變,重新從數據庫獲取也不行,尚未找到其他更好的解決方法!!

PS:在處理childAtIndex的時候最好做個判斷,免得越界。

        刪除好友- (void)removeUser:(XMPPJID *)jid;

   修改好友備注- (void)setNickname:(NSString *)nickname forUser:(XMPPJID *)jid;

   方法類似


免責聲明!

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



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