服务器未读数管理
更新时间: 2024/03/14 19:21:11
网易云信 QChat Web SDK 的QChatEventInterface
接口内定义了serverUnreadInfo
事件。该事件在用户发送或删除消息后触发,事件信息包含未读信息QChatServerUnreadInfo
。
本文以用户A 与其他用户在同一圈组服务器下的消息交互为例,介绍获取服务器未读数的实现方法。
游客接收到的消息无已读未读逻辑。不支持对游客展示消息的未读数。
前提条件
- 已登录圈组,并已创建圈组服务器和频道。
- 用户 A 和其他用户,均已加入服务器。
使用限制
服务器未读数管理存在如下与未读数相关的限制:
- 所有未读消息(包括@消息)的消息阈值默认为 99 条。
- @消息的未读数的有效期,默认为 7 天,即默认存储 7 天。
若需要扩展上限,可在控制台配置圈组子功能项(未读的@消息数-周期 和 所有未读消息(包括@)的消息计数-阈值),具体请参考开通和配置圈组功能。
实现流程
流程概览
以下时序图可能因为网络问题显示异常。如显示异常,一般刷新当前页面即可正常显示。
流程说明
以下仅对上图中标为橙色的流程进行详细说明。
-
用户A 监听
serverUnreadInfo
事件。示例代码如下:
js
// QChatServerUnreadInfo结构 type QChatServerUnreadInfo = { /** * 服务器id */ serverId: string /** * 未读数 */ unreadCount: number /** * 艾特消息未读数 */ mentionedCount: number /** * 最大未读数 */ maxCount?: number } // 初始化SDK const qchat = new QChat({...options}) // 订阅服务器未读数事件 qchat.on('serverUnreadInfo',(QChatServerUnreadInfo)=>{ // 处理服务器未读逻辑 })
-
根据服务器下的频道数量,按如下方法订阅服务器下所有频道的未读数,获取并缓存各频道的初始未读数。
-
如果服务器下频道数量不超过 200,则用户A 可调用
subscribeAllChannel
方法一次性订阅服务器下所有的频道的未读数(入参type
传2
)。需要注意的是,单次调用最多仅可传入 10 个服务器 ID。 -
如果服务器下频道数量超过 200,则用户A 需调用
subscribeChannel
方法订阅服务器下所有的频道的未读数(入参type
传2
)。需要注意的是,单次调用最多可订阅 100 个频道。
- 通过
subscribeAllChannel
订阅频道,单次调用可传入的服务器 ID 数量上限为 10 个。即使多次调用,单个服务器下最多仅能订阅 200 个 频道。如果目标服务器下频道数量大于 200,需改用subscribeChannel
方法订阅服务器下所有频道(单次调用最多可订阅 100 个频道)。 - 获取服务器的精确未读数,必须订阅服务器下的所有频道的未读数。
调用
subscribeAllChannel
方法的示例代码如下:js
// 初始化SDK const qchat = new QChat({...options}) // 订阅服务器下所有的频道的未读数 qchat.qchatServer.subscribeAllChannel({ "type": 2, "serverIds": [] })
-
-
其他用户发送或删除消息后,SDK 对服务器下所有已订阅频道的未读数进行累加计算。
未读数累加规则如下:
- 接到新消息,某个频道未读数 +1 时:
- 累加未读数达到
maxCount
,则触发事件/回调,给出maxCount
。 - 累加未读数没有达到
maxCount
,触发事件/回调,给出累加未读数。
- 累加未读数达到
- 消息被删除,某个频道未读数 - 1 时:
- 累加未读数达到
maxCount
,则触发 事件/回调,给出maxCount
。 - 累加未读数没有达到
maxCount
,触发事件/回调,给出累加未读数。
- 累加未读数达到
- 接到新消息,某个频道未读数 +1 时:
-
SDK 计算完累加未读数后触发
serverUnreadInfo
事件,返回所有已订阅频道的累加未读数QChatServerUnreadInfo
给用户A。- SDK 对
serverUnreadInfo
事件触发做了节流处理,100ms 内默认最多只能触发一次。您接收到该事件后可以直接渲染视图。 - 服务器累加未读数在达到未读数上限(
maxCount
)后,serverUnreadInfo
事件仍会触发。
- SDK 对
-
如需清空服务器未读数,可调用
markRead
方法进行清除。js
// 初始化SDK const qchat = new QChat({...options}) // 清空服务器未读数 qchat.qchatServer.markRead({ "serverIds": [] })
API参考
API |
说明 |
---|---|
subscribeAllChannel |
一次性订阅服务器下最多 200 个频道,可按不同的订阅策略对频道相关事件和系统通知进行订阅。单次调用可传入的服务器 ID 数量上限为 10 个。即使多次调用,单个服务器下最多仅能订阅 200 个 频道。 |
subscribeChannel |
订阅服务器下的频道,可按不同的订阅策略对频道相关事件和系统通知进行订阅。单次调用最多可订阅 100 个频道 |
markRead |
清空服务器未读数,即将服务器下所有频道的消息未读数都清空 |