默认
发表评论 5
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已回复] O求教MobileIMSDK实现多端登陆互踢功能的疑问
如图,互踢实现根据实际情况应该考虑2个流程:测试准备: 2个手机,设备A和设备B,都登陆同一个账户:

1,步骤:设备A登陆->设备B登陆,在这里判断就没问题。因为设备A是在线的,onlineSessions.containsKey(user_id) 这里判断没问题。

2,步骤:设备A登陆->设备A按home键或者关闭APP进程,此时会离线->设备B登陆,此时因为设备A离线了,所以没办法知道给设备A发送一个消息告诉他让他退出登陆->设备A打开APP,这样就有2个设备登陆同一个账户。

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

标签:MobileIMSDK

1774BCB8-87E6-4853-83BE-6AB056244118.png (151.16 KB, 下载次数: 2968)

1774BCB8-87E6-4853-83BE-6AB056244118.png
上一篇:[已回复] 小白求助位置信息处理不过来,怎么影响到android端重新登录了下一篇:[已回复] MobileIMSDK的android端发消息 handler错误

本帖已收录至以下技术专辑

推荐方案
评论 5
最好的办法应该是这样:
第一步:每次启动APP第一次登陆时(区别于掉线重连的情况),服务端在它登陆成功时生成一个时间戳,一是给客户端返回、二是同时保存在在线列表里;
第二步:每个客户端登陆时带着这个时间戳到服务端,服务端来比对这个时间戳是否为空、是否是新还是老的,就能区分出:是不是同一个客户的掉线重连、或者不同客户的被踢等情况。

你按我的思路体验一下,一定可以解决,尤其服务端比对这个逻辑。
引用:JackJiang 发表于 2018-04-04 16:53
最好的办法应该是这样:
第一步:每次启动APP第一次登陆时(区别于掉线重连的情况),服务端在它登陆成功 ...

现在的问题关键是,第二个步骤 设备A再次打开app,应该要能知道已经有别的设备登陆了账户,这样设备A就能知道强行退出登陆。并且到登陆界面
引用:q412239930 发表于 2018-04-04 17:20
现在的问题关键是,第二个步骤 设备A再次打开app,应该要能知道已经有别的设备登陆了账户,这样设备A就能 ...

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

二是同时保存在在线列表里;   在线列表 OnlineProcessor.onlineSessions 用这个不行吧? 因为设备离线后 会从这个Map里面移除。 如果按照这个逻辑,应该再加一个集合,保存登陆过的用户。
引用:q412239930 发表于 2018-04-08 09:43
二是同时保存在在线列表里;   在线列表 OnlineProcessor.onlineSessions 用这个不行吧? 因为设备离线后 ...

你考虑的基本是这样。可以动手实践一下
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部