功能描述
用户的会话列表中一般会有若干个会话,如果某个会话收到了新消息,通常需要在列表的 cell 中以小红点或者数字角标的方式,向用户展示该会话的未读消息数,提醒用户尚未阅读。 用户点击进入该会话后退回到会话列表,未读消息数被清空,小红点消失。 部分应用还会统计所有会话的未读消息总数之和,将其展示在会话列表的底部 tab 上。
本文将向您介绍如何实现会话未读消息提醒功能。
获取所有会话未读消息总数
通常情况下,如果想得到所有会话的未读消息总数,可以遍历会话列表得到每个会话的信息 V2TimConversation
,然后再把所有的 V2TimConversation
的 unreadCount
相加起来,展示在 UI 上。
但 IM SDK 为您提供了直接查询所有会话未读消息总数的 API getTotalUnreadMessageCount
。
当会话的未读总数发生变更时,SDK 还会主动通过回调 onTotalUnreadMessageCountChanged
,将最新的未读总数通知给您。
说明:
获取所有会话未读消息总数Flutter SDK 3.0.0. 及以上版本支持。
具体的操作步骤如下文所示。
获取未读总数
您可以调用 getTotalUnreadMessageCount
获取所有会话的未读消息总数,获取成功后可以使用其更新 UI。
示例代码如下:
// 获取全部未读数
V2TimValueCallback<int> unread = await conversationManager.getTotalUnreadMessageCount();
未读总数变更通知
您可以调用 addConversationListener
添加会话监听器。添加监听器后,才能接收到未读总数变更通知。
您可以在 V2TIMConversationListener
中的 onTotalUnreadMessageCountChanged
中,获取变更后的未读总数。
示例代码如下:
conversationManager.addConversationListener(listener: V2TimConversationListener(onTotalUnreadMessageCountChanged: (totalUnreadCount) {
// 最新的未读数
},));
清空会话未读消息数
用户点击进入会话后退回到会话列表,需要清除未读消息数。清除后,会话列表的小红点或数字角标需要随之消失。 IM SDK 针对待清空会话未读数的不同会话类型,提供了 3 个 API:
- 清空单聊会话未读消息数
markC2CMessageAsRead
。 - 清空群聊会话未读消息数
markGroupMessageAsRead
。 - 清空全部会话未读消息数
markAllMessageAsRead
。
具体的操作步骤如下文所示。
说明:
清空会话未读消息数功能仅增强版 5.8.1668 及以上版本支持。
单聊
您可以调用 markC2CMessageAsRead
清空指定单聊会话的未读消息数。
示例代码如下:
TencentImSDKPlugin.v2TIMManager.getMessageManager().markC2CMessageAsRead(userID: "userID");
当 markC2CMessageAsRead
调用成功后:
- 如果调用者事先调用
addConversationListener
添加了会话监听器,会收到onConversationChanged
回调,可以在此回调中更新 UI。 - 对端会收到
onRecvC2CReadReceipt
回调,回调里面会携带清空会话未读数的时间戳。
示例代码如下:
// 自己
conversationManager.addConversationListener(listener: V2TimConversationListener(,onConversationChanged: (conversationList) {
// 变更后的最新会话
},));
// 对端
TencentImSDKPlugin.v2TIMManager.getMessageManager().addAdvancedMsgListener(listener: V2TimAdvancedMsgListener(onRecvC2CReadReceipt: (receiptList) {
// 消息被对方已读
},));
群聊
您可以调用 markGroupMessageAsRead
清空指定群聊会话的未读消息数。
示例代码如下:
TencentImSDKPlugin.v2TIMManager.getMessageManager().markGroupMessageAsRead(groupID: "groupID");
当 markGroupMessageAsRead
调用成功后,如果调用者事先调用 addConversationListener
添加了会话监听器,会收到 onConversationChanged
回调,可以在此回调中更新 UI。
示例代码如下:
conversationManager.addConversationListener(listener: V2TimConversationListener(,onConversationChanged: (conversationList) {
// 变更后的最新会话
},));
所有会话
您可以调用 markAllMessageAsRead
清空所有会话的未读消息数。
示例代码如下:
TencentImSDKPlugin.v2TIMManager.getMessageManager().markAllMessageAsRead();
当 markAllMessageAsRead
调用成功后,如果调用者事先调用 addConversationListener
添加了会话监听器,会收到 onConversationChanged
回调,可以在此回调中更新 UI。
示例代码如下:
conversationManager.addConversationListener(listener: V2TimConversationListener(,onConversationChanged: (conversationList) {
// 变更后的最新会话
},));
交流与反馈
欢迎加入 QQ 群进行技术交流和反馈问题,QQ 群:788910197。