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

监听会话变更
在用户登录之前,请调用 setEventHandler 接口,监听 conversationChanged 回调,将会在如下情形时收到会话变更通知:
类别 | 事件 | 对应 Event | 对应 ZIMConnversation 属性 |
---|---|---|---|
会话内基础属性 | 会话名称变更。 | Updated | conversationName |
会话头像 URL 变更。 | conversationAvatarUrl | ||
| conversationAlias | ||
会话未读数变更,包含因用户删除了未读消息导致的变更。 | unreadMessageCount | ||
会话内额外属性 | 用户设置/取消置顶会话。 | isPinned | |
用户对会话设置通知状态。 | notificationStatus | ||
用户保存会话草稿。 | draft | ||
用户在会话中被提醒。若用户删除了 @ 自己的消息,也会接收到此事件通知。 | mentionedInfoList | ||
会话最后一条消息变更 | 用户收到新消息。 | lastMessage | |
用户发送新消息。 | |||
最后一条消息的状态、内容变更,或被用户删除。 | |||
会话状态变更 | 用户有新会话。 | Added | - |
用户主动离开/被踢出群组会话。 说明 前提是群组会话已存在(即会话内有消息)。 | Disabled | - | |
群组会话被解散。 说明 前提是群组会话已存在(即会话内有消息)。 | |||
发送单聊消息时对端用户不存在。 | |||
在未加入某群组时,用户向该群组发送消息。 | |||
在多端登录场景下,当用户在某一设备上删除会话后,其他设备会立即收到该会话事件的通知。 | Deleted | - |
此时开发者可根据需求 获取会话列表。
conversationChanged 回调接口,目前仅通知“存放于用户本地数据库和 ZIM 服务端的会话列表增量变化情况”。
开发者需要通过维护从 queryConversationListWithConfig 接口中获取到的会话列表数组,根据当前会话更新情况,进行相应的属性更改、插入、和排序展示。
// 注册 SDK 事件通知回调
[self.zim setEventHandler:self];
...
- (void)zim:(ZIM *)zim conversationChanged:(NSArray<ZIMConversationChangeInfo *> *)conversationChangeInfoList {
// 获取会话变更列表
for (ZIMConversationChangeInfo *info in conversationChangeInfoList) {
if (info.event == ZIMConversationEventAdded) {
// 添加到开发者自行维护的列表中,同时刷新 UI
} else if (info.event == ZIMConversationEventUpdated) {
// 修改会话属性,同时刷新 UI
}
}
}
获取会话列表
ZIM 支持用户从本地数据库获取会话列表,也支持向 ZIM 服务端发起请求获取指定用户的全量会话列表。
拉取到会话列表后,开发者可以用于自定义会话列表的 UI 展示。
从本地数据库获取
- ZIM SDK 当前仅支持拉取“单聊”和“群组”会话列表,暂不支持拉取“房间”会话列表。
- 会话列表存于本地数据库,拉取会话列表时,会从本地数据库中获取相关数据。
- 建议开发者在首屏会话页里使用本功能。
用户登录后,如果想要查询自己参与过的会话记录,可以调用 queryConversationListWithConfig 接口,拉取会话数据列表。
由于本地会话可能数量较多,拉取会话时,开发者可以通过 ZIMConversationQueryConfig 对象,设置自定义分页拉取会话的数量,避免引起一次性拉取过多的会话导致耗时较久、会话界面加载较慢等问题。
ZIMConversationQueryConfig *config = [[ZIMConversationQueryConfig alloc] init];
// 会话锚点,传空则代表从最新开始查询
config.nextConversation = nil;
// 会话一次分页查询数
config.count = 20;
// 拉取会话列表
[self.zim queryConversationListWithConfig:config callback:^(NSArray<ZIMConversation *> * _Nonnull conversationList, ZIMError * _Nonnull errorInfo) {
// 获取会话列表查询结果
if(errorInfo.code == ZIMErrorCodeSuccess) {
// 开发者需要保存和维护数组内的会话对象
} else {
// ......
}
}];
从 ZIM 服务端获取
开发者可以通过调用服务端 API 获取用户的会话列表,详情请参考服务端 API 文档 查询会话列表。