最近在開過工作中用到了騰訊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> 解決問題的方式,就是解決它一次