跳到主要内容

加入群组管理

本文档旨在指导开发者如何使用融云即时通讯 iOS IMLib SDK 实现主动加入群组、邀请用户加入群组、 用户同意或拒绝加入群组、 管理员同意或拒绝加群申请等功能。

提示

此功能从 5.12.0 版本开始支持。

开通服务

使用此功能前,您须在控制台开通信息托管服务。

加入群组管理

加入群组管理包含:主动加入群组、邀请加入群组、 用户同意或拒绝加入群组、 管理员同意或拒绝加群申请等功能。

主动加入群组

您可以调用 joinGroup 方法主动加入一个群组。

加入的结果受群组的加入权限 (joinPermission) 参数影响:

  • 加入权限为 “需要群主/管理员审批” 时
    • 接口调用成功后 processCode 会返回 RC_GROUP_JOIN_GROUP_NEED_MANAGER_ACCEPT ( 25424 ),表示需要等待群主或管理员的审批。同时本人和群主或管理员会都会收到 onGroupApplicationEvent 事件回调。
  • 加入权限为 “无需审批” 时
    • 接口调用成功后 processCode 会返回 RC_SUCCESS ( 0 ),表示加入群组成功。同时本人和群内所有人会收到 onGroupOperation 事件回调,操作类型为 RCGroupOperationJoin

代码示例

[[RCCoreClient sharedCoreClient] joinGroup:@"groupId" success:^(RCErrorCode processCode) {
// 加入成功
} error:^(RCErrorCode errorCode) {
// 加入失败
}];

邀请他人加入群组

此接口的使用受群组邀请角色权限 invitePermission 的影响,有权限的用户才可以调用 inviteUsersToGroup 方法邀请他人加入群组。

代码示例

// 邀请加入群组的用户 ID
NSArray *userIds = @[@"userId1", @"userId2"];

[[RCCoreClient sharedCoreClient] inviteUsersToGroup:@"groupId" userIds:userIds success:^(RCErrorCode processCode) {
// 邀请成功
} error:^(RCErrorCode errorCode) {
// 邀请失败
}];

邀请用户加入群组的行为受到以下三方面的影响:

  1. 加入权限joinPermission ):是否需要群主或管理员验证。
  2. 邀请人角色role ):邀请人是群主或管理员,还是普通用户。
  3. 被邀请人处理权限inviteHandlePermission ):是否需要被邀请人同意才能加入群组。
具体规则
提示

下表中默认了群组的邀请权限(invitePermission)为 RCGroupOperationPermissionEveryone,即所有人都可以邀请他人加入群组。

开发中可以根据实际情况设置不同的权限。

加入权限邀请人角色被邀请人审批事件流程
需要群主/管理员审批普通用户需要流程 A
不需要流程 B
群主或管理员需要流程 C
不需要流程 D
无需群主/管理员审批所有角色需要流程 C
不需要流程 D
事件流程如下
流程 A

权限描述:

  • 普通用户邀请他人,需要群主/管理员审批,需要被邀请人审批。
  1. 发出邀请后,成功回调的 processCode 会返回 RC_GROUP_JOIN_GROUP_NEED_MANAGER_ACCEPT ( 25424 ),表示需要等待群主/管理员审批。邀请人和群主/管理员会收到 onGroupApplicationEvent 事件回调。
  2. 群主/管理员调用 acceptGroupApplication 接口同意后,邀请人、群主/管理员、被邀请人会收到 onGroupApplicationEvent 事件回调。
  3. 被邀请人调用 acceptGroupInvite 接口同意后,邀请人、群主/管理员、被邀请人会收到 onGroupApplicationEvent 事件回调。群内所有用户会收到群组操作 onGroupOperation 事件回调,操作类型为 RCGroupOperationJoin
流程 B

权限描述:

  • 普通用户邀请他人,需要群主/管理员审批,不需要被邀请人审批。
  1. 发出邀请后,成功回调的 processCode 会返回 RC_GROUP_JOIN_GROUP_NEED_MANAGER_ACCEPT ( 25424 ),表示需要等待群主或管理员审批。邀请人和群主/管理员会收到 onGroupApplicationEvent 事件回调。
  2. 群主或管理员调用 acceptGroupApplication 接口同意后,被邀请人加入群组成功。邀请人、群主或管理员会收到 onGroupApplicationEvent 事件回调。群内所有用户会收到 onGroupOperation 事件回调,操作类型为 RCGroupOperationJoin
流程 C

权限描述:

  • 任意角色的用户(群主、管理员或普通用户)邀请他人,无需群主/管理员审批,需要被邀请人审批。
  1. 发出邀请后,成功回调的 processCode 会返回 RC_GROUP_NEED_INVITEE_ACCEPT ( 25427 ),表示需要被邀请人同意后才能进入群组。邀请人和被邀请人会收到 onGroupApplicationEvent 事件回调。
  2. 被邀请人调用 acceptGroupInvite 接口同意后,邀请人和被邀请人会收到 onGroupApplicationEvent 事件回调。群内所有用户会收到 onGroupOperation 事件回调,操作类型为 RCGroupOperationJoin
流程 D

权限描述:

  • 群主/管理员邀请他人,需要群主/管理员审批,不需要被邀请人审批。
  • 任意角色的用户(群主、管理员或普通用户)邀请他人,无需群主/管理员审批,不需要被邀请人审批。
  1. 发出邀请后,成功回调的 processCode 会返回 RC_SUCCESS ( 0 ),表示邀请成功。被邀请人会直接加入群组,群内所有用户会收到 onGroupOperation 事件回调,操作类型为 RCGroupOperationJoin

