乐趣区

关于sdk:融云-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 哦

退出移动版