默认

[已回复] O求教MobileIMSDK实现多端登陆互踢功能的疑问

查看数: 43840 | 评论数: 5 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2018-04-04 16:41

正文摘要:

如图,互踢实现根据实际情况应该考虑2个流程:测试准备: 2个手机,设备A和设备B,都登陆同一个账户: 1,步骤:设备A登陆->设备B登陆,在这里判断就没问题。因为设备A是在线的,onlineSessions.containsKey(use ...

评论

JackJiang 发表于 6 年前
引用:q412239930 发表于 2018-04-08 09:43
二是同时保存在在线列表里;   在线列表 OnlineProcessor.onlineSessions 用这个不行吧? 因为设备离线后 ...

你考虑的基本是这样。可以动手实践一下
q412239930 发表于 6 年前
引用:JackJiang 发表于 2018-04-04 16:53
最好的办法应该是这样:
第一步:每次启动APP第一次登陆时(区别于掉线重连的情况),服务端在它登陆成功 ...

二是同时保存在在线列表里;   在线列表 OnlineProcessor.onlineSessions 用这个不行吧? 因为设备离线后 会从这个Map里面移除。 如果按照这个逻辑,应该再加一个集合,保存登陆过的用户。
JackJiang 发表于 6 年前
引用:q412239930 发表于 2018-04-04 17:20
现在的问题关键是,第二个步骤 设备A再次打开app,应该要能知道已经有别的设备登陆了账户,这样设备A就能 ...

设备A再次重连的时候会到服务端,服务端比对他带过来的时间戳,由服务端告诉他“你这个相同uid的时间戳晚于那哥们的(当前在线列表中的)”,那就意味着你已经被踢了,在客户端回调里可以拿到服务端在重连接口的返回结果,然后客户端强制release掉整个核心并像qq一样给一个界面提示(比如点确认后就退到登陆界面),不就可以了
q412239930 发表于 6 年前
引用:JackJiang 发表于 2018-04-04 16:53
最好的办法应该是这样:
第一步:每次启动APP第一次登陆时(区别于掉线重连的情况),服务端在它登陆成功 ...

现在的问题关键是,第二个步骤 设备A再次打开app,应该要能知道已经有别的设备登陆了账户,这样设备A就能知道强行退出登陆。并且到登陆界面
JackJiang 发表于 6 年前
最好的办法应该是这样:
第一步:每次启动APP第一次登陆时(区别于掉线重连的情况),服务端在它登陆成功时生成一个时间戳,一是给客户端返回、二是同时保存在在线列表里;
第二步:每个客户端登陆时带着这个时间戳到服务端,服务端来比对这个时间戳是否为空、是否是新还是老的,就能区分出:是不是同一个客户的掉线重连、或者不同客户的被踢等情况。

你按我的思路体验一下,一定可以解决,尤其服务端比对这个逻辑。

返回顶部