一、功能描述
这篇会向你介绍如何实现会话未读消息提醒功能。
二、获取所有会话未读消息总数
通常情况下,如果想得到所有会话的未读消息总数,可以遍历会话列表得到每个会话的信息 ConvInfo,然后再把所有的 ConvInfo 的 conv_unread_num 相加起来,展示在 UI 上。
但 IM SDK 为你提供了直接查询所有会话未读消息总数的 API ConvGetTotalUnreadMessageCount。
当会话的未读总数发生变更时,SDK 还会主动通过回调 SetConvTotalUnreadMessageCountChangedCallback,将最新的未读总数通知给你。
具体的操作步骤如下文所示。
三、获取未读总数
你可以调用 ConvGetTotalUnreadMessageCount(点击查看详情) 获取所有会话的未读消息总数,获取成功后可以使用其更新 UI。
示例代码如下:
// 获取全部未读数TIMResult res = TencentIMSDK.ConvGetTotalUnreadMessageCount((int code, string desc, GetTotalUnreadNumberResult unread, string user_data)=>{ // 处理异步逻辑});
四、未读总数变更通知
你可以调用 SetConvTotalUnreadMessageCountChangedCallback(点击查看详情) 添加会话未读总数变更监听器。添加监听器后,能接收到未读总数变更通知。
示例代码如下:
TencentIMSDK.SetConvTotalUnreadMessageCountChangedCallback((int total_unread_count, string user_data)=>{ // 处理回调逻辑});
五、清空会话未读消息数
用户点击进入会话后退回到会话列表,需要清除未读消息数。清除后,会话列表的小红点或数字角标需要随之消失。
IM SDK 针对待清空会话未读数的不同会话类型,提供了 3 个 API:
·清空单聊会话未读消息数 MsgReportReaded。
·清空群聊会话未读消息数 MsgSendMessageReadReceipts。
·清空全部会话未读消息数 MsgMarkAllMessageAsRead。
具体的操作步骤如下文所示。
六、单聊
你可以调用 MsgReportReaded(点击查看详情) 清空指定单聊会话的未读消息数。
示例代码如下:
// 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(点击查看详情) 清空指定群聊会话的未读消息数。
示例代码如下:
TIMResult res = TencentIMSDK.MsgSendMessageReadReceipts(msg_array, (int code, string desc, string user_data)=>{ // 处理异步逻辑});
当 MsgReportReaded 调用成功后:
1. 如果调用者事先调用 SetConvEventCallback 添加了会话监听器,会收到 ConvEventCallback 回调,可以在此回调中更新 UI。
2. 对端会收到 MsgReadedReceiptCallback 回调,回调里面会携带清空会话未读数的时间戳。
八、所有会话
你可以调用 MsgMarkAllMessageAsRead(点击查看详情) 清空所有会话的未读消息数。
示例代码如下:
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)=>{ // 处理回调逻辑});