騰訊雲通訊WebIM事件回調的坑~

最近在開過工做中用到了騰訊IM的功能,因爲業務的須要主要使用到了:web

1.loginInfo 用戶登陸,用戶信息數組

2.getRecentContactList 得到最近聯繫人spa

3.getLastGroupHistoryMsgs 獲取羣聊天信息code

4.getC2CHistoryMsgs 獲取C2C的消息對象

5.sendMsg 消息的發送(圖片、文字、自定義)blog

6.onMsgNotify 消息回調事件

在總體開發過程當中,1-5相對開發比較順暢,當時在消息回調的時候出現了問題圖片

消息回調是比較重要的,是整個通信模塊的核心部分,全部消息的收發顯示全依賴於此。開發

官方方法以下,說明也比較簡單,並未標註一些特殊狀況。get

 1 //監聽新消息事件
 2 //newMsgList 爲新消息數組,結構爲[Msg]
 3 function onMsgNotify(newMsgList) {
 4     //console.warn(newMsgList);
 5     var sess, newMsg;
 6     //獲取全部聊天會話
 7     var sessMap = webim.MsgStore.sessMap();
 8     for (var j in newMsgList) {//遍歷新消息
 9         newMsg = newMsgList[j];
10         if (newMsg.getSession().id() == selToID) {//爲當前聊天對象的消息
11             selSess = newMsg.getSession();
12             //在聊天窗體中新增一條消息
13             //console.warn(newMsg);
14             addMsg(newMsg);
15         }
16     }
17     //消息已讀上報,以及設置會話自動已讀標記
18     webim.setAutoRead(selSess, true, true);
19     for (var i in sessMap) {
20         sess = sessMap[i];
21         if (selToID != sess.id()) {//更新其餘聊天對象的未讀消息數
22             updateSessDiv(sess.type(), sess.id(), sess.unread());
23         }
24     }
25 }

開始認爲在該消息回調是隻要有消息就會觸發,但在開發中發現:

1.當本身C2C消息發送的時候,並未觸發

2.當本身GROUP消息發送的時候,會觸發

 

這樣就致使,咱們最初按照C2C消息監聽邏輯開發的消息接收模塊,應用到GROUP上的時候出現了,消息屢次顯示的問題

主要表現爲,多端在線,其餘端發送正常,本端發送異常

思考,多是由於騰訊雲認爲若是消息爲GROUP的時候會進行全員廣播,而此時本身也是羣成員的一部分;而C2C的時候則不會。

 

因此在開發中需注意幾點:

1.本端發送消息,區分GROUP和C2C展現

2.消息接收,區分是本端仍是其餘端,若是是本端則不進行重複處理,這裏須要在代碼中標註

3.消息接收,區分是本身發送,仍是別人發送

 

做者:舊舊的 <393210556@qq.com> 解決問題的方式,就是解決它一次

相關文章
相關標籤/搜索