用户处理入群邀请

同意入群邀请

用户在收到入群邀请后,可以调用 acceptGroupInvite 方法同意加入群组。

代码示例
// 群组 ID
NSString *groupId = @"groupId";
// 邀请人 ID
NSString *inviterId = @"inviterId";

[[RCCoreClient sharedCoreClient] acceptGroupInvite:groupId inviterId:inviterId success:^{
// 同意加入成功
} error:^(RCErrorCode errorCode) {
// 同意加入失败
}];

拒绝入群邀请

用户在收到入群邀请后,可以调用 refuseGroupInvite 方法拒绝加入群组。

代码示例
// 群组 ID
NSString *groupId = @"groupId";
// 邀请人 ID
NSString *inviterId = @"inviterId";
// 拒绝原因(可选)
NSString *reason = @"reason";

[[RCCoreClient sharedCoreClient] refuseGroupInvite:groupId inviterId:inviterId reason:reason success:^{
// 拒绝成功
} error:^(RCErrorCode errorCode) {
// 拒绝失败
}];

群主或管理员处理入群申请

群申请处理有效期为 7 天,融云服务端最多存储 7 天的申请数据,超过 7 天后需要重新发起申请。

同意入群申请

群主或管理员在收到入群申请后,可以调用 acceptGroupApplication 方法同意入群申请。

  • 若处理的是用户主动加群申请,applicantId 传入群者 ID, inviterIdnil@""
  • 若处理的是邀请加群申请,applicantId 传入群者 ID, inviterId 传入邀请人 ID。
代码示例
// 群组 ID
NSString *groupId = @"groupId";
// 邀请人 ID,邀请加群申请时必传,用户主动加群申请时传 nil 或 @""
NSString *inviterId = @"inviterId";
// 入群者 ID
NSString *applicantId = @"applicantId";

[[RCCoreClient sharedCoreClient] acceptGroupApplication:groupId inviterId:inviterId applicantId:applicantId success:^(RCErrorCode processCode) {
// 同意成功
} error:^(RCErrorCode errorCode) {
// 同意失败
}];

接口调用成功后,回调中的 processCode 受群组的被邀请人处理权限(inviteHandlePermission)影响:

  • 需要被邀请人同意时,processCode 会返回 RC_GROUP_NEED_INVITEE_ACCEPT ( 25427 ),表示需要被邀请人同意后才能进入群组。被邀请人会收到 onGroupApplicationEvent 事件回调。
  • 无需被邀请人同意时,processCode 会返回 RC_SUCCESS ( 0 ),表示被邀请者入群成功。群内所有用户会收到 onGroupOperation 加入群组类型事件回调。

拒绝入群申请

群主或管理员在收到入群申请后,可以调用 refuseGroupApplication 方法拒绝入群申请。

  • 若处理的是用户主动加群申请,applicantId 传入群者 ID, inviterIdnil@""
  • 若处理的是邀请加群申请,applicantId 传入群者 ID, inviterId 传入邀请人 ID。
代码示例
// 群组 ID
NSString *groupId = @"groupId";
// 入群者 ID
NSString *applicantId = @"applicantId";
// 邀请人 ID,邀请加群申请时必传,用户主动加群申请时传 nil 或 @""
NSString *inviterId = @"inviterId";
// 拒绝原因(可选)
NSString *reason = @"reason";

[[RCCoreClient sharedCoreClient] refuseGroupApplication:groupId inviterId:inviterId applicantId:applicantId reason:reason success:^{
// 拒绝成功
} error:^(RCErrorCode errorCode) {
// 拒绝失败
}];

分页获取群申请列表

您可以调用 getGroupApplications 方法分页获取群申请列表。 群申请处理有效期为 7 天,融云服务端最多存储 7 天的申请数据,超过 7 天后需要重新发起申请。

参数说明

参数类型描述
optionRCPagingQueryOption查询选项,包含页面标识(非必填,不填返回第一页数据)、每页条数(最大不超过 200 条)、是否正序查询(默认倒序)
directionsNSArray<NSNumber *>申请方向 RCGroupApplicationDirection 数组
statusNSArray<NSNumber *>状态类型 RCGroupApplicationStatus 数组
successBlockvoid (^)(RCPagingQueryResult<RCGroupApplicationInfo *> *groupApplications)成功回调,此接口不支持返回请求总数
errorBlockvoid (^)(RCErrorCode errorCode)失败回调

代码示例

- (void)getGroupApplications:(NSString *)pageToken {
// 查询选项
RCPagingQueryOption *option = [[RCPagingQueryOption alloc] init];
// 分页标识, 首页传 nil
option.pageToken = pageToken;
// 每页条数
option.count = 20;
// 默认NO 为按申请操作时间倒序, YES 为正序
option.order = NO;
// 申请方向
NSArray<NSNumber *> *directions = @[@(RCGroupApplicationDirectionInvitationReceived)];
// 状态类型
NSArray<NSNumber *> *status = @[@(RCGroupApplicationStatusManagerUnHandled)];

[[RCCoreClient sharedCoreClient] getGroupApplications:option directions:directions status:status success:^(RCPagingQueryResult<RCGroupApplicationInfo *> * _Nonnull result) {
// 获取成功
if (result.pageToken.length > 0) {
// 当 pageToken 不为空时,继续拉取下一页
[self getGroupApplications:result.pageToken];
} else {
// 拉取完成,没有更多数据
}
} error:^(RCErrorCode errorCode) {
// 获取失败
}];
}