xmpp学习笔记(二)

三:朋友列表  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="&#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;

方法相似

相关文章
相关标签/搜索