频道会话管理
功能简介
每个社群频道都对应一个类型为 COMMUNITY_CHANNEL 的会话。通过频道的 conversationID,可以使用 ZIM 标准的会话管理接口来操作频道会话,包括:
- 获取频道列表(含会话 ID)
- 清除频道未读消息数
- 设置/清除频道会话草稿
- 设置频道会话免打扰
- 监听频道会话变更
前提条件
- 请参考 实现基本消息收发 完成 ZIM SDK 获取、初始化和用户登录。
- 请参考 使用 Token 鉴权 实现用户鉴权登录。
- 社群功能需要 ZIM SDK 3.0.0 及以上版本。
- 社群功能为旗舰版功能,使用前请联系 ZEGO 技术支持开通。
- 社群功能的 Token 生成方式与其他 ZIM 功能一致,无需额外权限声明。
- 频道会话的
conversationID与频道的channelID不同,发送消息和管理会话时请使用从 ZIMCommunityChannel 对象中获取的conversationID字段。
请勿将 channelID 误当作 conversationID 使用。发送消息和进行会话管理操作时,必须使用从频道对象(ZIMCommunityChannel)中获取的 conversationID,而非 channelID。
获取频道列表
在进行频道会话管理之前,需要先调用 queryCommunityChannelList 接口获取频道列表,从返回的 ZIMCommunityChannel 对象中取得 conversationID,用于后续的会话操作。
分页规则:首次将 config.nextFlag 设为 0,将返回的 nextFlag 传入下次请求,直到返回 0 为止。
zim::ZIMCommunityChannelListQueryConfig config;
config.nextFlag = 0;
zim_->queryCommunityChannelList(communityID, 100, config,
[=](const std::string &communityID,
const std::vector<zim::ZIMCommunityChannel> &channelList,
long long nextFlag,
const zim::ZIMError &errorInfo) {
if (errorInfo.code == zim::ZIM_ERROR_CODE_SUCCESS) {
for (const auto &channel : channelList) {
std::string conversationID = channel.conversationID; // 用于后续会话管理
}
}
});清除未读消息数
调用 clearConversationUnreadMessageCount 接口,将指定频道会话的未读消息数清零。清除成功后,会触发 onConversationChanged 回调,反映最新的会话状态。
std::string conversationID = channel.conversationID;
zim::ZIMConversationType conversationType = zim::ZIM_CONVERSATION_TYPE_COMMUNITY_CHANNEL;
zim_->clearConversationUnreadMessageCount(conversationID, conversationType,
[=](const zim::ZIMError &errorInfo) {
if (errorInfo.code == zim::ZIM_ERROR_CODE_SUCCESS) {
// 未读数已清零
}
});设置会话草稿
调用 setConversationDraft 接口,为指定频道会话保存草稿内容,用于用户退出频道后继续编辑。草稿内容仅存储在本地,不会发送给其他用户。
如需清空草稿,将 draft 传入空字符串即可。
std::string draft = "这是草稿内容";
std::string conversationID = channel.conversationID;
zim::ZIMConversationType conversationType = zim::ZIM_CONVERSATION_TYPE_COMMUNITY_CHANNEL;
zim_->setConversationDraft(draft, conversationID, conversationType,
[=](const zim::ZIMError &errorInfo) {
if (errorInfo.code == zim::ZIM_ERROR_CODE_SUCCESS) {
// 草稿保存成功
}
});设置会话通知状态
调用 setConversationNotificationStatus 接口,设置指定频道会话的消息免打扰状态。设置为免打扰后,该频道的未读消息数将不再累加到社群总未读数中,也不会触发系统推送。
std::string conversationID = channel.conversationID;
zim::ZIMConversationType conversationType = zim::ZIM_CONVERSATION_TYPE_COMMUNITY_CHANNEL;
zim_->setConversationNotificationStatus(
zim::ZIM_CONVERSATION_NOTIFICATION_STATUS_DO_NOT_DISTURB,
conversationID, conversationType,
[=](const zim::ZIMError &errorInfo) {
if (errorInfo.code == zim::ZIM_ERROR_CODE_SUCCESS) {
// 设置成功
}
});监听频道列表变更
当社群中频道被创建或解散或列表可见信息变更时,频道列表会随之变化。SDK 会通过 onCommunityChannelListChanged 回调通知开发者,开发者可在该回调中重新获取频道列表,更新本地的 conversationID 映射关系。详见 社群频道管理 — 监听频道列表变更。
频道会话的变更(如未读数变化、草稿更新等)同样会触发 onConversationChanged 回调。可参考 获取会话列表 了解会话变更监听的完整用法。
