小程序腾讯云 IM:最近联系人列表
登录后拉取最近联系人、同步未读消息并格式化列表数据。
- 登陆;
- 调用sdk获取最近联系人列表数据
- 初始化消息,获取未读消息
- 处理数据格式
- 赋值data,显示到界面
let imhandler = require('../../utils/im_handler.js'); // 这个是所有 im 事件的 js
import Promise from '../../utils/promise.js'; // 目前小程序原生取消支持Promise
import regeneratorRuntime, { async } from '../../utils/regenerator-runtime.js' //async /小程序原生不支持async
// 获取应用实例
const app = getApp()
onShow(){
app.initImParams()
.then(()=>imhandler.login({
loginInfo:app.data.im,
MsgNotifyCallBack:this.formatContactList, // 监听新消息,调用获取最近联系人
}),err=>console.warn('im 登陆失败-->',err))
.then(this.formatContactList) // 登陆完成,获取最近联系人列表
.catch(err=>console.warn('加载最近联系人失败-->',err))
},
// 处理最近联系人列表信息、格式化
async formatContactList(){
try{
await new Promise(rs=>setTimeout(rs,500)) // 防止新用户没有几时更新到im服务器,导致获取失败
let recentContactList = await this.getRecentContactList();
let conversationList = await this.getConversationList();
// 整合列表
let contactList = recentContactList.map(e=>{
for(let i in conversationList){
var session = conversationList[i]
if (session.unread() > 0&&e.friendId === session.id())e.unreadMsgCount = session.unread();
}
return e
});
// 设置联系人列表
this.setData({
contactList: contactList
})
}catch(err){
console.warn('获取最近联系人列表、未读消息失败--->',err);
}
},
// 获取最近联系人列表
getRecentContactList(){
return new Promise((rs,rj)=>{
im.getRecentContactList({ 'Count': 100 }, // 获取联系人数量,上限100
res=>{
if(res.SessionItem && res.SessionItem.length > 0){
rs(res.SessionItem.map(e=>{
return{
'friendId': e.To_Account,
'friendName': e.C2cNick,
'friendAvatarUrl': e.C2cImage,
'msgTime': util.getDateDiff(e.MsgTimeStamp * 1000), // 格式化时间
'msg': e.MsgShow,
'unreadMsgCount': e.UnreadMsgCount
}
}));
}else{
rs([]);
}
console.log('获取最近联系人列表成功--->',res);
},
err=>{
console.warn('获取最近联系人列表失败--->',err)
rj(err);
})
})
},
// 获取会话对象列表
getConversationList(){
// 初始化消息
return new Promise((rs,rj)=>{
im.syncMsgs(
res=>{
console.warn('初始化会话信息成功--->',res);
rs(im.MsgStore.sessMap()) // 获取未读消息对象
},
err=>{
console.warn('初始化会话信息失败--->',err);
rj(err);
}
)
})
},
相关
- 小程序腾讯云 IM:登录:登录后才有会话数据