获取会话列表
功能简介
会话
,指只有在用户发送“单聊/群聊”消息(文本/富媒体消息,不包含信令消息)时,ZIM SDK 才会自动建立的逻辑关系。
ZIM SDK 支持用户监听会话变更,并从本地数据库拉取会话列表,也支持开发者从 ZIM 服务端获取指定用户的全量会话列表。
开发者可在社交聊天、游戏社区、在线咨询等场景中获取并展示单聊、群聊会话列表。
监听会话变更
在用户登录之前,请调用 call the setEventHandler method to 接口,监听 onConversationChanged 回调,将会在如下情形时收到会话变更通知:
类别 | 事件 | 对应 Event | 对应 ZIMConnversation 属性 |
---|
会话内基础属性 | 会话名称变更。 | Updated | conversationName |
会话头像 URL 变更。 | conversationAvatarUrl |
- 用户为好友设置备注(
friendAlias )后,ZIM SDK 同步修改相关单聊的会话别名。 - 用户为群组设置备注(
groupAlias )后,ZIM SDK 同步修改相关群聊的会话别名
| conversationAlias |
会话未读数变更。 | unreadMessageCount |
会话内额外属性 | 用户设置/取消置顶会话。 | isPinned |
用户对会话设置通知状态。 | notificationStatus |
用户保存会话草稿。 | draft |
用户在会话中被提醒。 | mentionedInfoList |
会话最后一条消息变更 | 用户收到新消息。 | lastMessage |
用户发送新消息。 |
最后一条消息状态、内容变更。 |
会话状态变更 | 用户有新会话。 | Added | - |
用户主动离开/被踢出群组会话。 | Disabled | - |
群组会话被解散。 |
发送单聊消息时对端用户不存在。 |
在未加入某群组时,用户向该群组发送消息。 |
用户删除一个会话。 | Deleted | - |
此时开发者可根据需求 获取会话列表。
// 注册 SDK 事件通知回调
zim.setEventHandler(this);
...
public void onConversationChanged(ZIM zim, ArrayList<ZIMConversationChangeInfo> conversationChangeInfoList) {
super.onConversationChanged(zim, conversationChangeInfoList);
}
1
// 注册 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
}
}
}
1
// 注册 SDK 事件通知回调
zim->setEventHandler(shared_from_this());
...
void onConversationChanged(ZIM * zim, const std::vector<ZIMConversationChangeInfo> & conversationChangeInfoList) {
// 获取会话变更列表
for (auto &info : conversationChangeInfoList) {
if (info.event == ZIMConversationEventAdded) {
// 添加到开发者自行维护的列表中,同时刷新 UI
} else if (info.event == ZIMConversationEventUpdated) {
// 修改会话属性,同时刷新 UI
}
}
}
1
ZIM.GetInstance().onConversationChanged = (
ZIM zim, List<ZIMConversationChangeInfo> conversationChangeInfoList) =>
{
//会话变更通知
};
1
zim.on('conversationChanged', function(zim, { infoList }){
console.log('conversationChanged', infoList)
})
1
ZIMEventHandler.onConversationChanged = (zim, conversationChangeInfoList) {
};
1
获取会话列表
ZIM 支持开发者调用 SDK 接口从本地数据库获取当前用户的会话列表,也支持向 ZIM 服务端发起请求获取指定用户的全量会话列表。
拉取到会话列表后,开发者可以用于自定义会话列表的 UI 展示。
从本地数据库获取
- ZIM SDK 当前仅支持拉取“单聊”和“群聊”会话列表,暂不支持拉取“房间”会话列表。
- 会话列表存于本地数据库,拉取会话列表时,会从本地数据库中获取相关数据。
- 建议开发者在首屏会话页里使用本功能。
用户登录后,如果想要查询自己参与过的会话记录,可以调用 queryConversationList 接口,拉取会话数据列表。
由于本地会话可能数量较多,拉取会话时,开发者可以通过 ZIMConversationQueryConfig 对象,设置自定义分页拉取会话的数量,避免引起一次性拉取过多的会话导致耗时较久、会话界面加载较慢等问题。
ZIMConversationQueryConfig config = new ZIMConversationQueryConfig();
// 会话锚点,传空则代表从最新开始查询
config.nextConversation = null;
// 会话一次分页查询数
config.count = 20;
// 拉取会话列表
zim.queryConversationList(config, new ZIMConversationListQueriedCallback() {
@Override
public void onConversationListQueried(ArrayList<ZIMConversation> conversationList, ZIMError errorInfo) {
// 获取会话列表查询结果
if(errorInfo.code == ZIMErrorCode.SUCCESS) {
// 开发者需要保存和维护数组内的会话对象
} else {
// ......
}
}
});
1
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 {
// ......
}
}];
1
ZIMConversationQueryConfig config;
// 会话锚点,传空则代表从最新开始查询
config.nextConversation = nullptr;
// 会话一次分页查询数
config.count = 20;
// 拉取会话列表
zim->queryConversationList(config, [=](std::vector<std::shared_ptr<ZIMConversation>> conversationList, ZIMError errorInfo) {
// 获取会话列表查询结果
if(errorInfo.code == ZIMErrorCodeSuccess) {
// 开发者需要保存和维护数组内的会话对象
} else {
// ......
}
});
1
ZIMConversationQueryConfig config = new ZIMConversationQueryConfig();
// 会话锚点,传空则代表从最新开始查询
config.nextConversation = null;
// 会话一次分页查询数
config.count = 20;
// 拉取会话列表
ZIM.GetInstance().QueryConversationList(config, (List<ZIMConversation> conversationList,
ZIMError errorInfo) =>
{
//拉取结果的回调
});
1
var config = {
// 会话锚点,传空则代表从最新开始查询
nextConversation: null,
// 会话一次分页查询数
count: 20
};
// 拉取会话列表
zim.queryConversationList(config)
.then(function({ conversationList }){
// 查询成功,开发者需要保存和维护数组内的会话对象
})
.catch(function(err){
// 查询失败
})
1
ZIMConversationQueryConfig conversationQueryConfig =
ZIMConversationQueryConfig();
conversationQueryConfig.nextConversation = null;
// 会话一次分页查询数
conversationQueryConfig.count = 20;
//拉取会话列表
ZIM
.getInstance()
!.queryConversationList(conversationQueryConfig)
.then((value) => {
// 开发者需要保存和维护数组内的会话对象
})
.catchError((onError) {});
1
从 ZIM 服务端获取
开发者可以通过调用服务端 API 获取用户的会话列表,详情请参考服务端 API 文档 查询会话列表。