跳到主要内容

按类型聚合会话

IMKit SDK 自 25.12.0 版本开始支持在会话列表中按照会话类型进行聚合(折叠)。设置聚合显示后,该类型的会话在会话列表中仅被展示为一个聚合条目。默认情况下,会话列表页面会以平铺方式展示所有本地会话。

下图展示了设置了单聊类型会话聚合显示的效果。在会话列表中,所有单聊会话折叠为单聊消息(左侧),点击后跳转到聚合会话列表(右侧)。

提示

IMKit SDK 在默认的聚合会话页面 SubConversationListPage 中包含了标题栏的实现。如果基于组件 SubConversationListComponent 构建聚合会话列表页面,请自行实现标题栏。

局限

  • 会话列表中的聚合会话项目不支持置顶、删除等操作。
  • 仅支持按照会话类型聚合,不支持根据会话 Id 进行聚合。

设置聚合显示的会话类型

聚合会话功能目前支持单聊、群聊和系统会话类型的聚合折叠。

在会话列表组件中,创建 DataProcessor 类型的数据处理器,实现 isGathered 方法。当需要聚合显示时(如:会话类型为单聊、群聊或系统会话时),返回 true。并将其作为 dataProcessor 属性传递给 ConversationListComponent 组件。

下方示例展示了如何让所有单聊(Private)会话类型被聚合显示。

TypeScript
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