最近在开发即时通讯模块的时候发现了一个问题:同平台之间可以相互挤掉用户,而跨平台也就是Android和IOS之间可以登录相同的账号,以Android为例,通常情况下,A设备在登录一个用户后,若B设备也登录相同账户,openfire后台就会把A设备的连接关掉,而A设备在连接监听中,也可以监听到自己被关闭的消息,从而去做一些处理。然而蹊跷的是,在实际过程中,IOS登录后,Android设备并没有监听到相关消息;反向测试也一样。无奈之下,我向后台人员要了openfire后台的地址,想看看用户的状态,这一看,还真就找到问题了!如图:
名称均为200054的用户居然有两个!它们的区分在于资源名称不同,这就是问题的所在了,通过查阅资料发现,原来xmpp是支持同账号多平台登录的,而资源名称就标记了不同平台的一些信息,这样想来QQ在你被挤掉的时候,会告诉你一些登录你账号的设备信息,也许也是通过这个解析这个资源名称得到的吧(个人臆测)更多关于这方面的资料可以查看这个链接:点击打开链接,了解了基本原理,这个问题就好解决了,只要和IOS那边统一一下资源名称就ok了!测试一下,完美!