IM 即时通讯
Web
产品介绍
简介
主要功能
产品优势
海外数据中心
IM平滑迁移方案
接口及业务限制
功能介绍
帐号集成与登录
基础消息功能
群组功能
聊天室功能
聊天室标签功能
多端登录与互踢策略
质量数据监控台
体验 Demo
下载 SDK 与 Demo 源码
更新日志
IM UIKit 更新日志
NIM SDK 开发版更新日志
NIM SDK 稳定版更新日志
快速开始
跑通 IM Demo 源码
实现 IM 文本消息收发(不含 UI)
含 UI 集成
什么是 IM UIKit
IM UIKit 功能概览
快速集成 IM UIKit
非React框架集成 IM UIKit
组件导入
初始化
全局上下文
登录相关
实现消息收发及界面自定义
集成会话列表界面
集成会话消息界面
集成用户资料组件
集成通讯录界面
集成搜索组件
非 React 框架自定义渲染
主题样式设置
语言设置
初始化(兼容 NIM SDK)
不含 UI 集成
集成 SDK
浏览器环境集成
Node.js集成
初始化与登录相关
初始化与登录 IM
IM 连接相关
多端登录与互踢
消息相关
消息概述
消息收发
消息配置选项
广播消息收发
消息已读回执
消息撤回
消息重发与转发
本地消息
通知消息
群通知消息
超大群通知消息
历史消息
最近会话
用户资料托管
好友关系托管
用户关系托管
在线状态订阅
群组功能
群组概述
群组管理
群成员管理
群消息管理
超大群功能
系统通知
系统通知概述
内置系统通知管理
内置系统通知未读数
自定义系统通知收发
开通聊天室功能
聊天室
反垃圾(内容审核)
域名高可用
融合存储方案
扩展功能
工具方法
最佳实践
聊天室重要消息投递
API参考
SDK API (Web)
IM UIKit Store API
状态码
IM 控制台指南
创建应用
注册 IM 账号
升级服务
开通聊天室功能
配置应用客户端标识
常见问题
FAQ
服务协议

服务器未读数

更新时间: 2022/12/21 15:55:40

网易云信 QChat Web SDK 的QChatEventInterface接口内定义了serverUnreadInfo事件。该事件在用户发送或删除消息后触发,事件信息包含未读信息QChatServerUnreadInfo

本文以用户A 与其他用户在同一圈组服务器下的消息交互为例,介绍获取服务器未读数的实现方法。

API 调用时序示例

uml diagram

前提条件

  • 接入圈组,并已创建圈组服务器和频道。
  • 用户A 和其他用户,均已加入服务器。

实现流程

  1. 用户A 监听serverUnreadInfo事件。

    示例代码如下:

    // QChatServerUnreadInfo结构
    type QChatServerUnreadInfo = {
    /**
    * 服务器id
    */
    serverId: string
    /**
    * 未读数
    */
    unreadCount: number
    /**
    * 艾特消息未读数
    */
    mentionedCount: number
    /**
    * 最大未读数
    */
    maxCount?: number
    }
    // 初始化SDK
    const qchat = new QChat({...options})
    // 订阅服务器未读数事件
    qchat.on('serverUnreadInfo',(QChatServerUnreadInfo)=>{
        // 处理服务器未读逻辑
    })
    
  2. 根据服务器下的频道数量,按如下方法订阅服务器下所有频道的未读数,获取并缓存各频道的初始未读数。

    • 如果服务器下频道数量不超过 200,则用户A 可调用subscribeAllChannel方法一次性订阅服务器下所有的频道的未读数(入参type2)。需要注意的是,单次调用最多仅可传入 10 个服务器 ID。

    • 如果服务器下频道数量超过 200,则用户A 需调用subscribeChannel方法订阅服务器下所有的频道的未读数(入参type2)。需要注意的是,单次调用最多可订阅 100 个频道。

    • 通过subscribeAllChannel订阅频道,单次调用可传入的服务器 ID 数量上限为 10 个。即使多次调用,单个服务器下最多仅能订阅 200 个 频道。如果目标服务器下频道数量大于 200,需改用subscribeChannel方法订阅服务器下所有频道(单次调用最多可订阅 100 个频道)。
    • 获取服务器的精确未读数,必须订阅服务器下的所有频道的未读数。

    调用subscribeAllChannel方法的示例代码如下:

    // 初始化SDK
    const qchat = new QChat({...options})
    // 订阅服务器下所有的频道的未读数
    qchat.qchatServer.subscribeAllChannel({
        "type": 2,
        "serverIds": []
    })
    
  3. 其他用户发送或删除消息后,SDK 对服务器下所有已订阅频道的未读数进行累加计算。

    未读数累加规则如下:

    • 接到新消息,某个频道未读数 +1 时:
      • 累加未读数达到maxCount,则触发事件/回调,给出maxCount
      • 累加未读数没有达到maxCount,触发事件/回调,给出累加未读数。
    • 消息被删除,某个频道未读数 - 1 时:
      • 累加未读数达到maxCount,则触发 事件/回调,给出maxCount
      • 累加未读数没有达到maxCount,触发事件/回调,给出累加未读数。
  4. SDK 计算完累加未读数后触发serverUnreadInfo事件,返回所有已订阅频道的累加未读数QChatServerUnreadInfo给用户A。

    • SDK 对serverUnreadInfo事件触发做了节流处理,100ms 内默认最多只能触发一次。您接收到该事件后可以直接渲染视图。
    • 服务器累加未读数在达到未读数上限(maxCount)后,serverUnreadInfo事件仍会触发。
  5. 如需清空服务器未读数,可调用markRead方法进行清除。

    // 初始化SDK
    const qchat = new QChat({...options})
    // 清空服务器未读数
    qchat.qchatServer.markRead({
        "serverIds": []
    })
    

API参考

API
说明
subscribeAllChannel 一次性订阅服务器下最多 200 个频道,可按不同的订阅策略对频道相关事件和系统通知进行订阅。单次调用可传入的服务器 ID 数量上限为 10 个。即使多次调用,单个服务器下最多仅能订阅 200 个 频道。
subscribeChannel 订阅服务器下的频道,可按不同的订阅策略对频道相关事件和系统通知进行订阅。单次调用最多可订阅 100 个频道
markRead 清空服务器未读数,即将服务器下所有频道的消息未读数都清空
此文档是否对你有帮助?
有帮助
我要吐槽
  • API 调用时序示例
  • 前提条件
  • 实现流程
  • API参考