即时通信 IM Flutter(会话未读数)

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

相关产品
即时通信 IM 产品页,含版本规格、价格与购买入口。

一、功能描述

这篇会向你介绍如何实现会话未读消息提醒功能。

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

通常情况下,如果想得到所有会话的未读消息总数,可以遍历会话列表得到每个会话的信息 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) { // 最新的未读数 },));

五、清空会话未读消息数

用户点击进入会话后退回到会话列表,需要清除未读消息数。清除后,会话列表的小红点或数字角标需要随之消失。

你可以调用 cleanConversationUnreadMessageCount(点击查看详情) 来清理指定会话未读消息数,通过传入特定格式的参数可以分别完成对指定单聊会话、全部单聊会话、指定群聊会话、全部群聊会话以及全部会话未读消息数的清理,具体的操作步骤如下文所示。

注意:说明:

注意:清空会话未读消息数功能 8.0 及以上版本支持。

参数说明:

参数 含义 单聊有效 群聊有效 说明
conversationID 会话唯一 ID YES YES C2C 单聊组成方式为: "c2c_userID";群聊组成方式为: "group_groupID"
cleanTimestamp 清理时间戳 YES NO 指定清理哪一个 timestamp 之前的未读消息计数;当传入为 0 时,对应会话所有的未读消息将被清理,会话的未读数会清 0。
cleanSequence 清理 sequence NO YES 指定清理哪一个 sequence 之前的未读消息计数;当传入为 0 时,对应会话所有的未读消息将被清理,会话的未读数会清 0。

注意:说明:

六、清理指定单聊会话的未读数

你可以通过传入带有 "c2c_" 前缀的 conversationID 来清理指定单聊会话未读消息数,同时还可以通过传入 cleanTimestamp 来清理指定时间戳及其之前的未读消息数。如果传入的 cleanTimestamp 为 0,则将指定单聊会话的未读数清 0。

示例代码如下:

TencentImSDKPlugin.v2TIMManager.getConversationManager().cleanConversationUnreadMessageCount( conversationID: "c2c_userID", cleanTimestamp: 0, cleanSequence: 0,);

当 cleanConversationUnreadMessageCount 调用成功后:

1. 如果调用者事先调用 addConversationListener 添加了会话监听器,会收到 onConversationChanged 回调,可以在此回调中更新 UI。

2. 对端会收到 onRecvC2CReadReceipt 回调,回调里面会携带清空会话未读数的时间戳。

示例代码如下:

// 自己conversationManager.addConversationListener(listener: V2TimConversationListener(,onConversationChanged: (conversationList) { // 变更后的最新会话 },));// 对端TencentImSDKPlugin.v2TIMManager.getMessageManager().addAdvancedMsgListener(listener: V2TimAdvancedMsgListener(onRecvC2CReadReceipt: (receiptList) { // 消息被对方已读 },));

七、清空所有单聊会话的未读数

你可以传入 "c2c" 作为 conversationID,表示将所有单聊会话的未读数全部清 0,请注意此时 cleanTimestamp 将不再生效。

示例代码如下:

TencentImSDKPlugin.v2TIMManager.getConversationManager().cleanConversationUnreadMessageCount( conversationID: "c2c", cleanTimestamp: 0, cleanSequence: 0,);

当本端调用 cleanConversationUnreadMessageCount 成功后,如果调用者事先调用 addConversationListener 添加了会话监听器,会收到 onConversationChanged 回调,该回调中携带了对应会话的最新未读消息数,可以在此回调中更新 UI。

示例代码如下:

conversationManager.addConversationListener(listener: V2TimConversationListener(,onConversationChanged: (conversationList) { // 变更后的最新会话 },));

八、清理指定群聊会话的未读数

你可以通过传入带有 "group_" 前缀的 conversationID 来清理指定群聊会话未读消息数,同时还可以通过传入 cleanSequence 来清理指定 sequence 及其之前的未读消息数。如果传入的 cleanSequence 为 0,则将指定群聊会话的未读数清 0。

示例代码如下:

TencentImSDKPlugin.v2TIMManager.getConversationManager().cleanConversationUnreadMessageCount( conversationID: "group_groupID", cleanTimestamp: 0, cleanSequence: 0,);

当 cleanConversationUnreadMessageCount 调用成功后,如果调用者事先调用 addConversationListener 添加了会话监听器,会收到 onConversationChanged 回调,可以在此回调中更新 UI。

示例代码如下:

conversationManager.addConversationListener(listener: V2TimConversationListener(,onConversationChanged: (conversationList) { // 变更后的最新会话 },));

九、清空所有群聊会话的未读数

你可以传入 "group" 作为 conversationID,表示将所有群聊会话的未读数全部清 0,请注意此时 cleanSequence 将不再生效。

TencentImSDKPlugin.v2TIMManager.getConversationManager().cleanConversationUnreadMessageCount( conversationID: "group", cleanTimestamp: 0, cleanSequence: 0,);

当 cleanConversationUnreadMessageCount 调用成功后,如果调用者事先调用 addConversationListener 添加了会话监听器,会收到 onConversationChanged 回调,该回调中携带了对应会话的最新未读消息数,可以在此回调中更新 UI。

示例代码如下:

conversationManager.addConversationListener(listener: V2TimConversationListener(,onConversationChanged: (conversationList) { // 变更后的最新会话 },));

十、清空所有会话的未读数

你可以传入空字符串 "" 作为 conversationID,表示将所有会话的未读消息数全部清 0,请注意此时 cleanTimestamp 和 cleanSequence 都不再生效。

示例代码如下:

TencentImSDKPlugin.v2TIMManager.getConversationManager().cleanConversationUnreadMessageCount( conversationID: "", cleanTimestamp: 0, cleanSequence: 0,);

当 cleanConversationUnreadMessageCount 调用成功后,如果调用者事先调用 addConversationListener 添加了会话监听器,会收到 onConversationChanged 回调,该回调中携带了对应会话的最新未读消息数,可以在此回调中更新 UI。

示例代码如下:

conversationManager.addConversationListener(listener: V2TimConversationListener(,onConversationChanged: (conversationList) { // 变更后的最新会话 },));

赞 (0)
上一篇 4天前
下一篇 4天前