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