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


最近在開過工作中用到了騰訊IM的功能,由於業務的需要主要使用到了:

1.loginInfo 用戶登錄,用戶信息

2.getRecentContactList 獲得最近聯系人

3.getLastGroupHistoryMsgs 獲取群聊天信息

4.getC2CHistoryMsgs 獲取C2C的消息

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

6.onMsgNotify 消息回調

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

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

官方方法如下,說明也比較簡單,並未標注一些特殊情況。

 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> 解決問題的方式,就是解決它一次

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM