Web SDK如何实现只有一个设备登入,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
公司主营业务:网站建设、成都做网站、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联公司推出芙蓉免费做网站回馈大家。
在集成融云的即时通讯时,产品脑门一拍说:咋们要实现一个功能,不管是 Web 端还是移动端登入,必须只能一个端登入成功并且后登入成功的账号需要踢掉前面登入的账号。
咋的一听感觉还蛮简单的,融云不是有一个服务嘛:叫做多设备消息同步,我把该服务关掉不就行了~~ O(∩_∩)O哈哈~
但是我想的太简单了,服务关掉之后 Web 端的确可以进行互踢了,但是移动端和 Web 端还是可以在线呀,原来默认的情况下,融云仅支持 1 个 Web 端、1 个 桌面端、1 个移动端同时在线
这个是融云多端同时在线详情:https://docs.rongcloud.cn/v4/views/im/noui/guide/group/connection/multiclient/
话不多说,开始揭开谜底
1、首先将多设备消息同步 - 关闭,关闭连接:https://developer.rongcloud.cn/advance/index/YTrydqMSdEsmBtX2zX0Amg
2、这时如果多端登入状态监听会监听到状态码 6 时,执行断开链接
代码示例
im.watch({ conversation: function(event){ var updatedConversationList = event.updatedConversationList; // 更新的会话列表 console.log('更新会话汇总:', updatedConversationList); console.log('最新会话列表:', im.Conversation.merge({ conversationList, updatedConversationList })); }, message: function(event){ var message = event.message; console.log('收到新消息:', message); }, status: function(event){ console.log('连接状态码:', status); var status = event.status; if(status == 6){ im.disconnect().then(function() { console.log('断开链接成功'); }); } }});
3、通过发送自定义消息,来执行断开连接方法
比如您有两个设备 A,B,用户开始在 A 设备登入,然后再 B 设备登入成功后给自己或者给别人发一条自定义消息,A 设备在监听中根据该自定义消息判断,调用断开连接方法,即可做到只有一个设备登入
//发送自定义消息var conversation = im.Conversation.get({ targetId: '接收方的 userId', type: RongIMLib.CONVERSATION_TYPE.PRIVATE});conversation.send({ messageType: 's:person', // 填写开发者定义的 messageType content: { // 填写开发者定义的消息内容 name: 'RongCloud', age: 12 }, isPersited: true,// 是否存储在服务端,默认为 true isCounted: true // 是否计数. 计数消息接收端接收后未读数加 1,默认为 true}).then(function(message){ console.log('发送 s:person 消息成功', message);});
通过上面的步骤,就可以实现只能单设备登入了,但是需要注意您使用的 SDK 版本,一开始我用 3.0.5 SDK 来做,但是有一个问题:执行断开连接还是会进行重连,所以要使用 SDK 3.0.6 版本以上的 SDK 哦
看完上述内容,你们掌握Web SDK如何实现只有一个设备登入的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!