一、功能描述
注意:说明:
权限组 V2TIMPermissionGroupInfo 包含三要素:社群权限 groupPermission、话题权限 topicPermission、拥有该权限的群成员。如上图所示,不同的权限组可以配置不同的社群权限 groupPermission 和话题权限 topicPermission,并通过添加不同的群成员来实现差异化权限管理。在社群资料 V2TIMGroupInfo 和话题资料 V2TIMTopicInfo 中还可分别设置社群的默认权限和话题的默认权限 defaultPermissions,并且所有群成员都拥有该默认权限。权限组管理规则如下:
·开启权限组功能 需要设置 enablePermissionGroup 为 true,此时 管理员 的能力就失效了,相当于普通群成员;相反设置为 false后,权限组管理功能失效,恢复 管理员 的能力。
·在社群资料 V2TIMGroupInfo 和话题资料 V2TIMTopicInfo 中会自动创建默认的社群权限 defaultPermissions 和话题权限 defaultPermissions,针对所有群成员 everyone 生效(群主除外)。
·权限组 V2TIMPermissionGroupInfo 中的社群权限 groupPermission 可以在 创建权限组 时设置,也可以后续再修改。权限组中的话题权限 topicPermission 需要通过接口 addTopicPermissionToPermissionGroup 添加到权限组中。权限组的社群权限和话题权限只对权限组中的成员有效。
·权限是用 64 位的值来表示,每一位代表一个权限。某一位的值为 0 代表该权限是关闭的,值为 1 代表该权限是打开的。社群和话题权限位对照表如下,例如设置权限组的社群权限值为 5(二进制的 101),那么在权限组中的成员就拥有修改群资料权限和管理权限组资料权限。
·某群成员拥有的权限为默认的 everyone 权限和所在多个权限组中的权限取并集,即只要在一个地方该权限是打开的就有该权限。
·群主始终拥有所有的权限。
| 分类 | 来源 | 说明 |
| 社群默认的权限 | 社群资料 V2TIMGroupInfo 中的 defaultPermissions | 开启权限组功能时有效所有社群成员 everyone 的默认权限群主和拥有修改群资料权限的群成员可以修改 |
| 话题默认的权限 | 话题资料 V2TIMTopicInfo 中的 defaultPermissions | 开启权限组功能时有效所有社群成员 everyone 在该话题的默认权限群主和拥有过管理该话题权限的群成员可以修改 |
| 权限组的社群权限 | 权限组 V2TIMPermissionGroupInfo 中的 groupPermission | 开启权限组功能时有效权限组中的群成员有该权限群主和有管理权限组资料权限的群成员可以修改 |
| 权限组的话题权限 | 通过接口 addTopicPermissionToPermissionGroup 将 topicPermission 添加到 权限组 V2TIMPermissionGroupInfo 中 | 开启权限组功能时有效权限组中的群成员有该权限群主和有管理权限组资料权限的群成员可以修改 |
社群和话题的权限位对照表如下:
| 分类 | 第 几 位 | 名称 | 含义 |
| 社群权限 | 第 0 位 | V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_INFO | 修改群资料权限 |
| | 第 1 位 | V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_MEMBER | 群成员管理权限,包含踢人,进群审核、修改成员资料等。拥有该权限的权限组最多支持 20 个人。 |
| | 第 2 位 | V2TIM_COMMUNITY_PERMISSION_MANAGE_PERMISSION_GROUP_INFO | 管理权限组资料权限 |
| | 第 3 位 | V2TIM_COMMUNITY_PERMISSION_MANAGE_PERMISSION_GROUP_MEMBER | 权限组成员管理权限 |
| | 第 4 位 | V2TIM_COMMUNITY_PERMISSION_MANAGE_TOPIC_IN_COMMUNITY | 话题管理权限,包含创建、修改、删除话题等 |
| | 第 5 位 | V2TIM_COMMUNITY_PERMISSION_MUTE_MEMBER | 对某群成员在社群下所有话题的禁言权限 |
| | 第 6 位 | V2TIM_COMMUNITY_PERMISSION_SEND_MESSAGE | 群成员在社群下所有话题的发消息权限 |
| | 第 7 位 | V2TIM_COMMUNITY_PERMISSION_AT_ALL | 在社群下所有话题发 at all 消息权限 |
| | 第 8 位 | V2TIM_COMMUNITY_PERMISSION_GET_HISTORY_MESSAGE | 在社群下所有话题拉取入群前的历史消息权限 |
| | 第 9 位 | V2TIM_COMMUNITY_PERMISSION_REVOKE_OTHER_MEMBER_MESSAGE | 在社群下所有话题撤回他人消息权限 |
| | 第 10 位 | V2TIM_COMMUNITY_PERMISSION_BAN_MEMBER | 封禁社群成员权限 |
| 话题权限 | 第 0 位 | V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC | 管理当前话题的权限,包括修改当前话题的资料、删除当前话题 |
| | 第 1 位 | V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC_PERMISSION | 在当前话题中管理话题权限,包括添加、修改、移除话题权限 |
| | 第 2 位 | V2TIM_TOPIC_PERMISSION_MUTE_MEMBER | 在当前话题中禁言成员权限 |
| | 第 3 位 | V2TIM_TOPIC_PERMISSION_SEND_MESSAGE | 在当前话题中发消息权限 |
| | 第 4 位 | V2TIM_TOPIC_PERMISSION_GET_HISTORY_MESSAGE | 在当前话题中拉取入群前的历史消息权限 |
| | 第 5 位 | V2TIM_TOPIC_PERMISSION_REVOKE_OTHER_MEMBER_MESSAGE | 在当前话题中撤回他人消息权限 |
| | 第 6 位 | V2TIM_TOPIC_PERMISSION_AT_ALL | 在当前话题中发消息时有 at all 权限 |
二、场景示例
用一个场景来介绍一下权限组的使用流程。一个运动类的社群下有 3 个话题分别是【重要通知】、【篮球】、【足球】。所有成员拥有在【重要通知】话题中拉取加入社群前的历史消息权限,在【篮球】、【足球】话题中发消息的权限。成员 a 拥有修改社群资料、管理群成员、在【重要通知】话题中发送消息的权限;成员 b 和 c 拥有在【篮球】、【足球】话题下禁言成员的权限。
使用流程如下:
1. 这一点非常重要:在社群中开启权限组功能,设置 enablePermissionGroup 为 true,也可以放到最后一步操作。
2. 把社群的 everyone 权限全部关闭即 defaultPermissions 设置为 0,所有成员都没有社群维度的任何权限。
3. 把【重要通知】话题的 everyone 权限 defaultPermissions 设置为 16(二进制的 10000)即V2TIM_TOPIC_PERMISSION_GET_HISTORY_MESSAGE ,把【篮球】、【足球】话题的 everyone 权限 defaultPermissions 设置为 8(二进制的 1000)即 V2TIM_TOPIC_PERMISSION_SEND_MESSAGE ,所有成员都可以【重要通知】话题中拉取加入社群前的历史消息,在【篮球】、【足球】话题中发消息。
4. 创建名为“社群管理”的权限组,设置社群权限 groupPermission 为 3(二进制值 11),即权限“或”运算的值V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_INFO | V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_MEMBER ,并添加【重要通知】话题的发消息权限 topicPermission 为 8(二进制的1000)V2TIM_TOPIC_PERMISSION_SEND_MESSAGE,群成员 a 被 添加到该权限组 后就拥有了修改社群资料、管理群成员、在【重要通知】话题中发送消息的权限。
5. 创建名为“话题管理”的权限组,关闭所有社群权限,设置 groupPermission 为 0,并添加【篮球】、【足球】话题禁言成员的权限 topicPermission 为 4(二进制的100)V2TIM_TOPIC_PERMISSION_MUTE_MEMBER,群成员 b 和群成员 c 被 添加到该权限组 后就拥有了在【篮球】、【足球】话题禁言成员的权限。
四、开启/关闭权限组功能
群组可以通过管理员或者权限组来管理,两种方式选其一。开启了权限组功能后,管理员的角色就失效了,相当于普通群成员;关闭了权限组功能后,管理员的能力恢复。
设置 enablePermissionGroup (Java / Swift / Objective-C / C++ / Dart) 来开启/关闭权限组功能。开启后,管理员的能力失效;关闭后,管理员的能力恢复。
示例代码如下:
JavaSwiftObjective-CC++DartV2TIMGroupInfo groupInfo = new V2TIMGroupInfo();groupInfo.setGroupID("需要开启权限组功能的社群 ID");groupInfo.setEnablePermissionGroup(true);V2TIMManager.getGroupManager().setGroupInfo(groupInfo, new V2TIMCallback() { @Override public void onSuccess() { // 开启权限组功能成功 } @Override public void onError(int code, String desc) { // 开启权限组功能失败 }});// 群事件监听V2TIMManager.getInstance().addGroupListener(new V2TIMGroupListener() { @Override public void onGroupInfoChanged(String groupID, List<V2TIMGroupChangeInfo> changeInfos) { // 群资料更新回调 }});let groupInfo = V2TIMGroupInfo()groupInfo.groupID = "groupID"groupInfo.enablePermissionGroup = trueV2TIMManager.shared.setGroupInfo(info: groupInfo) { print( "setGroupInfo succ")} fail: { code, desc in print( "setGroupInfo fail, \\(code), \\(desc)")}V2TIMManager.shared.addGroupListener(listener: self)func onGroupInfoChanged(groupID: String, changeInfoList: Array<V2TIMGroupChangeInfo>) { print( "groupID:\\(groupID), changeInfoList:\\(changeInfoList)")}V2TIMGroupInfo *info = [[V2TIMGroupInfo alloc] init];info.groupID = @"需要开启权限组功能的社群 ID";info.enablePermissionGroup = YES;[[V2TIMManager sharedInstance] setGroupInfo:info succ:^{ // 开启权限组功能成功} fail:^(int code, NSString *msg) { // 开启权限组功能失败}];// 群事件监听[[V2TIMManager sharedInstance] addGroupListener:self];- (void)onGroupInfoChanged:(NSString *)groupID changeInfoList:(NSArray<V2TIMGroupChangeInfo *> *)changeInfoList { // 群资料更新回调}V2TIMGroupInfo info;info.groupID = "需要开启权限组功能的社群 ID";info.enablePermissionGroup = true;info.modifyFlag |= (uint32_t)V2TIM_GROUP_INFO_MODIFY_FLAG_ENABLE_PERMISSION_GROUP;class TestCallBack : public V2TIMValueCallback<V2TIMString> { void OnSuccess(const V2TIMString &value) override { // 开启权限组功能成功 } void OnError(int error_code, const V2TIMString &error_message) override { // 开启权限组功能失败 }};auto *callback = new TestCallBack;V2TIMManager::GetInstance()->GetGroupManager()->SetGroupInfo(info, callback);// 群事件监听class GroupListener final : public V2TIMGroupListener {public: GroupListener() = default; ~GroupListener() override = default; void OnGroupInfoChanged(const V2TIMString &groupID, const V2TIMGroupChangeInfoVector &changeInfos) override { // 群资料更新通知 }};GroupListener groupListener;V2TIMManager::GetInstance()->AddGroupListener(&groupListener);final groupInfo = V2TimGroupInfo( groupID: "需要开启权限组功能的社群 ID", groupType: GroupType.Community, isEnablePermissionGroup: true,);final result = await TencentImSDKPlugin.v2TIMManager .getGroupManager() .setGroupInfo(info: groupInfo);if (result.code == 0) { // 开启权限组功能成功} else { // 开启权限组功能失败,result.code、result.desc}// 群事件监听TencentImSDKPlugin.v2TIMManager.addGroupListener( listener: V2TimGroupListener( onGroupInfoChanged: (String groupID, List<V2TimGroupChangeInfo?> changeInfos) { // 群资料更新回调 }, ),);
五、社群默认权限
群主和有修改群资料权限的成员可以设置 V2TIMGroupInfo 中的 defaultPermissions (Java / Swift / Objective-C / C++ / Dart) 修改社群的默认权限,默认权限对所有群成员 everyone 生效(群主除外)。
示例代码如下:
JavaSwiftObjective-CC++Dart// 假如需求是设置所有群成员默认在所有话题下可以发消息以及可以拉取加入社群前的历史消息,其他权限关闭long communityPermission = V2TIMPermissionGroupInfo.V2TIM_COMMUNITY_PERMISSION_SEND_MESSAGE | V2TIMPermissionGroupInfo.V2TIM_COMMUNITY_PERMISSION_GET_HISTORY_MESSAGE;V2TIMGroupInfo groupInfo = new V2TIMGroupInfo();groupInfo.setGroupID("需要修改的社群 ID");groupInfo.setDefaultPermissions(communityPermission);V2TIMManager.getGroupManager().setGroupInfo(groupInfo, new V2TIMCallback() { @Override public void onSuccess() { // 设置默认权限成功 } @Override public void onError(int code, String desc) { // 设置默认权限失败 }});// 群组资料修改通知V2TIMManager.getInstance().addGroupListener(new V2TIMGroupListener() { @Override public void onGroupInfoChanged(String groupID, List<V2TIMGroupChangeInfo> changeInfos) { // 群资料更新回调 }});let groupInfo = V2TIMGroupInfo()groupInfo.groupID = "groupID"groupInfo.enablePermissionGroup = truegroupInfo.defaultPermissions = V2TIMCommunityPermissionValue.V2TIM_COMMUNITY_PERMISSION_SEND_MESSAGE.rawValue | V2TIMCommunityPermissionValue.V2TIM_COMMUNITY_PERMISSION_GET_HISTORY_MESSAGE.rawValue;V2TIMManager.shared.setGroupInfo(info: groupInfo) { print( "setGroupInfo succ")} fail: { code, desc in print( "setGroupInfo fail, \\(code), \\(desc)")}V2TIMManager.shared.addGroupListener(listener: self)func onGroupInfoChanged(groupID: String, changeInfoList: Array<V2TIMGroupChangeInfo>) { print( "groupID:\\(groupID), changeInfoList:\\(changeInfoList)")}// 假如需求是设置所有群成员默认在所有话题下可以发消息以及可以拉取加入社群前的历史消息,其他权限关闭V2TIMGroupInfo *info = [[V2TIMGroupInfo alloc] init];info.groupID = @"需要修改的社群 ID";info.defaultPermissions = V2TIM_COMMUNITY_PERMISSION_SEND_MESSAGE | V2TIM_COMMUNITY_PERMISSION_GET_HISTORY_MESSAGE;[[V2TIMManager sharedInstance] setGroupInfo:info succ:^{ // 设置默认权限成功} fail:^(int code, NSString *msg) { // 设置默认权限失败}];// 群事件监听[[V2TIMManager sharedInstance] addGroupListener:self];- (void)onGroupInfoChanged:(NSString *)groupID changeInfoList:(NSArray<V2TIMGroupChangeInfo *> *)changeInfoList { // 群资料更新回调}// 假如需求是设置所有群成员默认在所有话题下可以发消息以及可以拉取加入社群前的历史消息,其他权限关闭V2TIMGroupInfo info;info.groupID = "需要修改的社群 ID";info.modifyFlag |= (uint32_t)V2TIM_GROUP_INFO_MODIFY_FLAG_DEFAULT_PERMISSIONS;info.defaultPermissions = V2TIM_COMMUNITY_PERMISSION_SEND_MESSAGE | V2TIM_COMMUNITY_PERMISSION_GET_HISTORY_MESSAGE;class TestCallBack : public V2TIMValueCallback<V2TIMString> { void OnSuccess(const V2TIMString &value) override { // 设置默认权限成功 } void OnError(int error_code, const V2TIMString &error_message) override { // 设置默认权限失败 }};auto *callback = new TestCallBack;V2TIMManager::GetInstance()->GetGroupManager()->SetGroupInfo(info, callback);// 群事件监听class GroupListener final : public V2TIMGroupListener {public: GroupListener() = default; ~GroupListener() override = default; void OnGroupInfoChanged(const V2TIMString &groupID, const V2TIMGroupChangeInfoVector &changeInfos) override { // 群资料更新通知 }};GroupListener groupListener;V2TIMManager::GetInstance()->AddGroupListener(&groupListener);// 假如需求是设置所有群成员默认在所有话题下可以发消息以及可以拉取加入社群前的历史消息,其他权限关闭final int communityPermission = V2TimPermissionGroupInfo.V2TIM_COMMUNITY_PERMISSION_SEND_MESSAGE | V2TimPermissionGroupInfo.V2TIM_COMMUNITY_PERMISSION_GET_HISTORY_MESSAGE;final groupInfo = V2TimGroupInfo( groupID: "需要修改的社群 ID", groupType: GroupType.Community, defaultPermissions: communityPermission,);final result = await TencentImSDKPlugin.v2TIMManager .getGroupManager() .setGroupInfo(info: groupInfo);if (result.code == 0) { // 设置默认权限成功} else { // 设置默认权限失败,result.code、result.desc}// 群资料修改通知TencentImSDKPlugin.v2TIMManager.addGroupListener( listener: V2TimGroupListener( onGroupInfoChanged: (String groupID, List<V2TimGroupChangeInfo?> changeInfos) { // 群资料更新回调 }, ),);
六、创建权限组
群主和有管理权限组资料权限的成员可以调用 createPermissionGroupInCommunity (Java / Swift / Objective-C / C++ / Dart) 创建权限组,默认最多创建 20 个权限组。
示例代码如下:
JavaSwiftObjective-CC++DartV2TIMPermissionGroupInfo v2TIMPermissionGroupInfo = new V2TIMPermissionGroupInfo();v2TIMPermissionGroupInfo.setGroupID("需要创建权限组的社群 ID");v2TIMPermissionGroupInfo.setPermissionGroupID("权限组 ID,可不填或者自定义");v2TIMPermissionGroupInfo.setPermissionGroupName("权限组名称");v2TIMPermissionGroupInfo.setCustomData("权限组自定义字符串");// 该权限组的成员具有【修改群资料权限】和【群成员管理权限】long communityPermission = V2TIMPermissionGroupInfo.V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_INFO | V2TIMPermissionGroupInfo.V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_MEMBER;v2TIMPermissionGroupInfo.setGroupPermission(communityPermission);V2TIMManager.getCommunityManager().createPermissionGroupInCommunity(v2TIMPermissionGroupInfo, new V2TIMValueCallback<String>() { @Override public void onSuccess(String permissionGroupID) { // 创建权限组成功 } @Override public void onError(int code, String desc) { // 创建权限组失败 }});// 社群群事件监听V2TIMManager.getCommunityManager().addCommunityListener(new V2TIMCommunityListener() { @Override public void onCreatePermissionGroup(String groupID, V2TIMPermissionGroupInfo permissionGroupInfo) { // 权限组创建通知 }});let permissionGroupInfo = V2TIMPermissionGroupInfo();permissionGroupInfo.groupID = "groupID";permissionGroupInfo.permissionGroupID = "";permissionGroupInfo.permissionGroupName = "permissionGroupNameSwift";permissionGroupInfo.customData = "customDataSwift";permissionGroupInfo.groupPermission = V2TIMCommunityPermissionValue.V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_INFO.rawValue;V2TIMManager.shared.createPermissionGroupInCommunity(permissionGroupInfo: permissionGroupInfo) { permissionGroupID in print( "createPermissionGroupInCommunity succ, \\(permissionGroupID)")} fail: { code, desc in print( "createPermissionGroupInCommunity fail, \\(code), \\(desc)")}V2TIMPermissionGroupInfo *permissionGroupInfo = [[V2TIMPermissionGroupInfo alloc] init];permissionGroupInfo.groupID = @"需要创建权限组的社群 ID";permissionGroupInfo.permissionGroupID = @"权限组 ID,可不填或者自定义";permissionGroupInfo.permissionGroupName = @"权限组名称";// 该权限组的成员具有【修改群资料权限】和【群成员管理权限】permissionGroupInfo.groupPermission = V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_INFO | V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_MEMBER;permissionGroupInfo.customData = @"权限组自定义字符串";[[V2TIMManager sharedInstance] createPermissionGroupInCommunity:permissionGroupInfo succ:^(NSString *permissionGroupID) { // 创建权限组成功} fail:^(int code, NSString *desc) { // 创建权限组失败}];// 社群事件监听[[V2TIMManager sharedInstance] addCommunityListener:self];- (void)onCreatePermissionGroup:(NSString *)groupID permissionGroupInfo:(V2TIMPermissionGroupInfo *)permissionGroupInfo { // 权限组创建通知}V2TIMPermissionGroupInfo permissionGroupInfo;permissionGroupInfo.groupID = "需要创建权限组的社群 ID";permissionGroupInfo.permissionGroupID = "权限组 ID,可不填或者自定义";permissionGroupInfo.permissionGroupName = "权限组名称";permissionGroupInfo.customData = "权限组自定义字符串";// 该权限组的成员具有【修改群资料权限】和【群成员管理权限】permissionGroupInfo.groupPermission = V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_INFO | V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_MEMBER;class TestCallBack : public V2TIMValueCallback<V2TIMString> { void OnSuccess(const V2TIMString &value) override { // 创建权限组成功 } void OnError(int error_code, const V2TIMString &error_message) override { // 创建权限组失败 }};auto *callback = new TestCallBack;V2TIMManager::GetInstance()->GetCommunityManager()->CreatePermissionGroupInCommunity(permissionGroupInfo, callback); // 社群事件监听class CommunityListener final : public V2TIMCommunityListener {public: CommunityListener() = default; ~CommunityListener() override = default; void OnCreatePermissionGroup(const V2TIMString &groupID, const V2TIMPermissionGroupInfo &permissionGroupInfo) override { // 权限组创建通知 }};CommunityListener communityListener;V2TIMManager::GetInstance()->GetCommunityManager()->AddCommunityListener(&communityListener);// 该权限组的成员具有【修改群资料权限】和【群成员管理权限】final int communityPermission = V2TimPermissionGroupInfo.V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_INFO | V2TimPermissionGroupInfo.V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_MEMBER;final info = V2TimPermissionGroupInfo( groupID: "需要创建权限组的社群 ID", permissionGroupID: "权限组 ID,可不填或者自定义", permissionGroupName: "权限组名称", customData: "权限组自定义字符串", groupPermission: communityPermission,);final result = await TencentImSDKPlugin.v2TIMManager .getCommunityManager() .createPermissionGroupInCommunity(info: info);if (result.code == 0) { // 创建权限组成功,result.data 为权限组 ID} else { // 创建权限组失败,result.code、result.desc}// 社群事件监听TencentImSDKPlugin.v2TIMManager.getCommunityManager().addCommunityListener( listener: V2TimCommunityListener( onCreatePermissionGroup: (String groupID, V2TimPermissionGroupInfo permissionGroupInfo) { // 权限组创建通知 }, ),);
七、删除权限组
群主和有管理权限组资料权限的成员可以调用 deletePermissionGroupFromCommunity (Java / Swift / Objective-C / C++ / Dart) 删除权限组。
示例代码如下:
JavaSwiftObjective-CC++DartList<String> deleteList = new ArrayList<>();deleteList.add("权限组 ID1");deleteList.add("权限组 ID2");V2TIMManager.getCommunityManager().deletePermissionGroupFromCommunity("需要删除权限组的社群 ID", deleteList, new V2TIMValueCallback<List<V2TIMPermissionGroupOperationResult>>() { @Override public void onSuccess(List<V2TIMPermissionGroupOperationResult> results) { // 删除成功,results 为每个权限组的操作结果 } @Override public void onError(int code, String desc) { // 删除失败 }});// 社群群事件监听V2TIMManager.getCommunityManager().addCommunityListener(new V2TIMCommunityListener() { @Override public void onDeletePermissionGroup(String groupID, List<String> permissionGroupIDList) { // 权限组删除通知 }});V2TIMManager.shared.deletePermissionGroupFromCommunity(groupID: "groupID", permissionGroupIDList: ["permissionGroupID1","permissionGroupID2"]) { resultList in resultList.forEach { item in // V2TIMPermissionGroupOperationResult print( "\\(item.description)") }} fail: { code, desc in print( "getSpecifiedPermissionGroupList fail, \\(code), \\(desc)")}V2TIMManager.shared.addCommunityListener(listener: self)func onDeletePermissionGroup(groupID: String, permissionGroupIDList: Array<String>) { print( "groupID:\\(groupID), permissionGroupIDList:\\(permissionGroupIDList)")}NSMutableArray *deleteList = [NSMutableArray array];[deleteList addObject:@"权限组 ID1"];[deleteList addObject:@"权限组 ID2"];[[V2TIMManager sharedInstance] deletePermissionGroupFromCommunity:@"需要删除权限组的社群 ID" permissionGroupIDList:deleteList succ:^(NSMutableArray<V2TIMPermissionGroupOperationResult *> *resultList) { // 删除成功,resultList 为每个权限组的操作结果} fail:^(int code, NSString *desc) { // 删除失败}];// 社群事件监听[[V2TIMManager sharedInstance] addCommunityListener:self];- (void)onDeletePermissionGroup:(NSString *)groupID permissionGroupIDList:(NSArray<NSString *> *)permissionGroupIDList { // 权限组删除通知}V2TIMStringVector permissionGroupIDList;permissionGroupIDList.PushBack("权限组 ID1");permissionGroupIDList.PushBack("权限组 ID2");class TestCallBack : public V2TIMValueCallback<V2TIMPermissionGroupOperationResultVector> { void OnSuccess(const V2TIMPermissionGroupOperationResultVector &value) override { // 删除成功,results 为每个权限组的操作结果 } void OnError(int error_code, const V2TIMString &error_message) override { // 删除失败 }};auto *callback = new TestCallBack;V2TIMManager::GetInstance()->GetCommunityManager()->DeletePermissionGroupFromCommunity("需要删除权限组的社群 ID", permissionGroupIDList, callback);// 社群事件监听class CommunityListener final : public V2TIMCommunityListener {public: CommunityListener() = default; ~CommunityListener() override = default; void OnDeletePermissionGroup(const V2TIMString &groupID, const V2TIMStringVector &permissionGroupIDList) override { // 权限组删除通知 }};CommunityListener communityListener;V2TIMManager::GetInstance()->GetCommunityManager()->AddCommunityListener(&communityListener);final result = await TencentImSDKPlugin.v2TIMManager .getCommunityManager() .deletePermissionGroupFromCommunity( groupID: "需要删除权限组的社群 ID", permissionGroupIDList: ["权限组 ID1", "权限组 ID2"],);if (result.code == 0) { // 删除成功,result.data 为每个权限组的操作结果} else { // 删除失败,result.code、result.desc}// 社群事件监听TencentImSDKPlugin.v2TIMManager.getCommunityManager().addCommunityListener( listener: V2TimCommunityListener( onDeletePermissionGroup: (String groupID, List<String> permissionGroupIDList) { // 权限组删除通知 }, ),);
八、修改权限组
群主和有管理权限组资料权限的成员可以调用 modifyPermissionGroupInfoInCommunity (Java / Swift / Objective-C / C++ / Dart) 修改权限组的名称、权限、自定义字段。
示例代码如下:
JavaSwiftObjective-CC++DartV2TIMPermissionGroupInfo v2TIMPermissionGroupInfo = new V2TIMPermissionGroupInfo();v2TIMPermissionGroupInfo.setGroupID("需要修改权限组的社群 ID"); // 必填v2TIMPermissionGroupInfo.setPermissionGroupID("需要修改的权限组 ID"); // 必填v2TIMPermissionGroupInfo.setPermissionGroupName("需要修改的权限组名称");// 该权限组的成员具有【管理权限组资料权限】和【权限组成员管理权限】long communityPermission = V2TIMPermissionGroupInfo.V2TIM_COMMUNITY_PERMISSION_MANAGE_PERMISSION_GROUP_INFO | V2TIMPermissionGroupInfo.V2TIM_COMMUNITY_PERMISSION_MANAGE_PERMISSION_GROUP_MEMBER;v2TIMPermissionGroupInfo.setGroupPermission(communityPermission);v2TIMPermissionGroupInfo.setCustomData("需要修改的自定义字符串");V2TIMManager.getCommunityManager().modifyPermissionGroupInfoInCommunity(v2TIMPermissionGroupInfo, new V2TIMCallback() { @Override public void onSuccess() { // 修改权限组资料成功 } @Override public void onError(int code, String desc) { // 修改权限组资料失败 }});// 社群群事件监听V2TIMManager.getCommunityManager().addCommunityListener(new V2TIMCommunityListener() { @Override public void onChangePermissionGroupInfo(String groupID, V2TIMPermissionGroupInfo permissionGroupInfo) { // 权限组更新通知 }});let permissionGroupInfo = V2TIMPermissionGroupInfo();permissionGroupInfo.groupID = "groupID";permissionGroupInfo.permissionGroupID = "@";permissionGroupInfo.permissionGroupName = "permissionGroupNameModifiedSwift";permissionGroupInfo.customData = "customDataiModifedSwift";permissionGroupInfo.groupPermission = V2TIMCommunityPermissionValue.V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_INFO.rawValue | V2TIMCommunityPermissionValue.V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_MEMBER.rawValue;V2TIMManager.shared.modifyPermissionGroupInfoInCommunity(permissionGroupInfo: permissionGroupInfo) { print( "modifyPermissionGroupInfoInCommunity succ, \\(permissionGroupInfo.description)")} fail: { code, desc in print( "modifyPermissionGroupInfoInCommunity fail, \\(code), \\(desc)")}V2TIMManager.shared.addCommunityListener(listener: self)func onChangePermissionGroupInfo(groupID: String, permissionGroupInfo: V2TIMPermissionGroupInfo) { print( "groupID:\\(groupID), permissionGroupInfo:\\(permissionGroupInfo.description)")}V2TIMPermissionGroupInfo *permissionGroupInfo = [[V2TIMPermissionGroupInfo alloc] init];permissionGroupInfo.groupID = @"需要修改权限组的社群 ID"; // 必填permissionGroupInfo.permissionGroupID = @"需要修改的权限组 ID"; // 必填permissionGroupInfo.permissionGroupName = @"需要修改的权限组名称";permissionGroupInfo.customData = @"需要修改的自定义字符串";// 该权限组的成员具有【管理权限组资料权限】和【权限组成员管理权限】permissionGroupInfo.groupPermission = V2TIM_COMMUNITY_PERMISSION_MANAGE_PERMISSION_GROUP_INFO | V2TIM_COMMUNITY_PERMISSION_MANAGE_PERMISSION_GROUP_MEMBER;[[V2TIMManager sharedInstance] modifyPermissionGroupInfoInCommunity:permissionGroupInfo succ:^{ // 修改权限组资料成功} fail:^(int code, NSString *desc) { // 修改权限组资料失败}];// 社群事件监听[[V2TIMManager sharedInstance] addCommunityListener:self];- (void)onChangePermissionGroupInfo:(NSString *)groupID permissionGroupInfo:(V2TIMPermissionGroupInfo *)permissionGroupInfo { // 权限组更新通知}V2TIMPermissionGroupInfo modifyInfo;modifyInfo.groupID = "需要修改权限组的社群 ID"; // 必填modifyInfo.permissionGroupID = "需要修改的权限组 ID"; // 必填modifyInfo.permissionGroupName = "需要修改的权限组名称";modifyInfo.customData = "需要修改的自定义字符串";// 该权限组的成员具有【管理权限组资料权限】和【权限组成员管理权限】modifyInfo.groupPermission = V2TIM_COMMUNITY_PERMISSION_MANAGE_PERMISSION_GROUP_INFO | V2TIM_COMMUNITY_PERMISSION_MANAGE_PERMISSION_GROUP_MEMBER;modifyInfo.modifyFlag = V2TIMPermissionGroupInfoModifyFlag::V2TIM_PERMISSION_MODIFY_FLAG_NAME | V2TIMPermissionGroupInfoModifyFlag::V2TIM_PERMISSION_MODIFY_FLAG_GROUP_PERMISSION | V2TIMPermissionGroupInfoModifyFlag::V2TIM_PERMISSION_MODIFY_FLAG_CUSTOM_DATA;class TestCallBack : public V2TIMValueCallback<V2TIMString> { void OnSuccess(const V2TIMString &value) override { // 修改权限组资料成功 } void OnError(int error_code, const V2TIMString &error_message) override { // 修改权限组资料失败 }};auto *callback = new TestCallBack; V2TIMManager::GetInstance()->GetCommunityManager()->ModifyPermissionGroupInfoInCommunity(modifyInfo, new CppAPITestImpl::Callback("ModifyPermissionGroupInfoInCommunity"));// 社群事件监听class CommunityListener final : public V2TIMCommunityListener {public: CommunityListener() = default; ~CommunityListener() override = default; void OnChangePermissionGroupInfo(const V2TIMString &groupID, const V2TIMPermissionGroupInfo &permissionGroupInfo) override { // 权限组更新通知 }};CommunityListener communityListener;V2TIMManager::GetInstance()->GetCommunityManager()->AddCommunityListener(&communityListener);final int communityPermission = V2TimPermissionGroupInfo.V2TIM_COMMUNITY_PERMISSION_MANAGE_PERMISSION_GROUP_INFO | V2TimPermissionGroupInfo.V2TIM_COMMUNITY_PERMISSION_MANAGE_PERMISSION_GROUP_MEMBER;final info = V2TimPermissionGroupInfo( groupID: "需要修改权限组的社群 ID", // 必填 permissionGroupID: "需要修改的权限组 ID", // 必填 permissionGroupName: "需要修改的权限组名称", customData: "需要修改的自定义字符串", groupPermission: communityPermission,);final result = await TencentImSDKPlugin.v2TIMManager .getCommunityManager() .modifyPermissionGroupInfoInCommunity(info: info);if (result.code == 0) { // 修改权限组资料成功} else { // 修改权限组资料失败,result.code、result.desc}// 社群事件监听TencentImSDKPlugin.v2TIMManager.getCommunityManager().addCommunityListener( listener: V2TimCommunityListener( onChangePermissionGroupInfo: (String groupID, V2TimPermissionGroupInfo permissionGroupInfo) { // 权限组更新通知 }, ),);
十、获取权限组列表
群成员可以调用 getPermissionGroupListInCommunity (Java / Swift / Objective-C / C++ / Dart) 获取权限组列表。当参数 permissionGroupIDList 非空时,表示获取指定的权限组列表;当 permissionGroupIDList 为空时,表示获取所有的权限组列表。
示例代码如下:
JavaSwiftObjective-CC++DartList<String> permissionGroupIDList = new ArrayList<>();// permissionGroupIDList 列表有值,表示获取指定的权限组列表;permissionGroupIDList 为空,表示获取所有的权限组列表permissionGroupIDList.add("需要获取的权限组 ID");V2TIMManager.getCommunityManager().getPermissionGroupListInCommunity("需要获取权限组列表的社群 ID", permissionGroupIDList, new V2TIMValueCallback<List<V2TIMPermissionGroupInfoResult>>() { @Override public void onSuccess(List<V2TIMPermissionGroupInfoResult> resultList) { // 获取权限组列表成功 } @Override public void onError(int code, String desc) { // 获取权限组列表失败 }});V2TIMManager.shared.getPermissionGroupListInCommunity(groupID: "groupID", permissionGroupIDList: []) { resultList in resultList.forEach { item in // V2TIMPermissionGroupInfoResult print( "\\(item.description)") }} fail: { code, desc in print( "getAllPermissionGroupList fail, \\(code), \\(desc)")}NSMutableArray *permissionGroupIDList = [NSMutableArray array];// permissionGroupIDList 列表有值,表示获取指定的权限组列表;permissionGroupIDList 为空,表示获取所有的权限组列表[permissionGroupIDList addObject:@"需要获取的权限组 ID"];[[V2TIMManager sharedInstance] getPermissionGroupListInCommunity:@"需要获取权限组列表的社群 ID" permissionGroupIDList:permissionGroupIDList succ:^(NSMutableArray<V2TIMPermissionGroupInfoResult *> *resultList) { // 获取权限组列表成功} fail:^(int code, NSString *desc) { // 获取权限组列表失败}];V2TIMStringVector permissionGroupIDList;// permissionGroupIDList 列表有值,表示获取指定的权限组列表;permissionGroupIDList 为空,表示获取所有的权限组permissionGroupIDList.PushBack("需要获取的权限组 ID");class TestCallBack : public V2TIMValueCallback<V2TIMPermissionGroupInfoResultVector> { void OnSuccess(const V2TIMPermissionGroupInfoResultVector &value) override { // 获取权限组列表成功 } void OnError(int error_code, const V2TIMString &error_message) override { // 获取权限组列表失败 }};auto *callback = new TestCallBack;V2TIMManager::GetInstance()->GetCommunityManager()->GetPermissionGroupListInCommunity("需要获取权限组列表的社群 ID", permissionGroupIDList, callback);// permissionGroupIDList 列表有值,表示获取指定的权限组列表;为空,表示获取所有的权限组列表final result = await TencentImSDKPlugin.v2TIMManager .getCommunityManager() .getPermissionGroupListInCommunity( groupID: "需要获取权限组列表的社群 ID", permissionGroupIDList: ["需要获取的权限组 ID"],);if (result.code == 0) { // 获取权限组列表成功,result.data 为权限组列表} else { // 获取权限组列表失败,result.code、result.desc}
十一、获取已加入的权限组列表
社群成员可以调用 getJoinedPermissionGroupListInCommunity (Java / Swift / Objective-C / C++ / Dart) 获取已加入的权限组列表。
示例代码如下:
JavaSwiftObjective-CC++DartV2TIMManager.getCommunityManager().getJoinedPermissionGroupListInCommunity("需要获取权限组列表的社群 ID", new V2TIMValueCallback<List<V2TIMPermissionGroupInfoResult>>() { @Override public void onSuccess(List<V2TIMPermissionGroupInfoResult> resultList) { // 获取已加入的权限组成功 } @Override public void onError(int code, String desc) { // 获取已加入的权限组失败 }});V2TIMManager.shared.getJoinedPermissionGroupListInCommunity(groupID: "groupID") { resultList in resultList.forEach { item in // V2TIMPermissionGroupInfoResult print( "\\(item.description)") }} fail: { code, desc in print( "getJoinedPermissionGroupListInCommunity fail, \\(code), \\(desc)")}[[V2TIMManager sharedInstance] getJoinedPermissionGroupListInCommunity:@"需要获取权限组列表的社群 ID" succ:^(NSMutableArray<V2TIMPermissionGroupInfoResult *> *resultList) { // 获取已加入的权限组成功} fail:^(int code, NSString *desc) { // 获取已加入的权限组失败}];class TestCallBack : public V2TIMValueCallback<V2TIMPermissionGroupInfoResultVector> { void OnSuccess(const V2TIMPermissionGroupInfoResultVector &value) override { // 获取已加入的权限组成功 } void OnError(int error_code, const V2TIMString &error_message) override { // 获取已加入的权限组失败 }};auto *callback = new TestCallBack;V2TIMManager::GetInstance()->GetCommunityManager()->GetJoinedPermissionGroupListInCommunity("需要获取权限组列表的社群 ID", callback);final result = await TencentImSDKPlugin.v2TIMManager .getCommunityManager() .getJoinedPermissionGroupListInCommunity( groupID: "需要获取权限组列表的社群 ID",);if (result.code == 0) { // 获取已加入的权限组成功,result.data 为权限组列表} else { // 获取已加入的权限组失败,result.code、result.desc}
十二、添加权限组成员
群主和拥有权限组成员管理权限的成员可以调用 addCommunityMembersToPermissionGroup (Java / Swift / Objective-C / C++ / Dart) 添加权限组成员,每次最多添加 20 个成员。
示例代码如下:
JavaSwiftObjective-CC++DartList<String> memberList = new ArrayList<>();// 每次最多添加 20 个成员memberList.add("添加群成员1的 userID");memberList.add("添加群成员2的 userID");V2TIMManager.getCommunityManager().addCommunityMembersToPermissionGroup("需要添加权限组群成员的社群 ID", "需要添加权限组群成员的权限组 ID", memberList, new V2TIMValueCallback<List<V2TIMPermissionGroupMemberOperationResult>>() { @Override public void onSuccess(List<V2TIMPermissionGroupMemberOperationResult> resultList) { // 添加成员成功 } @Override public void onError(int code, String desc) { // 添加成员失败 }});// 社群群事件监听V2TIMManager.getCommunityManager().addCommunityListener(new V2TIMCommunityListener() { @Override public void onAddMembersToPermissionGroup(String groupID, String permissionGroupID, List<String> memberIDList) { // 权限组成员添加通知 }});V2TIMManager.shared.addCommunityMembersToPermissionGroup(groupID: "groupID", permissionGroupID: "permissionGroupID", memberList: ["member1", "member2"]) { resultList in resultList.forEach { item in // V2TIMPermissionGroupOperationResult print( "\\(item.description)") }} fail: { code, desc in print( "addCommunityMembersToPermissionGroup fail, \\(code), \\(desc)")}V2TIMManager.shared.addCommunityListener(listener: self)func onAddMembersToPermissionGroup(groupID: String, permissionGroupID: String, memberIDList: Array<String>) { print( "groupID:\\(groupID), permissionGroupID:\\(permissionGroupID), memberIDList:\\(memberIDList)")}NSMutableArray *memberList = [NSMutableArray array];[memberList addObject:@"添加群成员1的 userID"];[memberList addObject:@"添加群成员2的 userID"];[[V2TIMManager sharedInstance] addCommunityMembersToPermissionGroup:@"需要添加权限组群成员的社群 ID" permissionGroupID:@"需要添加权限组群成员的权限组 ID" memberList:memberList succ:^(NSMutableArray<V2TIMPermissionGroupMemberOperationResult *> *resultList) { // 添加成员成功} fail:^(int code, NSString *desc) { // 添加成员失败}];// 社群事件监听[[V2TIMManager sharedInstance] addCommunityListener:self];- (void)onAddMembersToPermissionGroup:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID memberIDList:(NSArray<NSString *> *)memberIDList { // 权限组成员添加通知}V2TIMStringVector memberIDList;memberIDList.PushBack("添加群成员1的 userID");memberIDList.PushBack("添加群成员2的 userID");class TestCallBack : public V2TIMValueCallback<V2TIMPermissionGroupMemberOperationResultVector> { void OnSuccess(const V2TIMPermissionGroupMemberOperationResultVector &value) override { // 添加成员成功 } void OnError(int error_code, const V2TIMString &error_message) override { // 添加成员失败 }};auto *callback = new TestCallBack;V2TIMManager::GetInstance()->GetCommunityManager()->AddCommunityMembersToPermissionGroup("需要添加权限组群成员的社群 ID", "需要添加权限组群成员的权限组 ID", memberIDList, callback);// 社群事件监听class CommunityListener final : public V2TIMCommunityListener {public: CommunityListener() = default; ~CommunityListener() override = default; void OnAddMembersToPermissionGroup(const V2TIMString &groupID, const V2TIMString &permissionGroupID, const V2TIMStringVector &memberIDList) override { // 权限组成员添加通知 }};CommunityListener communityListener;V2TIMManager::GetInstance()->GetCommunityManager()->AddCommunityListener(&communityListener);// 每次最多添加 20 个成员final result = await TencentImSDKPlugin.v2TIMManager .getCommunityManager() .addCommunityMembersToPermissionGroup( groupID: "需要添加权限组群成员的社群 ID", permissionGroupID: "需要添加权限组群成员的权限组 ID", memberList: ["添加群成员1的 userID", "添加群成员2的 userID"],);if (result.code == 0) { // 添加成员成功,result.data 为每个成员的操作结果} else { // 添加成员失败,result.code、result.desc}// 社群事件监听TencentImSDKPlugin.v2TIMManager.getCommunityManager().addCommunityListener( listener: V2TimCommunityListener( onAddMembersToPermissionGroup: (String groupID, String permissionGroupID, List<String> memberIDList) { // 权限组成员添加通知 }, ),);
十三、移除权限组成员
群主和拥有权限组成员管理权限的成员可以调用 removeCommunityMembersFromPermissionGroup (Java / Swift / Objective-C / C++ / Dart) 从权限组中移除群成员。
示例代码如下:
JavaSwiftObjective-CC++DartList<String> memberList = new ArrayList<>();memberList.add("移除群成员1的 userID");memberList.add("移除群成员2的 userID");V2TIMManager.getCommunityManager().removeCommunityMembersFromPermissionGroup("需要移除权限组群成员的社群 ID", "需要移除权限组群成员的权限组 ID", memberList, new V2TIMValueCallback<List<V2TIMPermissionGroupMemberOperationResult>>() { @Override public void onSuccess(List<V2TIMPermissionGroupMemberOperationResult> resultList) { // 移除群成员成功 } @Override public void onError(int code, String desc) { // 移除群成员失败 }});// 社群群事件监听V2TIMManager.getCommunityManager().addCommunityListener(new V2TIMCommunityListener() { @Override public void onRemoveMembersFromPermissionGroup(String groupID, String permissionGroupID, List<String> memberIDList) { // 权限组成员移除通知 }});V2TIMManager.shared.removeCommunityMembersFromPermissionGroup(groupID: "groupID", permissionGroupID: "permissionGroupID", memberList: ["member1,member2"]) { resultList in resultList.forEach { item in // V2TIMPermissionGroupOperationResult print( "\\(item.description)") }} fail: { code, desc in print( "removeCommunityMembersFromPermissionGroup fail, \\(code), \\(desc)")}V2TIMManager.shared.addCommunityListener(listener: self)func onRemoveMembersFromPermissionGroup(groupID: String, permissionGroupID: String, memberIDList: Array<String>) { print( "groupID:\\(groupID), permissionGroupID:\\(permissionGroupID), memberIDList:\\(memberIDList)")}NSMutableArray *memberList = [NSMutableArray array];[memberList addObject:@"移除群成员1的 userID"];[memberList addObject:@"移除群成员2的 userID"];[[V2TIMManager sharedInstance] removeCommunityMembersFromPermissionGroup:@"需要移除权限组群成员的社群 ID" permissionGroupID:@"需要移除权限组群成员的权限组 ID" memberList:memberList succ:^(NSMutableArray<V2TIMPermissionGroupMemberOperationResult *> *resultList) { // 移除群成员成功} fail:^(int code, NSString *desc) { // 移除群成员失败}];// 社群事件监听[[V2TIMManager sharedInstance] addCommunityListener:self];- (void)onRemoveMembersFromPermissionGroup:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID memberIDList:(NSArray<NSString *> *)memberIDList { // 移除权限组成员通知}V2TIMStringVector memberIDList;memberIDList.PushBack("移除群成员1的 userID");memberIDList.PushBack("移除群成员2的 userID");class TestCallBack : public V2TIMValueCallback<V2TIMPermissionGroupMemberOperationResultVector> { void OnSuccess(const V2TIMPermissionGroupMemberOperationResultVector &value) override { // 移除群成员成功 } void OnError(int error_code, const V2TIMString &error_message) override { // 移除群成员失败 }};auto *callback = new TestCallBack;V2TIMManager::GetInstance()->GetCommunityManager()->RemoveCommunityMembersFromPermissionGroup("需要移除权限组群成员的社群 ID", "需要移除权限组群成员的权限组 ID", memberIDList, callback);// 社群事件监听class CommunityListener final : public V2TIMCommunityListener {public: CommunityListener() = default; ~CommunityListener() override = default; void OnRemoveMembersFromPermissionGroup(const V2TIMString &groupID, const V2TIMString &permissionGroupID, const V2TIMStringVector &memberIDList) override { // 权限组成员移除通知 }};CommunityListener communityListener;V2TIMManager::GetInstance()->GetCommunityManager()->AddCommunityListener(&communityListener);final result = await TencentImSDKPlugin.v2TIMManager .getCommunityManager() .removeCommunityMembersFromPermissionGroup( groupID: "需要移除权限组群成员的社群 ID", permissionGroupID: "需要移除权限组群成员的权限组 ID", memberList: ["移除群成员1的 userID", "移除群成员2的 userID"],);if (result.code == 0) { // 移除群成员成功,result.data 为每个成员的操作结果} else { // 移除群成员失败,result.code、result.desc}// 社群事件监听TencentImSDKPlugin.v2TIMManager.getCommunityManager().addCommunityListener( listener: V2TimCommunityListener( onRemoveMembersFromPermissionGroup: (String groupID, String permissionGroupID, List<String> memberIDList) { // 权限组成员移除通知 }, ),);
十四、获取权限组成员列表
调用 getCommunityMemberListInPermissionGroup (Java / Swift / Objective-C / C++ / Dart) 获取权限组中的成员列表,其中参数 nextCursor 为续拉游标,首次拉取时填空字符串,续拉时填上一次调用结果中的返回值。
示例代码如下:
JavaSwiftObjective-CC++DartV2TIMManager.getCommunityManager().getCommunityMemberListInPermissionGroup("需要获取权限组成员的社群 ID", "需要获取权限组成员的权限组 ID", "", new V2TIMValueCallback<V2TIMPermissionGroupMemberInfoResult>() { @Override public void onSuccess(V2TIMPermissionGroupMemberInfoResult result) { // 获取权限组中的成员列表成功,其中 result.getNextCursor() 返回续拉游标,再次调用该接口续拉时填入该返回值 } @Override public void onError(int code, String desc) { // 获取权限组中的成员列表失败 }});V2TIMManager.shared.getCommunityMemberListInPermissionGroup(groupID: "groupID", permissionGroupID: "permissionGroupID", nextCursor: "") { nextCursor, resultList in resultList.forEach { item in // V2TIMGroupMemberFullInfo print( "\\(item.description)") }} fail: { code, desc in print( "getCommunityMemberListInPermissionGroup fail, \\(code), \\(desc)")}[[V2TIMManager sharedInstance] getCommunityMemberListInPermissionGroup:@"需要获取权限组成员的社群 ID" permissionGroupID:@"需要获取权限组成员的权限组 ID" nextCursor:@"" succ:^(NSString *nextCursor, NSMutableArray<V2TIMGroupMemberFullInfo *> *resultList) { // 获取权限组中的成员列表成功,其中 nextCursor 为续拉游标,再次调用该接口续拉时填入该返回值} fail:^(int code, NSString *desc) { // 获取权限组中的成员列表失败}];class TestCallBack : public V2TIMValueCallback<V2TIMPermissionGroupMemberInfoResult> { void OnSuccess(const V2TIMPermissionGroupMemberInfoResult &value) override { // 获取权限组中的成员列表成功,其中 value.nextCursor 返回续拉游标,再次调用该接口续拉时填入该返回值 } void OnError(int error_code, const V2TIMString &error_message) override { // 获取权限组中的成员列表失败 }};auto *callback = new TestCallBack;V2TIMManager::GetInstance()->GetCommunityManager()->GetCommunityMemberListInPermissionGroup("需要获取权限组成员的社群 ID", "需要获取权限组成员的权限组 ID", "", callback);// nextCursor 为续拉游标,首次拉取时填空字符串,续拉时填上一次返回的 nextCursorfinal result = await TencentImSDKPlugin.v2TIMManager .getCommunityManager() .getCommunityMemberListInPermissionGroup( groupID: "需要获取权限组成员的社群 ID", permissionGroupID: "需要获取权限组成员的权限组 ID", nextCursor: "",);if (result.code == 0) { // 获取权限组中的成员列表成功 // result.data?.nextCursor 为续拉游标,再次调用该接口续拉时填入该返回值 // result.data?.memberInfoList 为成员列表} else { // 获取权限组中的成员列表失败,result.code、result.desc}
十六、话题默认权限
群主和拥有话题管理权限的成员可以调用 setTopicInfo (Java / Swift / Objective-C / C++ / Dart) 修改话题的默认权限,该话题的默认权限对所有群成员 everyone 生效(群主除外)。
示例代码如下:
JavaSwiftObjective-CC++Dart// 假设需求为所有社群成员都有在当前话题发消息的权限和拉取加入社群前的在该话题的历史消息权限long topicPermission = V2TIMPermissionGroupInfo.V2TIM_TOPIC_PERMISSION_SEND_MESSAGE | V2TIMPermissionGroupInfo.V2TIM_TOPIC_PERMISSION_GET_HISTORY_MESSAGE;V2TIMTopicInfo topicInfo = new V2TIMTopicInfo();topicInfo.setTopicID("需要设置话题默认权限的话题 ID");topicInfo.setDefaultPermissions(topicPermission);V2TIMManager.getCommunityManager().setTopicInfo(topicInfo, new V2TIMCallback() { @Override public void onSuccess() { // 修改话题默认权限成功 } @Override public void onError(int code, String desc) { // 修改话题默认权限失败 }});// 社群群事件监听V2TIMManager.getCommunityManager().addCommunityListener(new V2TIMCommunityListener() { @Override public void onChangeTopicInfo(String groupID, V2TIMTopicInfo topicInfo) { // 话题信息更新通知 }});let topicInfo = V2TIMTopicInfo()topicInfo.topicID = "topicID";topicInfo.defaultPermissions = V2TIMTopicPermissionValue.V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC.rawValue | V2TIMTopicPermissionValue.V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC_PERMISSION.rawValue;V2TIMManager.shared.setTopicInfo(topicInfo: topicInfo) { print( "modifyPermissionOfTopic succ, \\(topicInfo.description)")} fail: { code, desc in print( "modifyPermissionOfTopic fail, \\(code), \\(desc)")}V2TIMManager.shared.addCommunityListener(listener: self)func onChangeTopicInfo(groupID: String, topicInfo: V2TIMTopicInfo) { print( "groupID:\\(groupID), topicInfo:\\(topicInfo.description), inheritMsgFlag:\\(topicInfo.isInheritMessageReceiveOptionFromCommunity())")}// 假设需求为所有社群成员都有在当前话题发消息的权限和拉取加入社群前的在该话题的历史消息权限V2TIMTopicInfo *info = [[V2TIMTopicInfo alloc] init];info.topicID = @"需要设置话题默认权限的话题 ID";info.defaultPermissions = V2TIM_TOPIC_PERMISSION_SEND_MESSAGE | V2TIM_TOPIC_PERMISSION_GET_HISTORY_MESSAGE;[[V2TIMManager sharedInstance] setTopicInfo:info succ:^{ // 修改话题默认权限成功} fail:^(int code, NSString *desc) { // 修改话题默认权限失败}];// 社群事件监听[[V2TIMManager sharedInstance] addCommunityListener:self];- (void)onChangeTopicInfo:(NSString *)groupID topicInfo:(V2TIMTopicInfo *)topicInfo { // 话题信息更新通知}// 假设需求为所有社群成员都有在当前话题发消息的权限和拉取加入社群前的在该话题的历史消息权限V2TIMTopicInfo topicInfo;topicInfo.topicID = "需要设置话题默认权限的话题 ID";topicInfo.defaultPermissions = V2TIM_TOPIC_PERMISSION_SEND_MESSAGE | V2TIM_TOPIC_PERMISSION_GET_HISTORY_MESSAGE;topicInfo.modifyFlag = V2TIM_COMMUNITY_MODIFY_FLAG_DEFAULT_PERMISSIONS;class TestCallBack : public V2TIMValueCallback<V2TIMString> { void OnSuccess(const V2TIMString &value) override { // 修改话题默认权限成功 } void OnError(int error_code, const V2TIMString &error_message) override { // 修改话题默认权限失败 }};auto *callback = new TestCallBack; V2TIMManager::GetInstance()->GetGroupManager()->SetTopicInfo(topicInfo, callback);// 社群事件监听class CommunityListener final : public V2TIMCommunityListener {public: CommunityListener() = default; ~CommunityListener() override = default; void OnChangeTopicInfo(const V2TIMString &groupID, const V2TIMTopicInfo &topicInfo) override { // 话题信息更新通知 }};CommunityListener communityListener;V2TIMManager::GetInstance()->GetCommunityManager()->AddCommunityListener(&communityListener);// 假设需求为所有社群成员都有在当前话题发消息的权限和拉取加入社群前的在该话题的历史消息权限final int topicPermission = V2TimPermissionGroupInfo.V2TIM_TOPIC_PERMISSION_SEND_MESSAGE | V2TimPermissionGroupInfo.V2TIM_TOPIC_PERMISSION_GET_HISTORY_MESSAGE;final topicInfo = V2TimTopicInfo( topicID: "需要设置话题默认权限的话题 ID", defaultPermissions: topicPermission,);final result = await TencentImSDKPlugin.v2TIMManager .getCommunityManager() .setTopicInfo(topicInfo: topicInfo);if (result.code == 0) { // 修改话题默认权限成功} else { // 修改话题默认权限失败,result.code、result.desc}// 社群事件监听TencentImSDKPlugin.v2TIMManager.getCommunityManager().addCommunityListener( listener: V2TimCommunityListener( onChangeTopicInfo: (String groupID, V2TimTopicInfo topicInfo) { // 话题信息更新通知 }, ),);
十七、添加权限组的话题权限
群主和拥有管理权限组资料权限的成员可以调用 addTopicPermissionToPermissionGroup (Java / Swift / Objective-C / C++ / Dart) 向权限组添加话题权限,话题权限对权限组中的成员生效。
示例代码如下:
JavaSwiftObjective-CC++Dart// 假设需求是在权限组中的成员具有【管理话题1的权限】和【在话题1中禁言成员的权限】,以及【管理话题2的权限】和【在话题2中撤回他人消息的权限】long topicPermission1 = V2TIMPermissionGroupInfo.V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC | V2TIMPermissionGroupInfo.V2TIM_TOPIC_PERMISSION_MUTE_MEMBER;long topicPermission2 = V2TIMPermissionGroupInfo.V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC | V2TIMPermissionGroupInfo.V2TIM_TOPIC_PERMISSION_REVOKE_OTHER_MEMBER_MESSAGE;HashMap<String, Long> topicPermissionMap = new HashMap<>();topicPermissionMap.put("话题1 ID", topicPermission1);topicPermissionMap.put("话题2 ID", topicPermission2);V2TIMManager.getCommunityManager().addTopicPermissionToPermissionGroup("需要添加话题权限的社群 ID", "需要添加话题权限的权限组 ID", topicPermissionMap, new V2TIMValueCallback<List<V2TIMTopicOperationResult>>() { @Override public void onSuccess(List<V2TIMTopicOperationResult> v2TIMTopicOperationResults) { // 添加话题权限成功,参数包含各个话题权限的添加结果 } @Override public void onError(int code, String desc) { // 添加话题权限失败 }});// 社群群事件监听V2TIMManager.getCommunityManager().addCommunityListener(new V2TIMCommunityListener() { @Override public void onAddTopicPermission(String groupID, String permissionGroupID, HashMap<String, Long> topicPermissionMap) { // 添加话题权限通知 }});// 假设需求是在权限组中的成员具有【管理话题1的权限】和【在话题1中禁言成员的权限】以及【管理话题2的权限】和【在话题2中撤回他人消息的权限】let topicPermission1 = V2TIMTopicPermissionValue.V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC.rawValue | V2TIMTopicPermissionValue.V2TIM_TOPIC_PERMISSION_MUTE_MEMBER.rawValuelet topicPermission2 = V2TIMTopicPermissionValue.V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC.rawValue | V2TIMTopicPermissionValue.V2TIM_TOPIC_PERMISSION_REVOKE_OTHER_MEMBER_MESSAGE.rawValuevar topicPermissionMap = [String: NSNumber]()topicPermissionMap["话题1 ID"] = NSNumber(value: topicPermission1)topicPermissionMap["话题2 ID"] = NSNumber(value: topicPermission2)V2TIMManager.shared.addTopicPermissionToPermissionGroup(groupID: "需要添加话题权限的社群 ID", permissionGroupID: "需要添加话题权限的权限组 ID", topicPermissionMap: topicPermissionMap, succ: { resultList in // 添加话题权限成功,参数包含各个话题权限的添加结果}, fail: { code, desc in // 添加话题权限失败})// 社群事件监听V2TIMManager.shared.addCommunityListener(listener: self)func onAddTopicPermission(groupID: String, permissionGroupID: String, topicPermissionMap: [String: NSNumber]) { // 添加话题权限通知}// 假设需求是在权限组中的成员具有【管理话题1的权限】和【在话题1中禁言成员的权限】,以及【管理话题2的权限】和【在话题2中撤回他人消息的权限】uint64_t topicPermission1 = V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC | V2TIM_TOPIC_PERMISSION_MUTE_MEMBER;uint64_t topicPermission2 = V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC | V2TIM_TOPIC_PERMISSION_REVOKE_OTHER_MEMBER_MESSAGE;NSDictionary<NSString *,NSNumber *> *topicPermissionMap = [[NSMutableDictionary alloc] init];[topicPermissionMap setValue:[NSNumber numberWithUnsignedLongLong:topicPermission1] forKey:@"话题1 ID"];[topicPermissionMap setValue:[NSNumber numberWithUnsignedLongLong:topicPermission2] forKey:@"话题2 ID"];[[V2TIMManager sharedInstance] addTopicPermissionToPermissionGroup:@"需要添加话题权限的社群 ID" permissionGroupID:@"需要添加话题权限的权限组 ID" topicPermissionMap:topicPermissionMap succ:^(NSMutableArray<V2TIMTopicOperationResult *> *resultList) { // 添加话题权限成功,参数包含各个话题权限的添加结果} fail:^(int code, NSString *desc) { // 添加话题权限失败}];// 社群事件监听[[V2TIMManager sharedInstance] addCommunityListener:self];- (void)onAddTopicPermission:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID topicPermissionMap:(NSDictionary<NSString *,NSNumber *> *)topicPermissionMap { // 添加话题权限通知}// 假设需求是在权限组中的成员具有【管理话题1的权限】和【在话题1中禁言成员的权限】,以及【管理话题2的权限】和【在话题2中撤回他人消息的权限】V2TIMStringToUint64Map topicPermissionMap;topicPermissionMap.Insert("话题1 ID", V2TIMTopicPermissionValue::V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC | V2TIMTopicPermissionValue::V2TIM_TOPIC_PERMISSION_MUTE_MEMBER);topicPermissionMap.Insert("话题2 ID", V2TIMTopicPermissionValue::V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC | V2TIMTopicPermissionValue::V2TIM_TOPIC_PERMISSION_REVOKE_OTHER_MEMBER_MESSAGE);class TestCallBack : public V2TIMValueCallback<V2TIMTopicOperationResultVector> { void OnSuccess(const V2TIMTopicOperationResultVector &value) override { // 添加话题权限成功,参数包含各个话题权限的添加结果 } void OnError(int error_code, const V2TIMString &error_message) override { // 添加话题权限失败 }};auto *callback = new TestCallBack;V2TIMManager::GetInstance()->GetCommunityManager()->AddTopicPermissionToPermissionGroup("需要添加话题权限的社群 ID", "需要添加话题权限的权限组 ID", topicPermissionMap, callback);// 社群事件监听class CommunityListener final : public V2TIMCommunityListener {public: CommunityListener() = default; ~CommunityListener() override = default; void OnAddTopicPermission(const V2TIMString &groupID, const V2TIMString &permissionGroupID, const V2TIMStringToUint64Map &topicPermissionMap) override { // 添加话题权限通知 }};CommunityListener communityListener;V2TIMManager::GetInstance()->GetCommunityManager()->AddCommunityListener(&communityListener);// 假设需求是在权限组中的成员具有【管理话题1的权限】和【在话题1中禁言成员的权限】,// 以及【管理话题2的权限】和【在话题2中撤回他人消息的权限】final int topicPermission1 = V2TimPermissionGroupInfo.V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC | V2TimPermissionGroupInfo.V2TIM_TOPIC_PERMISSION_MUTE_MEMBER;final int topicPermission2 = V2TimPermissionGroupInfo.V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC | V2TimPermissionGroupInfo.V2TIM_TOPIC_PERMISSION_REVOKE_OTHER_MEMBER_MESSAGE;final Map<String, int> topicPermissionMap = { "话题1 ID": topicPermission1, "话题2 ID": topicPermission2,};final result = await TencentImSDKPlugin.v2TIMManager .getCommunityManager() .addTopicPermissionToPermissionGroup( groupID: "需要添加话题权限的社群 ID", permissionGroupID: "需要添加话题权限的权限组 ID", topicPermissionMap: topicPermissionMap,);if (result.code == 0) { // 添加话题权限成功,result.data 包含各个话题权限的添加结果} else { // 添加话题权限失败,result.code、result.desc}// 社群事件监听TencentImSDKPlugin.v2TIMManager.getCommunityManager().addCommunityListener( listener: V2TimCommunityListener( onAddTopicPermission: (String groupID, String permissionGroupID, Map<String, int> topicPermissionMap) { // 添加话题权限通知 }, ),);
十八、删除权限组的话题权限
群主和拥有管理权限组资料权限的成员可以调用 deleteTopicPermissionFromPermissionGroup (Java / Swift / Objective-C / C++ / Dart) 从权限组删除话题权限。
示例代码如下:
JavaSwiftObjective-CC++DartList<String> topicIDList = new ArrayList<>();topicIDList.add("话题1 ID");topicIDList.add("话题2 ID");V2TIMManager.getCommunityManager().deleteTopicPermissionFromPermissionGroup("需要删除话题权限的社群 ID", "需要删除话题权限的权限组 ID", topicIDList, new V2TIMValueCallback<List<V2TIMTopicOperationResult>>() { @Override public void onSuccess(List<V2TIMTopicOperationResult> v2TIMTopicOperationResults) { // 删除话题权限成功 } @Override public void onError(int code, String desc) { // 删除话题权限失败 }});// 社群群事件监听V2TIMManager.getCommunityManager().addCommunityListener(new V2TIMCommunityListener() { @Override public void onDeleteTopicPermission(String groupID, String permissionGroupID, List<String> topicIDList) { // 删除话题权限通知 }});var topicIDList = Array<String>();topicIDList.append("话题1 ID");topicIDList.append("话题2 ID");V2TIMManager.shared.deleteTopicPermissionFromPermissionGroup(groupID: "groupID", permissionGroupID: "permissionGroupID", topicIDList: topicIDList, succ: { resultList in resultList.forEach { item in // V2TIMTopicOperationResult print( item.description) }}, fail: { code, desc in print( "deleteTopicPermissionOfPermissionGroup fail, \\(code), \\(desc)")}) // 社群事件监听V2TIMManager.shared.addCommunityListener(listener: self)func onDeleteTopicPermission(groupID: String, permissionGroupID: String, topicIDList: Array<String>) { print( "groupID:\\(groupID), permissionGroupID:\\(permissionGroupID), topicIDList:\\(topicIDList)")}NSMutableArray *deleteTopicIDList = [NSMutableArray array];[deleteTopicIDList addObject:@"话题1 ID"];[deleteTopicIDList addObject:@"话题2 ID"];[[V2TIMManager sharedInstance] deleteTopicPermissionFromPermissionGroup:@"需要删除话题权限的社群 ID" permissionGroupID:@"需要删除话题权限的权限组 ID" topicIDList:deleteTopicIDList succ:^(NSMutableArray<V2TIMTopicOperationResult *> *resultList) { // 删除话题权限成功} fail:^(int code, NSString *desc) { // 删除话题权限失败}];// 社群事件监听[[V2TIMManager sharedInstance] addCommunityListener:self];- (void)onDeleteTopicPermission:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID topicIDList:(NSArray<NSString *> *)topicIDList { // 删除话题权限通知}V2TIMStringVector topicIDList;topicIDList.PushBack("话题1 ID");topicIDList.PushBack("话题2 ID");class TestCallBack : public V2TIMValueCallback<V2TIMTopicOperationResultVector> { void OnSuccess(const V2TIMTopicOperationResultVector &value) override { // 删除话题权限成功 } void OnError(int error_code, const V2TIMString &error_message) override { // 删除话题权限失败 }};auto *callback = new TestCallBack;V2TIMManager::GetInstance()->GetCommunityManager()->DeleteTopicPermissionFromPermissionGroup("需要删除话题权限的社群 ID", "需要删除话题权限的权限组 ID", topicIDList, callback);// 社群事件监听class CommunityListener final : public V2TIMCommunityListener {public: CommunityListener() = default; ~CommunityListener() override = default; void OnDeleteTopicPermission(const V2TIMString &groupID, const V2TIMString &permissionGroupID, const V2TIMStringVector &topicIDList) override { // 删除话题权限通知 }};CommunityListener communityListener;V2TIMManager::GetInstance()->GetCommunityManager()->AddCommunityListener(&communityListener);final result = await TencentImSDKPlugin.v2TIMManager .getCommunityManager() .deleteTopicPermissionFromPermissionGroup( groupID: "需要删除话题权限的社群 ID", permissionGroupID: "需要删除话题权限的权限组 ID", topicIDList: ["话题1 ID", "话题2 ID"],);if (result.code == 0) { // 删除话题权限成功} else { // 删除话题权限失败,result.code、result.desc}// 社群事件监听TencentImSDKPlugin.v2TIMManager.getCommunityManager().addCommunityListener( listener: V2TimCommunityListener( onDeleteTopicPermission: (String groupID, String permissionGroupID, List<String> topicIDList) { // 删除话题权限通知 }, ),);
十九、修改权限组的话题权限
群主和拥有管理权限组资料权限的成员可以调用 modifyTopicPermissionInPermissionGroup (Java / Swift / Objective-C / C++ / Dart) 修改权限组的话题权限。
示例代码如下:
JavaSwiftObjective-CC++Dart// 假设需求是在权限组中的成员具有话题1和话题2相同的两个权限,【管理话题的权限】和【在话题中禁言成员的权限】long topicPermission = V2TIMPermissionGroupInfo.V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC | V2TIMPermissionGroupInfo.V2TIM_TOPIC_PERMISSION_MUTE_MEMBER;HashMap<String, Long> topicPermissionMap = new HashMap<>();topicPermissionMap.put("话题1 ID", topicPermission);topicPermissionMap.put("话题2 ID", topicPermission);V2TIMManager.getCommunityManager().modifyTopicPermissionInPermissionGroup("需要修改话题权限的社群 ID", "需要修改话题权限的权限组 ID", topicPermissionMap, new V2TIMValueCallback<List<V2TIMTopicOperationResult>>() { @Override public void onSuccess(List<V2TIMTopicOperationResult> v2TIMTopicOperationResults) { // 修改权限组中的话题权限成功 } @Override public void onError(int code, String desc) { // 修改权限组中的话题权限失败 }});// 社群群事件监听V2TIMManager.getCommunityManager().addCommunityListener(new V2TIMCommunityListener() { @Override public void onModifyTopicPermission(String groupID, String permissionGroupID, HashMap<String, Long> topicPermissionMap) { // 修改话题权限通知 }});// 假设需求是在权限组中的成员具有话题1和话题2相同的两个权限,【管理话题的权限】和【在话题中禁言成员的权限】var topicPermissionMap = Dictionary<String, NSNumber>()let topicPermission = V2TIMTopicPermissionValue.V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC.rawValue | V2TIMTopicPermissionValue.V2TIM_TOPIC_PERMISSION_MUTE_MEMBER.rawValuetopicPermissionMap["话题1 ID"] = NSNumber(value: topicPermission)topicPermissionMap["话题2 ID"] = NSNumber(value: topicPermission)V2TIMManager.shared.modifyTopicPermissionInPermissionGroup(groupID: "groupID", permissionGroupID: "permissionGroupID", topicPermissionMap: topicPermissionMap) { resultList in resultList.forEach { item in print( "\\(item.description)") }} fail: { code, desc in print( "modifyTopicPermissionInPermissionGroup(modify or add topic permission) fail, \\(code), \\(desc)")}// 社群事件监听V2TIMManager.shared.addCommunityListener(listener: self)func onModifyTopicPermission(groupID: String, permissionGroupID: String, topicPermissionMap: Dictionary<String, NSNumber>) { print( "groupID:\\(groupID), permissionGroupID:\\(permissionGroupID), topicPermissionMap:\\(topicPermissionMap)")}// 假设需求是在权限组中的成员具有话题1和话题2相同的两个权限,【管理话题的权限】和【在话题中禁言成员的权限】uint64_t topicPermission = V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC | V2TIM_TOPIC_PERMISSION_MUTE_MEMBER;NSDictionary<NSString *,NSNumber *> *topicPermissionMap = [[NSMutableDictionary alloc] init];[topicPermissionMap setValue:[NSNumber numberWithUnsignedLongLong:topicPermission] forKey:@"话题1 ID"];[topicPermissionMap setValue:[NSNumber numberWithUnsignedLongLong:topicPermission] forKey:@"话题2 ID"];[[V2TIMManager sharedInstance] modifyTopicPermissionInPermissionGroup:@"需要修改话题权限的社群 ID" permissionGroupID:@"需要修改话题权限的权限组 ID" topicPermissionMap:topicPermissionMap succ:^(NSMutableArray<V2TIMTopicOperationResult *> *resultList) { // 修改权限组中的话题权限成功} fail:^(int code, NSString *desc) { // 修改权限组中的话题权限失败}];// 社群事件监听[[V2TIMManager sharedInstance] addCommunityListener:self];- (void)onModifyTopicPermission:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID topicPermissionMap:(NSDictionary<NSString *,NSNumber *> *)topicPermissionMap { // 修改话题权限通知}// 假设需求是在权限组中的成员具有话题1和话题2相同的两个权限,【管理话题的权限】和【在话题中禁言成员的权限】V2TIMStringToUint64Map topicPermissionMap;topicPermissionMap.Insert("话题1 ID", V2TIMTopicPermissionValue::V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC | V2TIMTopicPermissionValue::V2TIM_TOPIC_PERMISSION_MUTE_MEMBER);topicPermissionMap.Insert("话题2 ID", V2TIMTopicPermissionValue::V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC | V2TIMTopicPermissionValue::V2TIM_TOPIC_PERMISSION_MUTE_MEMBER);class TestCallBack : public V2TIMValueCallback<V2TIMTopicOperationResultVector> { void OnSuccess(const V2TIMTopicOperationResultVector &value) override { // 修改权限组中的话题权限成功 } void OnError(int error_code, const V2TIMString &error_message) override { // 修改权限组中的话题权限失败 }};auto *callback = new TestCallBack;V2TIMManager::GetInstance()->GetCommunityManager()->ModifyTopicPermissionInPermissionGroup("需要修改话题权限的社群 ID", "需要修改话题权限的权限组 ID", topicPermissionMap, callback);// 社群事件监听class CommunityListener final : public V2TIMCommunityListener {public: CommunityListener() = default; ~CommunityListener() override = default; void OnModifyTopicPermission(const V2TIMString &groupID, const V2TIMString &permissionGroupID, const V2TIMStringToUint64Map &topicPermissionMap) override { // 修改话题权限通知 }};CommunityListener communityListener;V2TIMManager::GetInstance()->GetCommunityManager()->AddCommunityListener(&communityListener);// 假设需求是在权限组中的成员具有话题1和话题2相同的两个权限,【管理话题的权限】和【在话题中禁言成员的权限】final int topicPermission = V2TimPermissionGroupInfo.V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC | V2TimPermissionGroupInfo.V2TIM_TOPIC_PERMISSION_MUTE_MEMBER;final Map<String, int> topicPermissionMap = { "话题1 ID": topicPermission, "话题2 ID": topicPermission,};final result = await TencentImSDKPlugin.v2TIMManager .getCommunityManager() .modifyTopicPermissionInPermissionGroup( groupID: "需要修改话题权限的社群 ID", permissionGroupID: "需要修改话题权限的权限组 ID", topicPermissionMap: topicPermissionMap,);if (result.code == 0) { // 修改权限组中的话题权限成功} else { // 修改权限组中的话题权限失败,result.code、result.desc}// 社群事件监听TencentImSDKPlugin.v2TIMManager.getCommunityManager().addCommunityListener( listener: V2TimCommunityListener( onModifyTopicPermission: (String groupID, String permissionGroupID, Map<String, int> topicPermissionMap) { // 修改话题权限通知 }, ),);
20、获取权限组的话题权限
群成员可以调用 getTopicPermissionInPermissionGroup (Java / Swift / Objective-C / C++ / Dart) 获取权限组中的话题权限列表。其中 topicIDList 有值时为获取权限组中指定话题权限;topicIDList 为空时为获取权限组中的所有话题权限。
示例代码如下:
JavaSwiftObjective-CC++DartList<String> topicIDList = new ArrayList<>();// topicIDList 列表有值,表示获取指定的话题权限列表;topicIDList 为空,表示获取所有的话题权限列表topicIDList.add("话题1 ID");topicIDList.add("话题2 ID");V2TIMManager.getCommunityManager().getTopicPermissionInPermissionGroup("需要获取话题权限的社群 ID", "需要获取话题权限的权限组 ID", topicIDList, new V2TIMValueCallback<List<V2TIMTopicPermissionResult>>() { @Override public void onSuccess(List<V2TIMTopicPermissionResult> resultList) { // 获取权限组中的话题权限成功 } @Override public void onError(int code, String desc) { // 获取权限组中的话题权限失败 }});var topicIDList = Array<String>();topicIDList.append("话题1 ID");topicIDList.append("话题2 ID");V2TIMManager.shared.getTopicPermissionInPermissionGroup(groupID: "groupID", permissionGroupID: "permissionGroupID", topicIDList: topicIDList) { resultList in resultList.forEach { item in print( "\\(item.description)") }} fail: { code, desc in print( "getTopicPermissionInPermissionGroup fail, \\(code), \\(desc)")}NSMutableArray *topicIDList = [NSMutableArray array];// topicIDList 列表有值,表示获取指定的话题权限列表;topicIDList 为空,表示获取所有的话题权限列表[topicIDList addObject:@"话题1 ID"];[topicIDList addObject:@"话题2 ID"];[[V2TIMManager sharedInstance] getTopicPermissionInPermissionGroup:@"需要获取话题权限的社群 ID" permissionGroupID:@"需要获取话题权限的权限组 ID" topicIDList:topicIDList succ:^(NSMutableArray<V2TIMTopicPermissionResult *> *resultList) { // 获取权限组中的话题权限成功} fail:^(int code, NSString *desc) { // 获取权限组中的话题权限失败}];V2TIMStringVector topicIDList;// topicIDList 列表有值,表示获取指定的话题权限列表;topicIDList 为空,表示获取所有的话题权限列表topicIDList.PushBack("话题1 ID");topicIDList.PushBack("话题2 ID");class TestCallBack : public V2TIMValueCallback<V2TIMTopicPermissionResultVector> { void OnSuccess(const V2TIMTopicPermissionResultVector &value) override { // 获取权限组中的话题权限成功 } void OnError(int error_code, const V2TIMString &error_message) override { // 获取权限组中的话题权限失败 }};auto *callback = new TestCallBack;V2TIMManager::GetInstance()->GetCommunityManager()->GetTopicPermissionInPermissionGroup("需要获取话题权限的社群 ID", "需要获取话题权限的权限组 ID", topicIDList, callback);// topicIDList 有值时为获取权限组中指定话题权限;为空时为获取权限组中的所有话题权限final result = await TencentImSDKPlugin.v2TIMManager .getCommunityManager() .getTopicPermissionInPermissionGroup( groupID: "需要获取话题权限的社群 ID", permissionGroupID: "需要获取话题权限的权限组 ID", topicIDList: ["话题1 ID", "话题2 ID"],);if (result.code == 0) { // 获取权限组中的话题权限成功,result.data 为话题权限列表} else { // 获取权限组中的话题权限失败,result.code、result.desc}