融雲 Web SDK 如何實現只有一個裝置登入
阿新 • • 發佈:2021-01-06
融雲 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 哦