频道分组
更新时间: 2024/11/21 16:31:48
本文介绍频道分组的技术原理、创建频道分组的实现方法以及相关示例代码。
技术原理
网易云信即时通讯 NIM Windows SDK 的NIMQChatChannelCategoryInfo
结构体定义了频道分组。同时,SDK 的ChannelCategory
类提供管理频道分组的相关方法,助您快速实现对频道的分类管理。
频道管理相关方法,基本都需要满足如下两个前提条件才能调用。各方法的具体调用前提,请参见本文的 API参考。
- 频道分组对用户可见,具体机制见下文的频道分组可见机制。
- 拥有管理频道的权限(
NIMQChatPermission
枚举中的kPermissionManageChannel
)。
频道分组可见机制
-
频道分组对服务器成员的可见机制与频道的类似,分如下两种情况:
- 如果频道分组为公开频道分组,那么只要用户未被加入频道分组黑名单,频道分组就对其可见。
- 如果频道分组为私密频道分组,那么用户需被加入频道分组白名单,频道分组才对其可见。
频道分组黑白名单相关说明,请参见频道分组黑白名单。
-
频道分组是否对游客可见,取决于频道分组内是否有频道对游客可见。如果频道分组内有频道对游客可见,则该频道分组对游客也可见。频道是否对游客可见由
visitor_mode
决定,可在创建频道和修改频道时设置,具体见频道管理。如果频道的 visitor_mode
为跟随模式,且同步模式(sync_mode
)为“与频道分组同步”,则当该频道所属的频道分组的查看模式(view_mode
)变更后,该频道对游客的可见性也将变更。例如,在这种情况下,频道分组的查看模式由公开变为私密,则此时该频道对游客从“可见”变为“不可见”。
频道分组与频道的关联逻辑
频道管理相关方法(如CreateChannel
)的入参包含category_id
和sync_mode
。在调用CreateChannel
时传入category_id
可将频道加入某个频道分组;通过设置sync_mode
,可实现频道数据与频道分组数据的同步。具体同步的数据包括查看模式(私密或公开)、黑白名单和身份组权限。
参数 |
类型 |
说明 |
---|---|---|
category_id |
long | 频道需加入或所在的频道分组 ID。设置为 0 表示频道没有频道分组。设置为频道分组 ID 表示归属某个频道分组 |
sync_mode |
NIMQChatChannelSyncMode |
频道同步模式
|
归属于单个频道分组的频道数量上限为 50。
频道分组与服务器的关联逻辑
定义了服务器的NIMQChatServerInfo
结构体中包含channel_category_count
参数,该参数表示服务器内频道分组的数量。
服务器内频道分组数量上限为 100。
频道分组与系统通知的关联逻辑
频道分组相关事件的系统通知为 SDK 内置系统通知,在NIMQChatSystemNotificationType
枚举内定义。具体类型及相关的触发和接收条件见下表。
系统通知类型 |
触发条件 |
接收条件 |
---|---|---|
kNIMQChatSystemNotificationTypeChannelCategoryCreate |
频道分组成功创建时 |
|
kNIMQChatSystemNotificationTypeChannelCategoryRemove |
频道分组被删除时 |
|
kNIMQChatSystemNotificationTypeChannelCategoryUpdate |
频道分组信息被修改时 |
|
kNIMQChatSystemNotificationTypeChannelCategoryWhiteBlackRoleUpdate |
频道分组黑白名单身份组被修改时 |
|
kNIMQChatSystemNotificationTypeChannelCategoryWhiteBlackMembersUpdate |
频道分组黑白名单成员被修改时 |
|
2,000 人阈值可联系商务经理调整。
实现方法
本节以服务器所有者(即创建者)和服务器成员的交互为例,介绍服务器成员创建频道分组的实现流程。
- 服务器所有者拥有全局权限,可以在创建服务器后直接调用
CreateChannelCategory
方法创建频道分组。 - 用户创建频道分组后, 可对频道分组做更新、删除、修改和查询等操作,相关可调用的方法请参见本文的API参考。
前提条件
实现流程
- 服务器所有者调用
AddMembersToServerRole
方法,将服务器成员加入身份组。 - 服务器所有者调用
UpdateServerRole
方法,授予该身份组管理频道的权限(NIMQChatPermissionType
)。 - 服务器成员调用
CreateChannelCategory
方法创建频道分组。
API 调用时序图
sequenceDiagram
服务器所有者 ->> 圈组: AddMembersToServerRole
服务器所有者 ->> 圈组: UpdateServerRole
服务器成员 ->> 圈组: CreateChannelCategory
示例代码
// A: add user B to server role
QChatAddMembersToServerRoleParam param;
param.server_id = 123456;
param.role_id = 123456;
param.members_accids = {"B"};
param.cb = [this](const QChatAddMembersToServerRoleResp& resp) {
if (resp.res_code != NIMResCode::kNIMResSuccess) {
// error handling
return;
}
// process response
// ...
};
Role::AddMembersToServerRole(param);
// A: update server role to enable create channel category permission
QChatUpdateServerRoleParam param;
param.info.server_id = 123456;
param.info.role_id = 123456;
param.info.permissions[kPermissionManageChannel] = kPermissionSwitchAllow;
param.cb = [this](const QChatUpdateServerRoleResp& resp) {
if (resp.res_code != NIMResCode::kNIMResSuccess) {
// error handling
return;
}
// process response
// ...
};
Role::UpdateServerRole(param);
// B: now B has permission to create channel category
QChatChannelCategoryCreateParam param;
param.server_id = 123456;
param.name = "channel category name";
param.custom = "channel category custom";
param.view_mode = kNIMQChatChannelViewModePublic;
param.cb = [this](const QChatChannelCategoryCreateResp& resp) {
if (resp.res_code != NIMResCode::kNIMResSuccess) {
// error handling
return;
}
// process response
// ...
};
ChannelCategory::CreateChannelCategory(param);
API参考
API |
调用前提 |
说明 |
---|---|---|
-
CreateChannelCategory |
用户拥有管理频道的权限 | 创建频道分组 |
RemoveChannelCategory |
频道分组对用户可见,且用户拥有管理频道的权限 | 删除频道分组 |
UpdateChannelCategory |
频道分组对用户可见,且用户拥有管理频道的权限 | 修改频道分组信息 |
GetChannelCategoriesByID |
无 | 按分组 ID 查询频道分组 |
GetChannelCategoryChannelsPage |
频道分组对用户可见,且用户拥有管理频道的权限 | 分页查询频道分组下频道列表 |
GetChannelCategoriesPage |
频道分组对用户可见,且用户拥有管理频道的权限 | 分页查询频道分组列表 |