会话
,指只有在用户发送“单聊/群聊”消息(文本/富媒体消息,不包含信令消息)时,ZIM SDK 才会自动建立的逻辑关系。
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 支持开发者调用 SDK 接口从本地数据库获取当前用户的会话列表,也支持向 ZIM 服务端发起请求获取指定用户的全量会话列表。
拉取到会话列表后,开发者可以用于自定义会话列表的 UI 展示。
用户登录后,如果想要查询自己参与过的会话记录,可以调用 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 {
// ......
}
}];
开发者可以通过调用服务端 API 获取用户的会话列表,详情请参考服务端 API 文档 查询会话列表。
联系我们
文档反馈