按类型聚合会话
IMKit SDK 自 25.12.0 版本开始支持在会话列表中按照会话类型进行聚合(折叠)。设置聚合显示后,该类型的会话在会话列表中仅被展示为一个聚合条目。默认情况下,会话列表页面会以平铺方式展示所有本地会话。
下图展示了设置了单聊类型会话聚合显示的效果。在会话列表中,所有单聊会话折叠为单聊消息(左侧),点击后跳转到聚合会话列表(右侧)。
IMKit SDK 在默认的聚合会话页面 SubConversationListPage 中包含了标题栏的实现。如果基于组件 SubConversationListComponent 构建聚合会话列表页面,请自行实现标题栏。


局限
- 会话列表中的聚合会话项目不支持置顶、删除等操作。
- 仅支持按照会话类型聚合,不支持根据会话 Id 进行聚合。
设置聚合显示的会话类型
聚合会话功能目前支持单聊、群聊和系统会话类型的聚合折叠。
在会话列表组件中,创建 DataProcessor 类型的数据处理器,实现 isGathered 方法。当需要聚合显示时(如:会话类型为单聊、群聊或系统会话时),返回 true。并将其作为 dataProcessor 属性传递给 ConversationListComponent 组件。
下方示例展示了如何让所有单聊(Private)会话类型被聚合显示。
import { ConversationListComponent } from '@rongcloud/imkit'
import { ConversationType } from '@rongcloud/imlib'
ConversationListComponent({
dataProcessor: {
isGathered: (conversationIdentifier) => {
return conversationIdentifier.conversationType === ConversationType.Private
}
},
onConversationItemClick: (conversation, index, uiConversation) => {
// 默认会跳转到内部的子会话列表页面
if (uiConversation instanceof GatherUiConversation) {
// 自定义聚合会话跳转
return true
}
return false
}
})
聚合会话列表页面
设置会话聚合后,在会话列表页面中,所有被聚合的会话会以一个聚合会话条目(GatheredConversation)的形式展示。例如,多个单聊会话将被折叠显示为"单聊消息"这一条。用户点击该聚合会话条目后,SDK 默认会自动跳转至聚合会话列表页面,展示该类所有会话的子列表页面。
IMKit 默认内置了聚合会话列表页面和聚合会话列表组件两种方式:
- 聚合会话列表页面:SDK 内置的标准跳转目标,点击聚合条目时会自动跳转到该页面。
- 聚合会话列表组件:如需自定义聚合会话列表页面,可通过组件
SubConversationListComponent实现,并在会话列表中拦截聚合条目的点击事件,自行处理跳转逻辑 ,跳转到自定义页面。
定制化
设置会话按类型聚合后,会话列表页面会展示对应的聚合会话(GatheredConversation)条目。您可以通过添加资源的方式为聚合会话设置头像与昵称(标题)。
聚合会话标题资源
| 聚合会话类型 | 会话标题 | 资源名称 |
|---|---|---|
| 单聊 | "单聊消息" | app.string.rc_gathered_conversation_private_title |
| 群聊 | "群聊消息" | app.string.rc_gathered_conversation_group_title |
| 系统 | "系统消息" | app.string.rc_gathered_conversation_system_title |
聚合会话头像资源
| 聚合会话类型 | 资源名称 |
|---|---|
| 单聊 | app.media.rc_portrait_gathered_person_default |
| 群聊 | app.media.rc_portrait_gathered_group_default |
| 系统 | app.media.rc_portrait_gathered_system_default |