三:朋友列表 XEP-0083ios
得到朋友列表,咱們要使用花名冊(roster)的方法sql
添加數據庫
在setupStream方法中添加框架
xmppRosterStorage = [[XMPPRosterCoreDataStoragealloc]init];ui
xmppRoster = [[XMPPRosteralloc]initWithRosterStorage:xmppRosterStorage];spa
[xmppRosteractivate:self.xmppStream];3d
[xmppRosteraddDelegate:selfdelegateQueue:dispatch_get_main_queue()];代理
再次運行後,會發現,xmppstream發送了sqlite
<iq type="get"><query xmlns="jabber:iq:roster"/></iq>xml
並收到
<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="看牙宝客服@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;
方法相似