• UIKit
  • SDK
  • 服务端 API
Chat/
SDK/
Unity(Game Solution)/
会话/
SDK
  • 跑通Demo
  • SDK 集成
  • 初始化
  • 登录和注销
  • 消息
    • 消息概述
    • 发送消息
    • 接收消息
    • 历史消息
    • 转发消息
    • 修改消息
    • 删除消息
    • 清空消息
    • 撤回消息
    • 在线消息
    • 已读回执
    • 查询消息
    • 群 @ 消息
    • 定向群消息
    • 通知免打扰
    • 消息扩展
  • 会话
    • 会话概述
    • 会话列表
    • 获取会话
    • 未读会话数
    • 置顶会话
    • 删除会话
    • 会话草稿
    • 会话标记
    • 会话组
  • 群组
    • 群组概述
    • 群组管理
    • 群资料
    • 群成员管理
    • 群成员资料
    • 自定义群属性
    • 群计数器
  • 用户
    • 用户资料
    • 用户状态
    • 好友管理
    • 好友列表
    • 黑名单
  • Changelog
  • 开发指引
  • 控制台指南
    • 创建和升级应用
    • 基本配置
    • 功能配置
    • 账号管理
    • 群组管理
    • 回调配置
  • 产品介绍
    • 消息管理
      • 单聊消息
      • 消息存储
      • 离线推送
      • 群消息
      • 消息格式
    • 账号系统
      • 登陆验证
      • 在线状态管理
    • 群相关
      • 群组系统
      • 群组管理
    • 用户资料和关系链
      • 资料管理
      • 关系链管理
  • 购买指南
    • 计费概述
    • 价格中心
  • 错误码

未读会话数

功能描述

用户的会话列表中一般会有若干个会话,如果某个会话收到了新消息,通常需要在列表的 cell 中以小红点或者数字角标的方式,向用户展示该会话的未读消息数,提醒用户尚未阅读。 用户点击进入该会话后退回到会话列表,未读消息数被清空,小红点消失。 部分应用还会统计所有会话的未读消息总数之和,将其展示在会话列表的底部 tab 上。
本文将向您介绍如何实现会话未读消息提醒功能。

获取所有会话未读消息总数

通常情况下,如果想得到所有会话的未读消息总数,可以遍历会话列表得到每个会话的信息 ConvInfo,然后再把所有的 ConvInfoconv_unread_num 相加起来,展示在 UI 上。 但 IM SDK 为您提供了直接查询所有会话未读消息总数的 API ConvGetTotalUnreadMessageCount。 当会话的未读总数发生变更时,SDK 还会主动通过回调 SetConvTotalUnreadMessageCountChangedCallback,将最新的未读总数通知给您。
具体的操作步骤如下文所示。

获取未读总数

您可以调用 ConvGetTotalUnreadMessageCount(Details) 获取所有会话的未读消息总数,获取成功后可以使用其更新 UI。
示例代码如下:
// 获取全部未读数
TIMResult res = TencentIMSDK.ConvGetTotalUnreadMessageCount((int code, string desc, GetTotalUnreadNumberResult unread, string user_data)=>{
// 处理异步逻辑
});

未读总数变更通知

您可以调用 SetConvTotalUnreadMessageCountChangedCallback(Details) 添加会话未读总数变更监听器。添加监听器后,能接收到未读总数变更通知。
示例代码如下:
TencentIMSDK.SetConvTotalUnreadMessageCountChangedCallback((int total_unread_count, string user_data)=>{
// 处理回调逻辑
});

清空会话未读消息数

用户点击进入会话后退回到会话列表,需要清除未读消息数。清除后,会话列表的小红点或数字角标需要随之消失。 IM SDK 针对待清空会话未读数的不同会话类型,提供了 3 个 API:
清空单聊会话未读消息数 MsgReportReaded
清空群聊会话未读消息数 MsgSendMessageReadReceipts
清空全部会话未读消息数 MsgMarkAllMessageAsRead
具体的操作步骤如下文所示。

单聊

您可以调用 MsgReportReaded(Details) 清空指定单聊会话的未读消息数。
示例代码如下:
// message 可以填 null,此时以会话当前最新消息的时间戳(如果会话存在最新消息)或当前时间为已读时间戳上报.当要指定消息时,则以该指定消息的时间戳为已读时间戳上报,最好用接收新消息获取的消息数组里面的消息Json或者用消息定位符查找到的消息Json,避免重复构造消息
TIMResult res = TencentIMSDK.MsgReportReaded(conv_id, TIMConvType TIMConvType.kTIMConv_C2C, null, (int code, string desc, string user_data)=>{
// 处理异步逻辑
});
MsgReportReaded 调用成功后:
1. 如果调用者事先调用 SetConvEventCallback 添加了会话监听器,会收到 ConvEventCallback 回调,可以在此回调中更新 UI。
2. 对端会收到 MsgReadedReceiptCallback 回调,回调里面会携带清空会话未读数的时间戳。

群聊

您可以调用 MsgSendMessageReadReceipts(Details) 清空指定群聊会话的未读消息数。
示例代码如下:
TIMResult res = TencentIMSDK.MsgSendMessageReadReceipts(msg_array, (int code, string desc, string user_data)=>{
// 处理异步逻辑
});
MsgReportReaded 调用成功后:
1. 如果调用者事先调用 SetConvEventCallback 添加了会话监听器,会收到 ConvEventCallback 回调,可以在此回调中更新 UI。
2. 对端会收到 MsgReadedReceiptCallback 回调,回调里面会携带清空会话未读数的时间戳。

所有会话

您可以调用 MsgMarkAllMessageAsRead(Details) 清空所有会话的未读消息数。
示例代码如下:
TIMResult res = TencentIMSDK.MsgMarkAllMessageAsRead((int code, string desc, string user_data)=>{
// 处理异步逻辑
});
MsgMarkAllMessageAsRead 调用成功后,如果调用者事先调用 SetConvEventCallback 添加了会话监听器,会收到 ConvEventCallback 回调,可以在此回调中更新 UI。
示例代码如下:
TencentIMSDK.SetConvEventCallback((TIMConvEvent conv_event, List<ConvInfo> conv_list, string user_data)=>{
// 处理回调逻辑
});