tencent cloud

文档反馈

React Native

最后更新时间:2024-02-06 17:26:08

    功能描述

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

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

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

    获取未读总数

    您可以调用 getTotalUnreadMessageCount(Details) 获取所有会话的未读消息总数,获取成功后可以使用其更新 UI。
    示例代码如下:
    // 获取全部未读数
    const unread = await conversationManager.getTotalUnreadMessageCount();

    未读总数变更通知

    您可以调用 addConversationListener(Details) 添加会话监听器。添加监听器后,才能接收到未读总数变更通知。
    您可以在 V2TIMConversationListener 中的 onTotalUnreadMessageCountChanged(Details) 中,获取变更后的未读总数。
    示例代码如下:
    conversationManager.addConversationListener({
    onTotalUnreadMessageCountChanged: (totalUnreadCount) => {
    // 最新的未读数
    },
    });

    清空会话未读消息数

    用户点击进入会话后退回到会话列表,需要清除未读消息数。清除后,会话列表的小红点或数字角标需要随之消失。 IM SDK 针对待清空会话未读数的不同会话类型,提供了 3 个 API:
    清空单聊会话未读消息数 markC2CMessageAsRead
    清空群聊会话未读消息数 markGroupMessageAsRead
    清空全部会话未读消息数 markAllMessageAsRead
    具体的操作步骤如下文所示。
    说明:
    清空会话未读消息数功能仅增强版 5.8.1668 及以上版本支持。

    单聊

    您可以调用 markC2CMessageAsRead(Details) 清空指定单聊会话的未读消息数。
    示例代码如下:
    TencentImSDKPlugin.v2TIMManager
    .getMessageManager()
    .markC2CMessageAsRead("userID");
    markC2CMessageAsRead 调用成功后:
    1. 如果调用者事先调用 addConversationListener 添加了会话监听器,会收到 onConversationChanged 回调,可以在此回调中更新 UI。
    2. 对端会收到 onRecvC2CReadReceipt 回调,回调里面会携带清空会话未读数的时间戳。
    示例代码如下:
    // 自己
    conversationManager.addConversationListener({
    onConversationChanged: (conversationList) => {
    // 变更后的最新会话
    },
    });
    
    // 对端
    TencentImSDKPlugin.v2TIMManager.getMessageManager().addAdvancedMsgListener({
    onRecvC2CReadReceipt: (receiptList) => {
    // 消息被对方已读
    },
    });

    群聊

    您可以调用 markGroupMessageAsRead(Details) 清空指定群聊会话的未读消息数。
    示例代码如下:
    TencentImSDKPlugin.v2TIMManager
    .getMessageManager()
    .markGroupMessageAsRead("groupID");
    markGroupMessageAsRead 调用成功后,如果调用者事先调用 addConversationListener 添加了会话监听器,会收到 onConversationChanged 回调,可以在此回调中更新 UI。
    示例代码如下:
    conversationManager.addConversationListener({
    onConversationChanged: (conversationList) => {
    // 变更后的最新会话
    },
    });

    所有会话

    您可以调用 markAllMessageAsRead(Details) 清空所有会话的未读消息数。
    示例代码如下:
    TencentImSDKPlugin.v2TIMManager.getMessageManager().markAllMessageAsRead();
    markAllMessageAsRead 调用成功后,如果调用者事先调用 addConversationListener 添加了会话监听器,会收到 onConversationChanged 回调,可以在此回调中更新 UI。
    示例代码如下:
    conversationManager.addConversationListener({
    onConversationChanged: (conversationList) => {
    // 变更后的最新会话
    },
    });
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持