频道管理
更新时间: 2023/07/21 14:54:54
本文已不再维护,请查看频道概述和相关文档。
频道管理
频道(Channel) 是具体信息通讯的发生地,就像游乐场中的每个游乐设施,有了 Server 这个游乐场地,就必须构建游乐设施才能给用户提供服务。 SDK 中用于表示 Channel 的结构为 NIMQChatChannel:
- NIMQChatChannel 原型
NS_ASSUME_NONNULL_BEGIN
/**
* 频道
*/
@interface NIMQChatChannel : NSObject
/**
* 频道id
*/
@property (nonatomic, assign) unsigned long long channelId;
/**
* 服务器id
*/
@property (nonatomic, assign) unsigned long long serverId;
/**
* 应用id
*/
@property (nonatomic, assign) NSInteger appId;
/**
* 名称
*/
@property (nonatomic, copy) NSString *name;
/**
* 主题
*/
@property (nonatomic, copy) NSString *topic;
/**
* 自定义扩展
*/
@property (nonatomic, copy) NSString *custom;
/**
* 类型:0-消息频道,1-实时互动频道,100自定义频道
*/
@property (nonatomic, assign) NIMQChatChannelType type;
/**
* 有效标志:0-无效,1-有效
*/
@property (nonatomic, assign) BOOL validflag;
/**
* 创建时间
*/
@property (nonatomic, assign) NSTimeInterval createTime;
/**
* 更新时间
*/
@property (nonatomic, assign) NSTimeInterval updateTime;
/**
* 所有者
*/
@property (nonatomic, copy) NSString *owner;
/**
* 查看模式
*/
@property (nonatomic, assign) NIMQChatChannelViewMode viewMode;
@end
NS_ASSUME_NONNULL_END
创建 Channel
有了 Server 后,我们可以在该 Server 下创建 Channel。
- 接口原型
@protocol NIMQChatChannelManager <NSObject>
/**
* 创建圈组频道
*
* @param param 传入参数
* @param completion 结果回调
*/
- (void)createChannel:(NIMQChatCreateChannelParam *)param
completion:(nullable NIMQChatCreateChannelHandler)completion;
@end
其中NIMQChatCreateChannelParam
需要传入 ServerId,Channel 名称和 Channel 类型,另外还可以设置 Channel 的主题、自定义扩展和查看模式。
9.3.0 版本增加了实时互动频道类型,创建频道时可通过 NIMQChatChannelType
参数来选择频道类型。
- 示例代码
id<NIMQChatChannelManager> qchatChannelManager = [[NIMSDK sharedSDK] qchatChannelManager];
NIMQChatCreateChannelParam * param = [[NIMQChatCreateChannelParam alloc] init];
param.serverId = 123456;
param.name = @"云信Channel";
param.type = NIMQChatChannelTypeMsg;
//反垃圾业务id
param.antispamBusinessId = @"{\"picbid\": \"804265342b7425324f53425c343454\", \"txtbid\": \"804265342b7425324f53425c343454\"}";
[qchatChannelManager createChannel:param
completion:^(NSError *__nullable error, NIMQChatChannel *__nullable result) {
// your code
}];
删除 Channel
拥有 Channel 管理权限的人可以删除已创建的 Channel。
- 接口原型
@protocol NIMQChatChannelManager <NSObject>
/**
* 删除圈组频道
*
* @param param 传入参数
* @param completion 结果回调
*/
- (void)deleteChannel:(NIMQChatDeleteChannelParam *)param
completion:(nullable NIMQChatHandler)completion;
@end
其中NIMQChatDeleteChannelParam
需要传入需要删除的 ChannelId
- 示例代码
id<NIMQChatChannelManager> qchatChannelManager = [[NIMSDK sharedSDK] qchatChannelManager];
NIMQChatDeleteChannelParam * param = [[NIMQChatDeleteChannelParam alloc] init];
param.channelId = 121212;
[qchatChannelManager deleteChannel:param
completion:^(NSError *error) {
// your code
}];
修改 Channel
拥有 Channel 管理权限的人可以修改已创建的 Channel。
- 接口原型
@protocol NIMQChatChannelManager <NSObject>
/**
* 修改圈组频道信息
*
* @param param 传入参数
* @param completion 结果回调
*/
- (void)updateChannel:(NIMQChatUpdateChannelParam *)param
completion:(nullable NIMQChatUpdateChannelHandler)completion;
@end
- 示例代码
id<NIMQChatChannelManager> qchatChannelManager = [[NIMSDK sharedSDK] qchatChannelManager];
NIMQChatUpdateChannelParam * param = [[NIMQChatUpdateChannelParam alloc] init];
param.channelId = 121212;
param.name = @"更新后的频道名称";
//反垃圾业务id
param.antispamBusinessId = @"{\"picbid\": \"804265342b7584903253244\", \"txtbid\": \"804265342b7534265432523\"}";
[qchatChannelManager updateChannel:param
completion:^(NSError *__nullable error, NIMQChatChannel *__nullable result) {
// your code
}];
查询 Channel
SDK 提供两种方式查询 Channel 信息,分别是按 ChannelId 查询 Channel 信息和按时间分页查询 Channel 信息。
按 ChannelId 查询 Channel 信息
可以通过传入 ServerId 列表查询指定的 Server 信息。
- 接口原型
@protocol NIMQChatChannelManager <NSObject>
/**
* 查询圈组频道信息
*
* @param param 传入参数
* @param completion 结果回调
*/
- (void)getChannels:(NIMQChatGetChannelsParam *)param
completion:(nullable NIMQChatGetChannelsHandler)completion;
@end
- 示例代码
id<NIMQChatChannelManager> qchatChannelManager = [[NIMSDK sharedSDK] qchatChannelManager];
NIMQChatGetChannelsParam * param = [[NIMQChatGetChannelsParam alloc] init];
param.channelIdArray = @[@(121212), @(131313), @(141414)];
[qchatChannelManager getChannels:param
completion:^(NSError *__nullable error, NIMQChatGetChannelsResult *__nullable result) {
// your code
}];
按时间分页查询 Channel 信息
可以通过时间戳和查询数量分页查询 Channel 信息。
- 接口原型
@protocol NIMQChatChannelManager <NSObject>
/**
* 分页查询圈组频道信息
*
* @param param 传入参数
* @param completion 结果回调
*/
- (void)getChannelsByPage:(NIMQChatGetChannelsByPageParam *)param
completion:(nullable NIMQChatGetChannelsByPageHandler)completion;
@end
其中NIMQChatGetChannelsByPageParam需要传入查询的ServerId,查询锚点时间戳timeTag和查询数量限制limit
- 示例代码
id<NIMQChatChannelManager> qchatChannelManager = [[NIMSDK sharedSDK] qchatChannelManager];
NIMQChatGetChannelsByPageParam * param = [[NIMQChatGetChannelsByPageParam alloc] init];
param.serverId = 123456;
// 传0拉取最新的Channel
param.timeTag = 0;
param.limit = 20;
[qchatChannelManager getChannelsByPage:param
completion:^(NSError *__nullable error, NIMQChatGetChannelsByPageResult *__nullable result) {
// your code
}];
订阅频道请求
你可以用以下接口订阅或者取消订阅Channel的消息、未读数、未读状态、系统通知,成员数量大于等于2000(可联系商务经理调整该阈值)的Server下只有订阅Channel后才能收到该Channel的订阅内容(消息、未读数、未读状态);与你相关的消息不需要订阅Channel就可以收到,比如@你的消息(@All的消息不属于与你相关的消息),成员数量小于2000的Server下不需要订阅Channel就可以收到所有该Server下所有Channel的消息:
- 接口原型
@protocol NIMQChatChannelManager <NSObject>
/**
* 订阅频道请求
* 成员数量大于等于2000的服务器下,只有订阅频道后才能收到该频道的订阅内容(消息、未读数、未读状态);与你相关的消息不需要订阅频道 * 就可以收到,比如@你的消息(@All的消息不属于与你相关的消息)
*成员数量小于2000的服务器下,不需要订阅频道就可以收到所有该服务器下所有频道的消息
* @param param 传入参数
* @param completion 结果回调
*/
-(void)subscribeChannel:(NIMQChatSubscribeChannelParam *)param
completion:(nullable NIMQChatHandler)completion;
@end
其中NIMQChatSubscribeChannelParam需要传入订阅类型,订阅操作类型和需要订阅的serverId+channelId列表
- 示例代码
id<NIMQChatChannelManager> qchatChannelManager = [[NIMSDK sharedSDK] qchatChannelManager];
NIMQChatSubscribeChannelParam * param = [[NIMQChatSubscribeChannelParam alloc] init];
// 订阅频道消息,这里只能传频道类型的订阅。订阅服务器请用其他接口
param.subscribeType = NIMQChatSubscribeTypeChannelMsg;
param.operationType = NIMQChatSubscribeOperationTypeSubscribe;
param.targets = @[@(123456)];
[qchatChannelManager subscribeChannel:param
completion:^(NSError *error) {
// your code
}];
查询未读信息
SDK提供了未读信息的查询,可以通过此知道Server下各Channel的未读信息。
该方法单次最多查询频道数量为 100。
- 接口原型
@protocol NIMQChatChannelManager <NSObject>
/**
* 查询未读信息
*/
- (void)getChannelUnreadInfos:(NIMQChatGetChannelUnreadInfosParam *)param
completion:(nullable NIMQChatGetChannelUnreadInfosHandler)completion;
@end
- 示例代码
id<NIMQChatChannelManager> qchatChannelManager = [[NIMSDK sharedSDK] qchatChannelManager];
NIMQChatGetChannelUnreadInfosParam * param = [[NIMQChatGetChannelUnreadInfosParam alloc] init];
param.targets = @[@(121212), @(131313), @(141414)];
[qchatChannelManager getChannelUnreadInfos:param
completion:^(NSError *__nullable error, NIMQChatGetChannelUnreadInfosResult *__nullable result) {
// your code
}];
查询 Channel 成员
可以通过以下接口分页查询某Channel下的成员列表,如果是公开频道,则成员为除拉入此频道黑名单外的所有Server成员;如果是私密频道,则为此频道下白名单中所有Server成员:
- 接口原型
@protocol NIMQChatChannelManager <NSObject>
/**
* 分页查询圈组频道成员
*
* @param param 传入参数
* @param completion 结果回调
*/
- (void)getChannelMembersByPage:(NIMQChatGetChannelMembersByPageParam *)param
completion:(nullable NIMQChatGetChannelMembersByPageHandler)completion;
@end
其中NIMQChatGetChannelMembersByPageParam中传入查询的ServerId,ChannelId,查询锚点时间戳timeTag和查询数量限制limit。
- 示例代码
id<NIMQChatChannelManager> qchatChannelManager = [[NIMSDK sharedSDK] qchatChannelManager];
NIMQChatGetChannelMembersByPageParam * param = [[NIMQChatGetChannelMembersByPageParam alloc] init];
param.serverId = 123456;
param.channelId = 121212;
param.timeTag = 0;
param.limit = 20;
[qchatChannelManager getChannelMembersByPage:param
completion:^(NSError *__nullable error, NIMQChatGetChannelMembersByPageResult *__nullable result) {
// your code
}];
更新 Channel 黑白名单成员
拥有管理黑白名单的权限的人可以更新Channel的黑白名单成员:
- 接口原型
@protocol NIMQChatChannelManager <NSObject>
/**
* 更新频道黑白名单成员
*
* @param param 传入参数
* @param completion 结果回调
*/
- (void)updateBlackWhiteMembers:(NIMQChatUpdateChannelBlackWhiteMembersParam *)param
completion:(nullable NIMQChatHandler)completion;
@end
- 示例代码
id<NIMQChatChannelManager> qchatChannelManager = [[NIMSDK sharedSDK] qchatChannelManager];
NIMQChatUpdateChannelBlackWhiteMembersParam * param = [[NIMQChatUpdateChannelBlackWhiteMembersParam alloc] init];
param.serverId = 123456;
param.channelId = 121212;
// 添加白名单成员
param.type = NIMQChatQChatChannelMemberRoleTypeWhite;
param.opeType = NIMQChatQChatChannelMemberRoleOpeTypeAdd;
param.accids = @[@"yunxin1", @"yunxin2", @"yunxin3"];
[qchatChannelManager updateBlackWhiteMembers:param
completion:^(NSError *error) {
// your code
}];
分页查询频道黑白名单成员列表
拥有管理黑白名单的权限的人可以分页查询频道黑白名单成员列表:
- 接口原型
@protocol NIMQChatChannelManager <NSObject>
/**
* 分页查询频道黑白名单成员列表
*
* @param param 传入参数
* @param completion 结果回调
*/
- (void)getBlackWhiteMembersByPage:(NIMQChatGetChannelBlackWhiteMembersByPageParam *)param
completion:(nullable NIMQChatGetChannelBlackWhiteMembersByPageHandler)completion;
@end
其中NIMQChatGetChannelBlackWhiteMembersByPageParam需要传入查询的ServerId,ChannelId,黑白名单类型,查询锚点时间戳timeTag和查询数量限制limit。
- 示例代码
id<NIMQChatChannelManager> qchatChannelManager = [[NIMSDK sharedSDK] qchatChannelManager];
NIMQChatGetChannelBlackWhiteMembersByPageParam * param = [[NIMQChatGetChannelBlackWhiteMembersByPageParam alloc] init];
param.serverId = 123456;
param.channelId = 121212;
param.timeTag = 0;
param.limit = 20;
// 查询白名单成员
param.type = NIMQChatQChatChannelMemberRoleTypeWhite;
[qchatChannelManager getBlackWhiteMembersByPage:param
completion:^(NSError *__nullable error, NIMQChatGetChannelBlackWhiteMembersByPageResult *__nullable result) {
// your code
}];
分页查询频道黑白名单身份组列表
拥有管理黑白名单的权限的人可以查询Channel黑白名单身份组列表:
- 接口原型
@protocol NIMQChatChannelManager <NSObject>
/**
* 分页查询频道黑白名单身份组列表
*
* @param param 传入参数
* @param completion 结果回调
*/
- (void)getBlackWhiteRolesByPage:(NIMQChatGetChannelBlackWhiteRolesByPageParam *)param
completion:(nullable NIMQChatGetChannelBlackWhiteRolesByPageHandler)completion;
@end
其中NIMQChatGetChannelBlackWhiteRolesByPageParam需要传入查询的ServerId,ChannelId,黑白名单类型,查询锚点时间戳timeTag和查询数量限制limit
- 示例代码
id<NIMQChatChannelManager> qchatChannelManager = [[NIMSDK sharedSDK] qchatChannelManager];
NIMQChatGetChannelBlackWhiteRolesByPageParam * param = [[NIMQChatGetChannelBlackWhiteRolesByPageParam alloc] init];
param.serverId = 123456;
param.channelId = 121212;
param.timeTag = 0;
param.limit = 20;
// 查询白名单成员
param.type = NIMQChatQChatChannelMemberRoleTypeWhite;
[qchatChannelManager getBlackWhiteRolesByPage:param
completion:^(NSError *__nullable error, NIMQChatGetChannelBlackWhiteRolesByPageResult *__nullable result) {
// your code
}];
更新 Channel 黑白名单身份组
拥有管理黑白名单的权限的人可以更新Channel的黑白名单身份组:
- 接口原型
@protocol NIMQChatChannelManager <NSObject>
/**
* 更新频道黑白名单身份组
*
* @param param 传入参数
* @param completion 结果回调
*/
- (void)updateBlackWhiteRole:(NIMQChatUpdateChannelBlackWhiteRoleParam *)param
completion:(nullable NIMQChatHandler)completion;
@end
其中NIMQChatUpdateChannelBlackWhiteRolesParam需要传入操作的ServerId,ChannelId,黑白名单类型,黑白名单操作类型和身份组Id列表
- 示例代码
id<NIMQChatChannelManager> qchatChannelManager = [[NIMSDK sharedSDK] qchatChannelManager];
NIMQChatUpdateChannelBlackWhiteRoleParam * param = [[NIMQChatUpdateChannelBlackWhiteRoleParam alloc] init];
param.serverId = 123456;
param.channelId = 121212;
// 修改白名单成员
param.type = NIMQChatQChatChannelMemberRoleTypeWhite;
param.opeType = NIMQChatQChatChannelMemberRoleOpeTypeAdd;
param.roleId = 111;
[qchatChannelManager updateBlackWhiteRole:param
completion:^(NSError *error) {
// your code
}];
批量查询 Channel 黑白名单身份组列表
此接口可以根据传入的身份组roleid列表查询出在此频道黑白名单中的身份组。
- 接口原型
@protocol NIMQChatChannelManager <NSObject>
/**
* 批量查询频道黑白名单身份组列表
*
* @param param 传入参数
* @param completion 结果回调
*/
- (void)getExistingChannelBlackWhiteRoles:(NIMQChatGetExistingChannelBlackWhiteRolesParam *)param
completion:(nullable NIMQChatGetExistingChannelBlackWhiteRolesHandler)completion;
@end
- 示例代码
id<NIMQChatChannelManager> qchatChannelManager = [[NIMSDK sharedSDK] qchatChannelManager];
NIMQChatGetExistingChannelBlackWhiteRolesParam * param = [[NIMQChatGetExistingChannelBlackWhiteRolesParam alloc] init];
param.serverId = 123456;
param.channelId = 121212;
// 白名单
param.type = NIMQChatQChatChannelMemberRoleTypeWhite;
param.roleIds = @[@"111", @"222", @"333"];
[qchatChannelManager getExistingChannelBlackWhiteRoles:param
completion:^(NSError *__nullable error, NIMQChatGetExistingChannelBlackWhiteRolesResult *__nullable roleArray) {
// your code
}];
批量查询 Channel 黑白名单成员列表
此接口可以根据传入的用户账户列表查询出在此频道黑白名单中的账号accid。
- 接口原型
@protocol NIMQChatChannelManager <NSObject>
- /**
* 批量查询频道黑白名单成员列表
*
* @param param 传入参数
* @param completion 结果回调
*/
- (void)getExistingChannelBlackWhiteMembers:(NIMQChatGetExistingChannelBlackWhiteMembersParam *)param
completion:(nullable NIMQChatGetExistingChannelBlackWhiteMembersHandler)completion;
@end
- 示例代码
id<NIMQChatChannelManager> qchatChannelManager = [[NIMSDK sharedSDK] qchatChannelManager];
NIMQChatGetExistingChannelBlackWhiteMembersParam * param = [[NIMQChatGetExistingChannelBlackWhiteMembersParam alloc] init];
param.serverId = 123456;
param.channelId = 121212;
// 添加白名单成员
param.type = NIMQChatQChatChannelMemberRoleTypeWhite;
param.accIds = @[@"yunxin1", @"yunxin2", @"yunxin3"];
[qchatChannelManager getExistingChannelBlackWhiteMembers:param
completion:^(NSError *__nullable error, NIMQChatGetExistingChannelBlackWhiteMembersResult *__nullable memberArray) {
// your code
}];