跳到主要内容

处理会话未读消息数

即时通讯客户端常常需要对会话进行未读消息计数。

您可以使用 IMLib SDK 提供的接口直接获取会话中的未读消息数。具体能力如下:

  • 获取所有会话(不含聊天室)中的未读消息总数(getTotalUnreadCountWith
  • 获取指定会话中的总未读消息数,或指定会话中指定消息类型的总未读消息数,或按会话类型获取总未读消息总数(getUnreadCount

在用户使用您的 App 时,UI 上未读计数可能需要发生变化,此时您可以清除会话中的未读数(clearMessagesUnreadStatus)。

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

提示

从 5.3.0 版本 RCCoreClient 开始,建议使用下方异步返回结果的接口,原同步接口同时废弃。

您可以使用 getTotalUnreadCountWith 获取所有类型会话(不含聊天室)中未读消息的总数。获取成功后,会返回未读消息数(unreadcount)。

[[RCCoreClient sharedCoreClient] getTotalUnreadCountWith:^(int unreadCount) {

}];

获取指定会话的总未读消息数

提示

从 5.3.0 版本 RCCoreClient 开始,建议使用下方异步返回结果的接口,原同步接口同时废弃。

获取指定会话中的未读消息总数。获取成功后,会返回未读消息数(count)。不适用于聊天室、超级群。

[[RCCoreClient sharedCoreClient] getUnreadCount:ConversationType_PRIVATE
targetId:@"targetId"
completion:^(int count) {
}];
参数类型说明
conversationTypeRCConversationType会话类型。不适用于聊天室、超级群。
targetIdNSString会话 ID。
completionBlock异步回调。

获取指定会话中指定消息类型的总消息未读数

提示
  • 从 5.1.5 版本开始提供该功能;仅在 RCCoreClient 中提供。
  • 从 5.3.0 版本 RCCoreClient 开始,建议使用下方异步返回结果的接口,原同步接口同时废弃。

获取指定会话内指定的某一个或多个消息类型的未读数。

RCConversationIdentifier *iden = [[RCConversationIdentifier alloc] initWithConversationIdentifier:ConversationType_PRIVATE targetId:@"targetId"];
[[RCCoreClient sharedCoreClient] getUnreadCount:iden messageClassList:@[RCTextMessage.class, RCImageMessage.class] completion:^(int count){
//异步回调,返回该会话内的未读消息数
}];
参数类型说明
conversationIdentifierRCConversationIdentifier会话标识,需要指定会话类型(RCConversationType)和 Target ID。
messageClassListNSArray消息类型数组,例 @[RCTextMessage.class, RCImageMessage.class]
completionBlock异步回调。

按会话类型获取总未读消息数

提示

从 5.3.0 版本 RCCoreClient 开始,建议使用下方异步返回结果的接口,原同步接口同时废弃。

获取多个指定会话类型的未读数。获取成功后,会返回未读消息数(count)。

[[RCCoreClient sharedCoreClient] getUnreadCount:@[@(ConversationType_PRIVATE),@(ConversationType_GROUP)]
containBlocked:NO
completion:^(int count) {
}];
参数类型说明
conversationTypesNSArray会话类型的数组,需要将 RCConversationType 转为 NSNumber 构建 Array。不适用于聊天室、超级群。
isContainBOOL是否包含免打扰消息的未读数。
completionBlock异步回调。

按会话免打扰级别获取总未读消息数

提示

SDK 从 5.2.5 版本开始支持该接口。仅在 RCChannelClient 中提供。

获取已设置指定免打扰级别的会话的总未读消息数。SDK 将按照传入的免打扰级别配置查找会话,再返回这些所有会话的总未读消息数。

NSArray *conversationTypes = @[@(ConversationType_PRIVATE)];
NSArray * pushNotificationLevels = @[@(RCPushNotificationLevelMention)];
[[RCChannelClient sharedChannelManager] getUnreadCount:conversationTypes
levels: pushNotificationLevels
success:^(NSInteger unReadCount) {}
error:^(RCErrorCode status) {}
];

获取成功后,successBlock 中会返回未读消息数。

参数类型必填
conversationTypesRCConversationType []会话类型数组。不适用于聊天室。
levelsRCPushNotificationLevel[]免打扰类型数组。详见免打扰功能概述
successBlockBlock成功回调
errorBlockBlock失败回调

按会话免打扰级别获取总未读 @ 消息数

提示

SDK 从 5.2.5 版本开始支持该接口。仅在 RCChannelClient 中提供。

获取已设置指定免打扰级别的会话的总未读 @ 消息数。SDK 将按照传入的免打扰级别配置查找会话,再返回这些所有会话的总未读 @ 消息数。

NSArray *conversationTypes = @[@(ConversationType_GROUP)];
NSArray * pushNotificationLevels = @[@(RCPushNotificationLevelMention)];
[[RCChannelClient sharedChannelManager] getUnreadMentionedCount:conversationTypes
levels: pushNotificationLevels
success:^(NSInteger unReadCount) {}
error:^(RCErrorCode status) {}
];

获取成功后,successBlock 中会返回未读 @ 消息数。

参数类型必填
conversationTypesRCConversationType []会话类型数组。不适用于聊天室。
levelsRCPushNotificationLevel[]免打扰类型数组。详见免打扰功能概述
successBlockBlock成功回调
errorBlockBlock失败回调

清除指定会话未读数

按时间戳清除指定会话的未读数。SDK 会将该时间戳之前的消息的未读状态全部清除。

BOOL success = [[RCIMClient sharedRCIMClient] clearMessagesUnreadStatus:ConversationType_PRIVATE targetId:@"targetId" time:0];
参数类型说明
conversationTypeRCConversationType会话类型。不适用于聊天室、超级群。
targetIdNSString会话 ID
timestamplong long时间戳,此时间戳之前的未读状态都清除。