获取会话列表
功能简介
会话
,通常是在用户发送“单聊/群组”消息时,ZIM SDK 会自动建立的逻辑关系。仅以下消息类型可用于建立会话:
消息类型 | 可创建会话类型 |
---|---|
文本消息 |
|
富媒体消息(图片、音频、视频、文件) | |
组合消息 | |
合并消息 | |
自定义消息 | |
Tips 消息 | 您需要先联系 ZEGO 技术支持开通群组管理类的 Tips 消息特性。随后,当用户创建群组时,ZIM SDK 会将此操作转换为一条群组会话内的特殊类型消息(Tips 消息),由此,群组会话成功创建。 |
用户登录后,ZIM SDK 会自动从服务端同步其最新会话列表。当会话列表发生变更时,SDK 会通过回调通知用户。同时,用户也可主动从本地数据库拉取会话列表;开发者亦可通过服务端接口获取指定用户的全量会话数据。
开发者可在社交聊天、游戏社区、在线咨询等场景中获取并展示单聊、群组会话列表。

监听会话列表同步状态变更
在用户登录前,请调用 ZIMEventHandler 接口并监听 onConversationSyncStateChanged 回调,以便获知其从 ZIM 服务端同步最新会话列表的状态。
仅限登录成功后或重连后会接收到此回调。
枚举 | 枚举值 | 事件 | 建议操作 |
---|---|---|---|
Started | 0 | 会话列表同步开始。 | 业务层可以通过本事件在 UI 上开始展示"拉取中"。建议在会话列表同步期间不要查询会话列表,等待会话列表拉取完成后再进行查询。 |
finished | 1 | 会话列表同步完成。 | 业务层可以通过本事件在 UI 上取消展示"拉取中"。此时可以开始查询会话列表。 |
failed | 2 | 会话列表同步失败。 | 业务层可以通过本事件在 UI 上取消展示"拉取中"。 |
ZIMEventHandler.onConversationSyncStateChanged = (ZIM zim, ZIMConversationSyncStatestate) {
if (state == started) {
// 开始从服务端同步会话列表,UI 可以展示“拉取中”
} else if (state == finished) {
// 从服务端同步会话列表完成,UI 可以取消展示“拉取中”
} else if (state == failed) {
// 从服务端同步会话列表失败,UI 可以取消展示“拉取中”,并记录失败上传日志等
}
};
监听会话变更
在用户登录之前,请调用 ZIMEventHandler 接口,监听 onConversationChanged 回调,将会在如下情形时收到会话变更通知:
类别 | 事件 | 对应 Event | 对应 ZIMConnversation 属性 |
---|---|---|---|
会话内基础属性 | 会话名称变更。 | Updated | conversationName |
会话头像 URL 变更。 | conversationAvatarUrl | ||
| conversationAlias | ||
会话未读数变更,包含因用户删除了未读消息导致的变更。 | unreadMessageCount | ||
会话内额外属性 | 用户设置/取消置顶会话。 | isPinned | |
用户对会话设置通知状态。 | notificationStatus | ||
用户保存会话草稿。 | draft | ||
用户在会话中被提醒。若用户删除了 @ 自己的消息,也会接收到此事件通知。 | mentionedInfoList | ||
会话最后一条消息变更 | 用户收到新消息。 | lastMessage | |
用户发送新消息。 | |||
最后一条消息的状态、内容变更,或被用户删除。 | |||
会话状态变更 | 用户有新会话。 | Added | - |
用户主动离开/被踢出群组会话。 说明 前提是群组会话已存在(即会话内有消息)。 | Disabled | - | |
群组会话被解散。 说明 前提是群组会话已存在(即会话内有消息)。 | |||
发送单聊消息时对端用户不存在。 | |||
在未加入某群组时,用户向该群组发送消息。 | |||
在多端登录场景下,当用户在某一设备上删除会话后,其他设备会立即收到该会话事件的通知。 | Deleted | - |
此时开发者可根据需求 获取会话列表。
onConversationChanged 回调接口,目前仅通知“存放于用户本地数据库和 ZIM 服务端的会话列表增量变化情况”。
开发者需要通过维护从 queryConversationList 接口中获取到的会话列表数组,根据当前会话更新情况,进行相应的属性更改、插入、和排序展示。
ZIMEventHandler.onConversationChanged = (zim, conversationChangeInfoList) {
};
获取会话列表
ZIM 支持用户从本地数据库获取会话列表,也支持向 ZIM 服务端发起请求获取指定用户的全量会话列表。
拉取到会话列表后,开发者可以用于自定义会话列表的 UI 展示。
从本地数据库获取
- ZIM SDK 当前仅支持拉取“单聊”和“群组”会话列表,暂不支持拉取“房间”会话列表。
- 会话列表存于本地数据库,拉取会话列表时,会从本地数据库中获取相关数据。
- 建议开发者在首屏会话页里使用本功能。
用户登录后,如果想要查询自己参与过的会话记录,可以调用 queryConversationList 接口,拉取会话数据列表。
由于本地会话可能数量较多,拉取会话时,开发者可以通过 ZIMConversationQueryConfig 对象,设置自定义分页拉取会话的数量,避免引起一次性拉取过多的会话导致耗时较久、会话界面加载较慢等问题。
ZIMConversationQueryConfig conversationQueryConfig =
ZIMConversationQueryConfig();
conversationQueryConfig.nextConversation = null;
// 会话一次分页查询数
conversationQueryConfig.count = 20;
//拉取会话列表
ZIM
.getInstance()
!.queryConversationList(conversationQueryConfig)
.then((value) => {
// 开发者需要保存和维护数组内的会话对象
})
.catchError((onError) {});
从 ZIM 服务端获取
开发者可以通过调用服务端 API 获取用户的会话列表,详情请参考服务端 API 文档 查询会话列表。