文档中心
IM 即时通讯
文档中心
体验 App
SDK 中心
API 中心
常见问题
代码市场
进入控制台
立即注册
登录
中文站 English
  • 文档中心
  • 即时通讯
  • 会话相关
  • 获取会话列表

获取会话列表

更新时间:2024-08-12 16:52

功能简介

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

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

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

前提条件

在获取会话列表之前,请确保:

  • 已在 ZEGO 控制台 创建项目,获取到了接入 ZIM SDK 服务所需的 AppID、AppSign。ZIM 服务权限不是默认开启的,使用前,请先在 ZEGO 控制台 自助开通 ZIM 服务(详情请参考控制台的 服务配置 - 即时通讯 - 开通服务),若无法开通 ZIM 服务,请联系 ZEGO 技术支持开通。
  • 已集成 ZIM SDK,详情请参考 快速开始 - 实现基本收发消息 的 “2 集成 SDK”。

监听会话变更

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

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

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

Disabled
-
群组会话被解散。

前提是群组会话已存在(即会话内有消息)。
发送单聊消息时对端用户不存在。
在未加入某群组时,用户向该群组发送消息。
用户删除一个会话。
Deleted
-

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

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

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

// 注册 SDK 事件通知回调
zim.setEventHandler(this);

...

public void onConversationChanged(ZIM zim, ArrayList<ZIMConversationChangeInfo> conversationChangeInfoList) {
    super.onConversationChanged(zim, conversationChangeInfoList);

}

获取会话列表

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 {
          // ......
        }      
    }
});

从 ZIM 服务端获取

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

本篇目录
  • 免费试用
  • 提交工单
    咨询集成、功能及报价等问题
    电话咨询
    400 1006 604
    咨询客服
    微信扫码,24h在线

    联系我们

  • 文档反馈