Jw
首页
技术
英语
首页
技术
英语
  • 前端

    • 微信

      • H5

        • 网页授权
        • JSSDK 配置注入
        • 分享设置
        • 调起支付
      • 小程序

        • 腾讯云 IM - 获取签名
        • 腾讯云 IM - 登录
        • 腾讯云 IM - 最近联系人
        • 常用工具类
        • 实现 async/await

小程序腾讯云 IM:最近联系人列表

登录后拉取最近联系人、同步未读消息并格式化列表数据。

详细说明,移步官方文档
im调试工具

  1. 登陆;
  2. 调用sdk获取最近联系人列表数据
  3. 初始化消息,获取未读消息
  4. 处理数据格式
  5. 赋值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:登录:登录后才有会话数据
最近更新: 2026/10/12 09:08
Contributors: liujw
Prev
腾讯云 IM - 登录
Next
常用工具类