logo
当前页

获取会话列表


功能简介

会话,指只有在用户发送“单聊/群聊”消息(文本/富媒体消息,不包含信令消息)时,ZIM SDK 才会自动建立的逻辑关系。

ZIM SDK 支持用户监听会话变更,并从本地数据库拉取会话列表,也支持开发者从 ZIM 服务端获取指定用户的全量会话列表。

开发者可在社交聊天、游戏社区、在线咨询等场景中获取并展示单聊、群聊会话列表。

监听会话变更

在用户登录之前,请调用 call the setEventHandler method to 接口,监听 onConversationChanged 回调,将会在如下情形时收到会话变更通知:

类别事件对应 Event对应 ZIMConnversation 属性
会话内基础属性会话名称变更。UpdatedconversationName
会话头像 URL 变更。conversationAvatarUrl
  • 用户为好友设置备注(friendAlias)后,ZIM SDK 同步修改相关单聊的会话别名。
  • 用户为群组设置备注(groupAlias)后,ZIM SDK 同步修改相关群聊的会话别名
conversationAlias
会话未读数变更。unreadMessageCount
会话内额外属性用户设置/取消置顶会话。isPinned
用户对会话设置通知状态。notificationStatus
用户保存会话草稿。draft
用户在会话中被提醒。mentionedInfoList
会话最后一条消息变更用户收到新消息。lastMessage
用户发送新消息。
最后一条消息状态、内容变更。
会话状态变更用户有新会话。Added-

用户主动离开/被踢出群组会话。

说明

前提是群组会话已存在(即会话内有消息)。

Disabled-

群组会话被解散。

说明

前提是群组会话已存在(即会话内有消息)。

发送单聊消息时对端用户不存在。
在未加入某群组时,用户向该群组发送消息。
用户删除一个会话。Deleted-

此时开发者可根据需求 获取会话列表

说明

onConversationChanged 回调接口,目前仅通知“存放于当前本地数据库和 ZIM 服务端的会话列表增量变化情况”。

开发者需要通过维护从 queryConversationList 接口中获取到的会话列表数组,根据当前会话更新情况,进行相应的属性更改、插入、和排序展示。

Untitled
// 注册 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
Copied!

获取会话列表

ZIM 支持开发者调用 SDK 接口从本地数据库获取当前用户的会话列表,也支持向 ZIM 服务端发起请求获取指定用户的全量会话列表。

拉取到会话列表后,开发者可以用于自定义会话列表的 UI 展示。

从本地数据库获取

说明
  • ZIM SDK 当前仅支持拉取“单聊”和“群聊”会话列表,暂不支持拉取“房间”会话列表。
  • 会话列表存于本地数据库,拉取会话列表时,会从本地数据库中获取相关数据。
  • 建议开发者在首屏会话页里使用本功能。

用户登录后,如果想要查询自己参与过的会话记录,可以调用 queryConversationList 接口,拉取会话数据列表。

由于本地会话可能数量较多,拉取会话时,开发者可以通过 ZIMConversationQueryConfig 对象,设置自定义分页拉取会话的数量,避免引起一次性拉取过多的会话导致耗时较久、会话界面加载较慢等问题。

Untitled
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
Copied!

从 ZIM 服务端获取

开发者可以通过调用服务端 API 获取用户的会话列表,详情请参考服务端 API 文档 查询会话列表

Previous

回复消息

Next

管理消息未读数