会话
,指当用户发送“单聊/群聊”消息时,SDK 自动建立的逻辑关系。ZIM SDK 提供了会话管理功能,支持用户登录后拉取会话列表、创建/更新/删除会话、置顶会话等。
通常可以应用在社交聊天、游戏社区、在线咨询等业务场景中,获取展示单聊、群聊会话列表。
在实现“会话管理”功能之前,请确保:
已在 ZEGO 控制台 创建项目,获取到了接入 ZIM SDK 服务所需的 AppID 和 ServerSecret。ZIM 服务权限不是默认开启的,使用前,请先在 ZEGO 控制台 自助开通 ZIM 服务(详情请参考 项目管理 - 即时通讯),若无法开通 ZIM 服务,请联系 ZEGO 技术支持开通。
已获取登录 SDK 所需的 Token,详情请参考 使用 Token 鉴权。
已集成 ZIM SDK,详情请参考 快速开始 - 实现基本收发消息 的 “3 集成 SDK”。
用户登录后,如果想要查询自己参与过的会话记录,可以调用 queryConversationList 接口,拉取会话数据列表。
由于本地会话可能数量较多,拉取会话时,开发者可以通过 ZIMConversationQueryConfig 对象,设置自定义分页拉取会话的数量,避免引起一次性拉取过多的会话导致耗时较久、会话界面加载较慢等问题。
queryConversationList(config: ZIMConversationQueryConfig): Promise<ZIMConversationListQueriedResult>
参数/回调 | 类型 | 是否必填 | 说明 |
---|---|---|---|
config | ZIMConversationQueryConfig | 是 | 拉取会话列表时的属性配置。 |
Promise | ZIMConversationListQueriedResult | 是 | 拉取会话列表操作的结果回调通知。 |
var config = {
// 会话锚点,传空则代表从最新开始查询
nextConversation: null,
// 会话一次分页查询数
count: 20
};
// 拉取会话列表
zim.queryConversationList(config)
.then(function({ conversationList }){
// 查询成功,开发者需要保存和维护数组内的会话对象
})
.catch(function(err){
// 查询失败
})
拉取到会话信息后,开发者可以自定义会话列表的 UI 展示。获取到的会话列表信息 ZIMConversation,包含如下属性:
参数 | 类型 | 说明 |
---|---|---|
conversationID |
string |
会话 ID。
|
conversationName |
string |
会话名称。
|
type |
会话类型。
|
|
unreadMessageCount |
number |
会话未读消息数量。 |
lastMessage |
最后一条消息。开发者可以获取到会话内最后一条的消息内容、方向、时间等信息,展示在 UI 中。 |
|
orderKey |
number |
会话排序 key。 orderKey 越大,则会话的时间越新。开发者可以根据此参数,在 UI 上实现会话列表按照“时间倒序”排列(即最新的会话在前,其余会话按照时间排列在后)的功能。 可能存在会话 A、B 最新消息发送时间相同,导致这两个会话的 orderKey 相同的情况。 |
notificationStatus |
标识当前会话消息是否通知。
|
|
conversationAvatarUrl |
string |
会话头像 URL。
|
用户登录后,当出现以下情况时,如果开发者已经注册了 on 监听的 conversationChanged 回调接口,将会收到相关的消息通知:
此时开发者需要根据情况,通过 queryConversationList 接口更新会话列表。
conversationChanged 回调接口,目前仅支持“当前本地 DB 里会话列表、和服务端会话列表的增量变化情况”的通知。开发者需要通过维护从 queryConversationList 接口中获取到的会话列表数组,根据当前会话更新情况,进行相应的属性更改、插入、和排序展示。
zim.on('conversationChanged', function(zim, { infoList }){})
参数 | 类型 | 说明 |
---|---|---|
zim |
ZIM |
ZIM 实例对象。 |
infoList |
会话变更列表。 |
zim.on('conversationChanged', function(zim, { infoList }){
console.log('conversationChanged', infoList)
})
用户登录并成功拉取到会话列表后,可以通过调用 clearConversationUnreadMessageCount 接口,清除某个会话的未读消息数。
由于 SDK 并不知道用户何时应该清除会话未读数,因此开发者需要在用户与某些页面交互时触发调用该接口,以下为常见的调用时机:
clearConversationUnreadMessageCount(
conversationID: string,
conversationType: ZIMConversationType,
): Promise<ZIMConversationUnreadMessageCountClearedResult>
参数/回调 | 类型 | 是否必填 | 说明 |
---|---|---|---|
conversationID | string | 是 | 会话 ID。
|
conversationType | ZIMConversationType | 是 | 会话类型。
|
Promise | ZIMConversationUnreadMessageCountClearedResult | 是 | 清除未读数操作的结果回调通知。 |
var conversationID = '';
var conversationType = 0;
zim.clearConversationUnreadMessageCount(conversationID, conversationType)
.then(function(res){
// 操作成功
})
.catch(function(err){
// 操作失败
})
用户登录并成功拉取到会话列表后,可以通过调用 clearConversationTotalUnreadMessageCount 接口,清除全部会话的未读消息数。
当开发者想实现清除全部会话消息未读数和消息未读总数时,可使用该接口。
clearConversationTotalUnreadMessageCount(): Promise<void>;
回调 | 类型 | 是否必填 | 说明 |
---|---|---|---|
Promise | void | 否 | 清除全部未读数操作的结果回调通知。 |
// 清除全部会话的未读消息数量
zim.clearConversationTotalUnreadMessageCount()
.then(function(){
// 操作成功
})
.catch(function(err){
// 操作失败
})
用户登录后,可以查询自己当前有多少未读消息。开发者可以通过 on 监听的 conversationTotalUnreadMessageCountUpdated 回调接口,获取消息的未读总数。
用户登录成功后,以下情况出现时,均会通过该接口,获取消息未读总数更新的通知:
开发者可以通过此回调通知,调整自己应用的 UI 展示,用于提醒用户当前有多少条消息未读。
zim.on('conversationTotalUnreadMessageCountUpdated', function(zim, { totalUnreadMessageCount }){})
参数 | 类型 | 说明 |
---|---|---|
zim |
ZIM |
ZIM 实例对象。 |
totalUnreadMessageCount |
number |
消息未读总数。 |
zim.on('conversationTotalUnreadMessageCountUpdated', function(zim, { totalUnreadMessageCount }){
// 获取会话总未读数用于 UI 展示
})
会话消息免打扰,指设置之后,SDK 在接收到当前会话的消息时,将不会进行推送通知,同时“消息未读总数”也不会增加。
开发者可以调用 setConversationNotificationStatus 接口,传入 conversationID 指定某个会话,设置消息免打扰功能。
setConversationNotificationStatus(
status: ZIMConversationNotificationStatus,
conversationID: string,
conversationType: ZIMConversationType,
): Promise<ZIMConversationNotificationStatusSetResult>
参数/回调 | 类型 | 是否必填 | 说明 |
---|---|---|---|
status | ZIMConversationNotificationStatus | 是 | 会话消息免打扰状态。 |
conversationID | string | 是 | 会话 ID。
|
conversationType | ZIMConversationType | 是 | 会话类型。 支持对单聊和群聊会话设置消息免打扰。 |
Promise | ZIMConversationNotificationStatusSetResult | 是 | 设置消息免打扰操作的结果回调通知。 |
// 将某个群会话设置成消息免打扰状态
// 以群聊消息为例
var status = 2; // 将会话状态设置为免打扰
var conversationID = '';
var conversationType = 2; // 会话类型为群聊
zim.setConversationNotificationStatus(status, conversationID, conversationType)
.then(function(res){
// 操作成功
})
.catch(function(err){
// 操作失败
})
用户登录后,可以删除自己的会话列表中的某个会话。开发者通过调用 deleteConversation 接口,传入 conversationID 指定会话,删除某个会话。
删除某个会话时:
deleteConversation(
conversationID: string,
conversationType: ZIMConversationType,
config: ZIMConversationDeleteConfig,
): Promise<ZIMConversationDeletedResult>
参数/回调 | 类型 | 是否必填 | 说明 |
---|---|---|---|
conversationID | string | 是 | 会话 ID。
|
conversationType | ZIMConversationType | 是 | 会话类型。
|
config | ZIMConversationDeleteConfig | 是 | 删除会话的高级属性设置。 |
Promise | ZIMConversationDeletedResult | 是 | 删除某个会话操作的结果回调通知。 |
// 删除某个会话,以下为 删除单聊会话
var conversationID = '';
var conversationType = 0;
var config = { isAlsoDeleteServerConversation: true };
zim.deleteConversation(conversationID, conversationType, config)
.then(function(res){
// 操作成功
})
.catch(function(err){
// 操作失败
})
用户登录后,可以删除会话列表中的所有会话。开发者通过调用 deleteAllConversations 接口删除全部会话。
deleteAllConversations(config: ZIMConversationDeleteConfig): Promise<void>;
参数/回调 | 类型 | 是否必填 | 说明 |
---|---|---|---|
config | ZIMConversationDeleteConfig | 是 | 删除全部会话的高级属性设置。 |
Promise | void | 否 | 删除全部会话操作的结果回调通知。 |
// 删除全部会话
var config = { isAlsoDeleteServerConversation: true };
zim.deleteAllConversations(config)
.then(function(){
// 操作成功
})
.catch(function(err){
// 操作失败
})
会话置顶指的是将单聊或者群聊会话固定于会话列表的顶部,不会被其他非置顶会话挤到底部,方便用户查找。用户通过客户端将会话置顶后,置顶状态会存储在服务器,因此,当用户切换终端设备后,置顶状态会同步到当前设备。
置顶会话始终排在未置顶会话之前。
对于通过调用 queryConversationList 接口拉取的会话列表,此规则同样适用。开发者可以通过拉取结果中 ZIMConversation 的 isPinned 字段,确认会话是否被置顶。
用户置顶多个会话后,相关会话之间的相对顺序仍然会保持。
假设有 5 个会话,在会话列表中的现有排序为:a、b、c、d、e。
用户将会话 b 和 d 置顶(不论先置顶哪个),顺序变更为 b、d、a、c、e,即 b 和 d 排在最前面,并且会话 b 仍然排在 d 之前。
上述场景成立的前提为会话的 orderKey 没有被其他事件改变(如收到新消息后,会话的 order key 会变大)。当 orderKey 变化后,置顶会话列表中的顺序会改变。
用户登录后,可调用 updateConversationPinnedState 接口置顶或取消置顶自己会话列表中的某个会话。
// 修改会话置顶状态
updateConversationPinnedState(
isPinned: boolean,
conversationID: string,
conversationType: ZIMConversationType,
): Promise<ZIMConversationPinnedStateUpdatedResult>
参数/回调 | 类型 | 是否必填 | 说明 |
---|---|---|---|
isPinned | boolean | 是 | 会话的置顶状态:
|
conversationID | string | 是 | 会话 ID。
|
conversationType | ZIMConversationType | 是 | 会话类型。
|
Promise | ZIMConversationPinnedStateUpdatedResult | 是 | 修改会话置顶状态的结果回调通知。 |
// 置顶某单聊会话
var isPinned = true;
var conversationID = "";
var conversationType = 0;
zim.updateConversationPinnedState(isPinned, conversationID, conversationType)
.then(function(res){
// 操作成功
})
.catch(function(err){
// 操作失败
})
用户登录后,可以通过 queryConversationPinnedList 接口,获取全量的置顶会话列表。
// 查询置顶会话列表
queryConversationPinnedList(config: ZIMConversationQueryConfig): Promise<ZIMConversationPinnedListQueriedResult>
参数/回调 | 类型 | 是否必填 | 说明 |
---|---|---|---|
config | ZIMConversationQueryConfig | 是 | 拉取会话列表时的属性配置。 |
Promise | ZIMConversationPinnedListQueriedResult | 是 | 查询置顶会话列表的结果回调通知。 |
var config = {
// 会话锚点,传空则代表从最新开始查询
nextConversation: null,
// 会话一次分页查询数
count: 20
};
// 拉取会话列表
zim.queryConversationPinnedList(config)
.then(function({ conversationList }){
// 查询成功,开发者需要保存和维护数组内的会话对象
})
.catch(function(err){
// 查询失败
})
用户登录后,可以调用 queryConversation 接口,指定会话 ID 及会话类型,获取对应会话的详细信息(包括会话名称、会话未读数、会话通知状态等)。
// 查询会话信息
var conversationID = "xxx";
var conversationType = 0;
// 拉取会话列表
zim.queryConversation(conversationID, conversationType)
.then(function({ conversation }){
// 查询成功,开发者需要保存和维护数组内的会话对象
})
.catch(function(err){
// 查询失败
})
会话草稿,指用户正在编辑但尚未发送的文本消息。ZIM 支持用户退出会话后仍在本地保存会话草稿,以便继续编辑。
调用 setConversationDraft 接口,传入 conversationID 与conversationType 指定某个会话,即可将草稿保存到会话。
如需清除会话草稿,draft
字段请传空字符串。
保存草稿成功后,可以通过 conversationChanged 回调接口获取草稿变更后的会话信息。
setConversationDraft(
draft: string,
conversationID: string,
conversationType: ZIMConversationType,
): Promise<ZIMConversationDraftSetResult>
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
draft | string | 是 | 会话草稿。传空字符串则为清除草稿。 |
conversationID | string | 是 | 会话 ID。
|
conversationType | ZIMConversationType | 是 | 会话类型,当前仅支持“单聊”、“群组”类型。 |
// 为某个会话设置草稿
// 以群聊消息为例
zim.setConversationDraft("draft", "Group_ID", 2).then(function({ conversationID, conversationType }){
// 保存成功后的业务逻辑
})
.catch(function(err){
// 请查看错误码文档获取解决建议
});
联系我们
文档反馈