跳到主要内容

版本:2.X

会话未读数

获取所有会话未读数

会话未读数指某一个会话中未读消息的数量

危险
  1. 清除浏览器缓存会导致会话未读数不准确
  2. 会话未读数为本地操作,换端登录会话未读数不会同步
  3. 会话消息未读数存储在 WebStorage 中, 若浏览器不支持或禁用 WebStorage,未读消息数将不会保存,浏览器页面刷新未读消息数将不会存在

API 参考:getTotalUnreadCount

参数说明

参数类型必填说明最低版本
callbackObject回调对象2.2.0
callback.onSuccessFunction成功回调2.2.0
callback.onErrorFunction失败回调2.2.0
conversationTypesArray会话类型2.9.5
includeMutedBoolean是否包含免打扰会话,默认为:false2.9.5

代码示例

var conversationTypes = [RongIMLib.ConversationType.PRIVATE];
var callback = {
onSuccess: function(count) {
console.log('获取所有会话未读消息数成功', count);
},
onError: function(error) {
console.log('获取所有会话未读消息数失败', error);
}
};
RongIMClient.getInstance().getTotalUnreadCount(callback, conversationTypes);

获取单个会话未读数

方式一:调用 getUnreadCount 方法来获取会话未读数。
方式二:通过 conversation.unreadMessageCount 获取。

API 参考:getUnreadCount

参数说明

参数类型必填说明最低版本
conversationTypeNumber会话类型,单聊会话传入 RongIMLib.ConversationType.PRIVATE2.2.0
targetIdString单聊会话 ID2.2.0
callbackObject回调对象2.2.0
callback.onSuccessFunction成功回调2.2.0
callback.onErrorFunction失败回调2.2.0

代码示例

var conversationType = RongIMLib.ConversationType.PRIVATE;
var targetId = '单聊会话 ID';
var callback = {
onSuccess: function(count) {
console.log('获取指定会话未读消息数成功', count);
},
onError: function(error) {
console.log('获取指定会话未读消息数失败', error);
}
};
RongIMLib.RongIMClient.getInstance().getUnreadCount(conversationType, targetId, callback);

按会话类型获取未读数

API 参考:getConversationUnreadCount

参数说明

参数类型必填说明最低版本废弃版本
conversationTypesArray会话类型,单聊会话传入 RongIMLib.ConversationType.PRIVATE2.2.02.6.0
callbackObject回调对象2.2.02.6.0
callback.onSuccessFunction成功回调2.2.02.6.0
callback.onErrorFunction失败回调2.2.02.6.0

代码示例

var conversationTypes = [RongIMLib.ConversationType.PRIVATE];
var callback = {
onSuccess: function(count) {
console.log('获取指定会话类型总未读消息数成功', count);
},
onError: function(error) {
console.log('获取指定会话类型总未读消息数失败', error);
}
};
RongIMClient.getInstance().getConversationUnreadCount(conversationTypes, callback);

清除单个会话未读数

API 参考:clearUnreadCount

参数说明

参数类型必填说明最低版本
conversationTypeNumber会话类型,单聊会话传入 RongIMLib.ConversationType.PRIVATE2.2.0
targetIdString单聊会话 ID2.2.0
callbackObject回调对象2.2.0
callback.onSuccessFunction成功回调2.2.0
callback.onErrorFunction失败回调2.2.0

代码示例

var conversationType = RongIMLib.ConversationType.PRIVATE;
var targetId = '单聊会话 ID';
var callback = {
onSuccess: function() {
console.log('清除指定会话未读消息数成功');
},
onError: function(error) {
console.log('清除指定会话未读消息数失败', error);
}
};
RongIMClient.getInstance().clearUnreadCount(conversationType, targetId, callback);

清除全部会话未读数

最低版本:2.10.4

RongIMClient.getInstance().clearAllUnreadCount()

多端同步未读数

未读消息存在 localStorage 中,未读消息数是针对当前端的未读消息数,服务器不存未读消息数量。

实现方案

本端清除会话未读数后,通过在会话中发送一条同步消息,通知其他端。其他端收取到会话中的同步消息后,调用相应方法清除本地会话未读消息数。

  1. 本端阅读会话中的消息后,调用 clearUnreadCount() 清除会话未读消息数。
  2. 清除成功后,在会话中发送 SyncReadStatusMessage 类型消息,同步阅读状态。
  3. 其他端接收到 SyncReadStatusMessage 类型消息后,调用 clearUnreadCount() 方法,清除本地的会话未读数。(在 v2.10.4 版本之后收到该消息时 sdk 内部会清理未读数,无需用户主动调用)

代码示例

清除端

// 清除未读数
var im = RongIMClient.getInstance();
var conversationType = RongIMLib.ConversationType.PRIVATE;
var targetId = '接收方的 userId';
im.clearUnreadCount(conversationType, targetId, {
onSuccess: function () {
// 从消息里获取服务器端时间,以最近一条已读 message 为准
var msg = {
lastMessageSendTime: message.sentTime
};
msg = new RongIMLib.SyncReadStatusMessage(msg);
RongIMClient.getInstance().sendMessage(conversationType, targetId, msg, {
onSuccess: function () {
console.log('发送同步消息成功', message);
},
onError: function () {}
});
},
onError: function (errorCode) {}
});

同步端

// 其他端在消息监听中接收到同步消息后,调用清除未读数做更新处理
// 收到同步消息进行未读数清除操作 调用 clearUnreadCount() 成功后不需要再在发送 SyncReadStatusMessage 类型消息。
var clearUnreadCount = RongIMClient.getInstance().clearUnreadCount;
var conversationType = RongIMLib.ConversationType.PRIVATE;
var targetId = '接收方的 userId';
clearUnreadCount(conversationType, targetId, {
onSuccess: function () {},
onError: function (errorCode) {}
});