欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

微信小程序接入腾讯云IM即时通讯(会话列表之未读消息,显示最新一条消息开发步骤)

程序员文章站 2022-07-12 14:16:45
...

微信小程序接入腾讯云IM即时通讯(会话列表之未读消息,显示最新一条消息开发步骤)

1.未读消息思路

首先,获取未读消息第一步就是要先能接收到对方发送的信息,也就是要在官方api中给的监听新消息事件做处理。先看下图需要做的功能点

微信小程序接入腾讯云IM即时通讯(会话列表之未读消息,显示最新一条消息开发步骤)

  1. 接收到对方发过来的新消息之后获取消息的未读计数;
    微信小程序接入腾讯云IM即时通讯(会话列表之未读消息,显示最新一条消息开发步骤)

js代码

1.先获取未读的消息计数,获取会话列表最新的一条消息

//获取消息未读数并更新到会话列表
function getUnread(){
  var sess= {};
  var sessMap = webim.MsgStore.sessMap();
  if (that.data.contactList) {//这里判断是否存在会话列表,或者在会话列表的页面
    // 更新消息的未读数
    for (var i in sessMap) {
      sess = sessMap[i];
      var contactList = that.data.contactList.map((item, index) => {
        if (item.To_Account == sess.id()) {
          item.UnreadMsgCount = sess.unread()
        }
        return item;
      })
      //先把未读数赋值
      that.setData({
        contactList: contactList
      })
        // 获取最新的会话消息(把最新的一条赋值到会话列表)
        webim.getRecentContactList({
          'Count': 10 //最近的会话数 ,最大为 100
        }, function (resp) {
          var MsgShow = resp.SessionItem.filter((item, index) => {
            if (item.To_Account == sess.id()) return item;
          })
         
          var contactList = that.data.contactList.map((item, index) => {
            if (item.To_Account == sess.id()) {
              // 获取最新消息
              if (MsgShow[0].MsgShow == '[其他]'){
                MsgShow[0].MsgShow = '[房源信息]'
              }
              item.MsgShow = MsgShow[0].MsgShow
              
            }
            return item;
          })
          
          that.setData({
            contactList: contactList
          })

        })

      }
  }
}

2.在接收到新消息事件中调用这个方法getUnread()这个方法

//获取消息未读数并更新到会话列表
//监听新消息(私聊(包括普通消息、全员推送消息),普通群(非直播聊天室)消息)事件
//newMsgList 为新消息数组,结构为[Msg]
function onMsgNotify(newMsgList) {
    var newMsg;
    //获取所有聊天会话
 
    for (var j in newMsgList) {//遍历新消息
        newMsg = newMsgList[j];
        
        if (newMsg.getSession().id() == id) {//为当前聊天对象的消息
            selSess = newMsg.getSession();
            handlderMsg(newMsg, false);
            currentMsgsArray = currentMsgsArray.map((item, index) => {
              if (!item.isSelfSend) {
                item.avatar = myAvatar
              } else {
                item.avatar = friendAvatar
              }
              return item;
            })
            var myMessages = that.setDatas(currentMsgsArray);
            that.setData({
              myMessages: myMessages,

            })
            setTimeout(function () {
              if (that.data.is_chat){
                that.pageScrollToBottom()
              }
            }, 100)
          
        }
    }
    getUnread()
    
}