在集成融云的即时通信时,产品脑门一拍说:咋们要实现一个功能,无论是 Web 端仍是移动端登入,必须只能一个端登入成功而且后登入成功的帐号须要踢掉前面登入的帐号。ide
咋的一听感受还蛮简单的,融云不是有一个服务嘛:叫作多设备消息同步,我把该服务关掉不就好了~~ O(∩_∩)O哈哈~ui
可是....... ┭┮﹏┭┮ 是我想的太简单了,服务关掉以后 Web 端的确能够进行互踢了,可是移动端和 Web 端仍是能够在线呀,原来默认的状况下,融云仅支持 1 个 Web 端、1 个 桌面端、1 个移动端同时在线code
这个是融云多端同时在线详情:https://docs.rongcloud.cn/v4/views/im/noui/guide/group/connection/multiclient/开发
话很少说,开始揭开谜底get
一、首先将多设备消息同步 - 关闭,关闭链接:https://developer.rongcloud.cn/advance/index/YTrydqMSdEsmBtX2zX0Amg同步
二、这时若是多端登入状态监听会监听到状态码 6 时,执行断开连接产品
代码示例
it
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('断开连接成功');
});
}
}
});io
三、经过发送自定义消息,来执行断开链接方法console
好比您有两个设备 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 哦