微信小程序接入腾讯云IM即时通讯(会话列表之未读消息,显示最新一条消息开发步骤)
程序员文章站
2022-07-12 14:16:45
...
微信小程序接入腾讯云IM即时通讯(会话列表之未读消息,显示最新一条消息开发步骤)
1.未读消息思路
首先,获取未读消息第一步就是要先能接收到对方发送的信息,也就是要在官方api中给的监听新消息事件做处理。先看下图需要做的功能点
- 接收到对方发过来的新消息之后获取消息的未读计数;
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()
}
上一篇: AOP