浏览 SDKs · uni-app / uni-app x
平台
SDKsuni-app / uni-app x

标记会话已读

将指定会话中当前已接收的消息标记为已读。

复制

用户进入聊天页面并阅读当前可见消息后,将该会话中已接收的消息标记为已读。避免在仅预览系统通知或应用处于后台时提前触发标记已读。

import { markConversationMessageAsRead } from '@/uni_modules/unix-openim-sdk'

await markConversationMessageAsRead(conversationID)

Promise 成功表示已读请求已完成。客户端可先将本地会话未读数清零,随后通过会话变更事件按 conversationID 确认最新未读状态;完整会话事件监听见获取会话列表。

接收单聊消息已读回执

当前用户标记单聊会话已读后,对方设备将触发单聊已读回执事件。本操作集中监听该事件,回调参数接收 OpenIMMessageReceiptListResult | null,回执数组位于 receipts。

import {
  OpenIMMessageReceiptListResult,
  off,
  onRecvC2CReadReceipt,
} from '@/uni_modules/unix-openim-sdk'

const handleC2CReadReceipts = (
  result: OpenIMMessageReceiptListResult | null,
) => {
  if (result == null) return

  result.receipts.forEach((receipt) => {
    mergeC2CReadReceipt(
      receipt.userID,
      receipt.msgIDList,
      receipt.readTime,
    )
  })
}

const c2cReadReceiptSubscription = onRecvC2CReadReceipt(
  handleC2CReadReceipts,
)

function removeC2CReadReceiptListener() {
  off(c2cReadReceiptSubscription)
}

userID 标识单聊对端,msgIDList 是已读消息的 clientMsgID 列表,readTime 是 Unix 毫秒时间戳。退出登录、切换账号或销毁消息状态层时应调用清理函数取消事件监听。

群聊中调用本方法只清理当前账号的会话未读数;群成员级别的消息已读状态参见上报群消息已读与查询群消息已读成员。