XMPPFramework开发(七):好友上下线和重新连接

111396375-f85088f448c3386e

前言


XMPPFramework写到这一篇基本就要结束了,可能后期还要更新SDChat,如果有更新的话,骚栋会同步更新博客的,前面我们说了XMPPFramework中几个比较大功能,这一篇我们将说一下关于用户上下线和重新连接.

121396375-c789ccac5f799b6c

用户上下线状态获取


用户上下线相比其他功能要简单的多,就是在AppDelegate的XMPPSteam的- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence代理方法中获取到好友节点状态的.在XMPPFramework开发(五):添加/删除好友这篇文章中,我们曾经使用这个方法获取好友节点取消订阅我的消息,这里我们也可以使用这个方法确定好友的上下线状态.上下线状态类型有两个值.如下所示.

我们只需要找到对应的好友把状态改变即可.当然了,为了防止一个好友节点状态获取多次,我们需要先判断当前状态和需要修改的状态是否一致,如果一致就不修改,如果不一致,那么修改完好友状态之后通知好友列表页面进行刷新操作即可.这里我们只拿上线状态来进行说明解释,离线状态与之类似,代码如下所示.

这里有一个小逻辑我需要说一下,那就是在添加好友节点数据(代理方法为-(void)xmppRoster:(XMPPRoster *)sender didReceiveRosterItem:(DDXMLElement *)item)的时候,我们需要先把好友状态全部设置为离线状态,当获取完好友节点的时候,获取好友节点状态这个代理方法才会执行.然后,方法中会把当前在线的用户更改为上线状态.

 121396375-c789ccac5f799b6c

经过上面的代码,我们就可以实时的获取好友上下线状态了.

141396375-80d5d7d9c8a6fe81

登录与重新连接


当用户的应用进入后台的时候,如果不做任何操作,用户其实是与服务器断开了连接的,那么我们想让用户应用从后台进入前台的时候,用户可以重新与服务器进行连接.XMPPFramework已经为我们提供了对应的类,那么就是XMPPReconnect,接下来我们看看在SDChat中,骚栋是如何实现断线重连的.

XMPPFramework开发(二):工程配置以及登录注册,我们曾经在登录成功之后保存了登录者的账号和密码.就是用于断线重连的时候使用的,具体代码位置如下图所示.

151396375-68e1ec3a8baad676

在SDXmppManager初始化过程中我们需要对XMPPReconnect属性对象进行初始化的操作,并且进行激活,代码如下所示.

激活完成之后,我们需要在AppDelegate中设置XMPPReconnect属性对象的代理对象.如下所示.

在AppDelegate中设置完代理之后,当用户从后台进入前台的时候,XMPPReconnect对象检测到用户是离线状态之后,会自动连接服务器,然后在- (void)xmppReconnect:(XMPPReconnect *)sender didDetectAccidentalDisconnect:(SCNetworkConnectionFlags)connectionFlags方法,所以我们需要在方法中实现用户的登录,不过在登录之前,我们需要先把用户数据重新清理一下.整体代码如下所示.

结束


这篇文章写到这里基本就结束了,好友上下线和重新连接算的上是两个比较小的功能点,如果在SDChat中遇到任何问题,欢迎联系骚栋,最后仍然还是把SDChat的传送门送给大家.大家可以对照着SDChat的Demo来对照本篇博客的技术点.

–>SDChat传送门🚪

1 收藏 评论

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部