消息未读数
未读消息计数是 IMKit 默认提供的一项功能,可告知用户每个会话中未读消息的数量。未读消息计数显示在会话列表 ConversationListFragment
的会话条目上。每个会话的未读消息数显示在会话图标右上角。如果未读消息数超过 100 条,则会显示为 99+
。
为了使用未读消 息计数功能,您必须首先构建会话列表页面。IMKit 默认未实现底部导航栏。
在版本 5.10.0
之前,会有未读消息数不准确的情况,建议使用 5.10.0
或更高版本。
用法
IMKit SDK 默认已经实现了一整套会话未读消息数获取和展示逻辑,使用默认会话列表和会话页面时,不需要额外调用会话相关 API。
IMKit 会在用户进入单聊、群聊、系统会话页面时将会话未读数清零。在用户多端登录时,IMKit 会在设备间同步会话的阅读状态,您也可以按业务需求选择关闭该功能,详见下文多端同步阅读状态。
定制化
如果 IMKit 已有实现无法满足您的需求,可以使用 IMKit 或 IMLib SDK 中相关 API。
获取会话未读数
IMKit 未直接提供获取会话未读数的 API。如果您有类似以下自定义需求,可以调用 IMLib SDK 相关方法。
- 获取所有会话未读数(IMLib 方法)
- 获取指定会话未读数(IMLib 方法)
- 按会话类型获取未读数(IMLib 方法)
具体的核 心类、API 与 使用方法,详见 IMLib 文档 处理会话未读消息数。
IMLib 方法并不提供页面刷新能力,您需要根据业务需求自定义通知机制进行页面刷新。
清除会话未读数
使用 IMCenter
的 clearMessagesUnreadStatus()
方法清除指定会话的全部未读数,该方法接受一个会话类型枚举值和一个会话 ID。IMKit 会自动刷新会话列表页面的未读展示。
支持的会话类型:
- 单聊(
ConversationType.PRIVATE
) - 群聊(
ConversationType.GROUP
) - 系统(
ConversationType.SYSTEM
)
ConversationType conversationType = ConversationType.PRIVATE;
String targetId = " 会话 Id ";
IMCenter.getInstance().clearMessagesUnreadStatus(conversationType, targetId, new ResultCallback<Boolean>() {
@Override
public void onSuccess() {
}
@Override
public void onError(RongIMClient.ErrorCode errorCode) {
}
});
- IMKit 未提供根据时间戳清除未读数的方法,您可以调用 IMLib SDK 提供的方法(
RongIMClient
或 RongCoreClient 的clearMessagesUnreadStatus
方法)。IMLib 方法并不提供页面刷新能力,您需要根据业务需求自定义通知机制进行页面刷新。
监听会话未读数变化
IMKit 提供了未读数变化监听机制。您可以设置监听器,监听指定一个或多个会话类型的会话未读数变化事件。
版本 5.6.7 及更早版本
使用 UnReadMessageManager
的 addObserver
方法设置 IUnReadMessageObserver
,传入需要监听的会话类型数组。一旦监听的会话类型的会话未读数发生变化,SDK 会触发 onCountChanged
方法,将总未读消息数通过此监听器回调给应用。
UnReadMessageManager.getInstance().addObserver(conversationTypes,observer);
不需要监听时可以注销已注册的未读消息数变化监听器。
UnReadMessageManager.getInstance().removeObserver(observer);