Group Join Management
This document guides developers on using RC's iOS IMLib SDK to implement group join management features including actively joining groups, inviting users to join groups, users accepting or rejecting group invitations, and administrators approving or rejecting join requests.
This feature is supported starting from version 5.12.0.
Enabling the Service
Before using this feature, you must enable the profile hosting service by submitting a ticket.
Group Join Management
Group join management includes: actively joining groups, inviting users to join groups, users accepting or rejecting group invitations, and administrators approving or rejecting join requests.
For group join permission configuration, refer to [Group Management]. For group permission queries, refer to [Group Query].
Actively Join Group
You can call the joinGroup
method to actively join a group.
The result is affected by the group's join permission ([joinPermission]) parameter:
- When join permission is "Requires group owner/administrator approval":
- After successful API call,
processCode
returnsRC_GROUP_JOIN_GROUP_NEED_MANAGER_ACCEPT
(25424), indicating pending owner/administrator approval. Both the requester and group owner/administrator will receive the [onGroupApplicationEvent] callback.
- After successful API call,
- When join permission is "No approval required":
- After successful API call,
processCode
returnsRC_SUCCESS
(0), indicating successful group join. Both the requester and all group members will receive theonGroupOperation
callback with operation typeRCGroupOperationJoin
.
- After successful API call,
Sample Code
[[RCCoreClient sharedCoreClient] joinGroup:@"groupId" success:^(RCErrorCode processCode) {
// Join success
} error:^(RCErrorCode errorCode) {
// Join failed
}];
Invite Users to Join Group
This feature is affected by group invite role permission [invitePermission]. Only users with permission can call inviteUsersToGroup
to invite others to join.
API Prototype
- (void)inviteUsersToGroup:(NSString *)groupId
userIds:(NSArray<NSString *> *)userIds
success:(void (^)(RCErrorCode processCode))successBlock
error:(void (^)(RCErrorCode errorCode))errorBlock;
Parameter Description
Parameter | Type | Description |
---|---|---|
groupId | NSString | The group's targetId. |
userIds | NSArray | List of user IDs to invite (max 30 per request). |
successBlock | Block | Success callback. |
errorBlock | Block | Failure callback. |
Sample Code
// User IDs to invite
NSArray *userIds = @[@"userId1", @"userId2"];
[[RCCoreClient sharedCoreClient] inviteUsersToGroup:@"groupId" userIds:userIds success:^(RCErrorCode processCode) {
// Invite success
} error:^(RCErrorCode errorCode) {
// Invite failed
}];
Group invitation behavior is affected by three factors:
- Join Permission ([joinPermission]): Whether owner/administrator approval is required.
- Inviter Role ([role]): Whether inviter is owner/administrator or regular member.
- Invitee Handling Permission ([inviteHandlePermission]): Whether invitee consent is required.
Specific Rules
The table below assumes group invite permission ([invitePermission]) is set to RCGroupOperationPermissionEveryone
, meaning all members can invite others.
You can configure different permissions based on actual requirements.
Join Permission | Inviter Role | Invitee Approval | Event Flow |
---|---|---|---|
Requires owner/admin approval | Regular member | Required | Flow A |
Not required | Flow B | ||
Owner/Administrator | Required | Flow C | |
Not required | Flow D | ||
No owner/admin approval required | All roles | Required | Flow C |
Not required | Flow D |
Event Flows
Flow A
Permission description:
- Regular member invites others, requires owner/admin approval, requires invitee approval.
- After invitation, success callback returns
RC_GROUP_JOIN_GROUP_NEED_MANAGER_ACCEPT
(25424), indicating pending owner/admin approval. Inviter and owner/admin receiveonGroupApplicationEvent
callback. - After owner/admin calls
acceptGroupApplication
, inviter, owner/admin, and invitee receiveonGroupApplicationEvent
callback. - After invitee calls
acceptGroupInvite
, inviter, owner/admin, and invitee receiveonGroupApplicationEvent
callback. All group members receiveonGroupOperation
callback with operation typeRCGroupOperationJoin
.
Flow B
Permission description:
- Regular member invites others, requires owner/admin approval, no invitee approval required.
- After invitation, success callback returns
RC_GROUP_JOIN_GROUP_NEED_MANAGER_ACCEPT
(25424), indicating pending owner/admin approval. Inviter and owner/admin receiveonGroupApplicationEvent
callback. - After owner/admin calls
acceptGroupApplication
, invitee joins successfully. Inviter and owner/admin receiveonGroupApplicationEvent
callback. All group members receiveonGroupOperation
callback with operation typeRCGroupOperationJoin
.
Flow C
Permission description:
- Any role (owner, admin or regular member) invites others, no owner/admin approval required, requires invitee approval.
-
After invitation, success callback returns
RC_GROUP_NEED_INVITEE_ACCEPT
(25427), indicating pending invitee approval. Inviter and invitee receiveonGroupApplicationEvent
callback. -
After invitee calls
acceptGroupInvite
, inviter and invitee receiveonGroupApplicationEvent
callback. All group members receiveonGroupOperation
callback with operation typeRCGroupOperationJoin
. -
After invitation, the success callback returns
RC_GROUP_NEED_INVITEE_ACCEPT
(25427), indicating pending invitee approval. Inviter and invitee receiveonGroupApplicationEvent
callback. -
After invitee calls
acceptGroupInvite
, inviter and invitee receiveonGroupApplicationEvent
callback. All group members receiveonGroupOperation
callback with operation typeRCGroupOperationJoin
.
Process D
Permission description:
- Owner/admin invites others, requires owner/admin approval, no invitee approval needed.
- Any user (owner, admin, or regular member) invites others, no owner/admin approval required, no invitee approval needed.
- After invitation, the success callback returns
RC_SUCCESS
(0), indicating successful invitation. Invitee directly joins the group, all members receiveonGroupOperation
callback with operation typeRCGroupOperationJoin
.
Handling Group Invitations
Accepting Group Invitation
Users can call acceptGroupInvite
to accept group invitations.
Interface Prototype
- (void)acceptGroupInvite:(NSString *)groupId
inviterId:(NSString *)inviterId
success:(void (^)(void))successBlock
error:(void (^)(RCErrorCode errorCode))errorBlock;
Parameters
Parameter | Type | Description |
---|---|---|
groupId | NSString | Group targetId. |
inviterId | NSString | Inviter userId. |
successBlock | Block | Success callback. |
errorBlock | Block | Failure callback. |
Sample Code
// Group ID
NSString *groupId = @"groupId";
// Inviter ID
NSString *inviterId = @"inviterId";
[[RCCoreClient sharedCoreClient] acceptGroupInvite:groupId inviterId:inviterId success:^{
// Success
} error:^(RCErrorCode errorCode) {
// Failure
}];
Rejecting Group Invitation
Users can call refuseGroupInvite
to reject group invitations.
Interface Prototype
- (void)refuseGroupInvite:(NSString *)groupId
inviterId:(NSString *)inviterId
reason:(nullable NSString *)reason
success:(void (^)(void))successBlock
error:(void (^)(RCErrorCode errorCode))errorBlock;
Parameters
Parameter | Type | Description |
---|---|---|
groupId | NSString | Group targetId. |
inviterId | NSString | Inviter userId. |
reason | NSString | Optional rejection reason (max 128 characters). |
successBlock | Block | Success callback. |
errorBlock | Block | Failure callback. |
Sample Code
// Group ID
NSString *groupId = @"groupId";
// Inviter ID
NSString *inviterId = @"inviterId";
// Reason (optional)
NSString *reason = @"reason";
[[RCCoreClient sharedCoreClient] refuseGroupInvite:groupId inviterId:inviterId reason:reason success:^{
// Success
} error:^(RCErrorCode errorCode) {
// Failure
}];
Handling Join Requests (Owner/Admin)
Group applications expire after 7 days. RC servers store application data for up to 7 days.
Approving Join Request
Owners/admins can call acceptGroupApplication
to approve join requests.
- For user-initiated requests: Pass applicantId, set inviterId to nil or @"".
- For invitation requests: Pass both applicantId and inviterId.
Interface Prototype
- (void)acceptGroupApplication:(NSString *)groupId
inviterId:(nullable NSString *)inviterId
applicantId:(NSString *)applicantId
success:(void (^)(RCErrorCode processCode))successBlock
error:(void (^)(RCErrorCode errorCode))errorBlock;
Parameters
Parameter | Type | Description |
---|---|---|
groupId | NSString | Group targetId. |
inviterId | NSString | Optional inviter userId (required for invitation requests). |
applicantId | NSString | Applicant userId. |
successBlock | Block | Success callback. |
errorBlock | Block | Failure callback. |
Sample Code
// Group ID
NSString *groupId = @"groupId";
// Inviter ID (required for invitation requests)
NSString *inviterId = @"inviterId";
// Applicant ID
NSString *applicantId = @"applicantId";
[[RCCoreClient sharedCoreClient] acceptGroupApplication:groupId inviterId:inviterId applicantId:applicantId success:^(RCErrorCode processCode) {
// Success
} error:^(RCErrorCode errorCode) {
// Failure
}];
The processCode
in callback depends on group's invitee handling permission ([inviteHandlePermission]):
- When invitee approval required: Returns
RC_GROUP_NEED_INVITEE_ACCEPT
(25427). Invitee receivesonGroupApplicationEvent
callback. - When no invitee approval needed: Returns
RC_SUCCESS
(0). All members receiveonGroupOperation
callback for join event.
Rejecting Join Request
Owners/admins can call refuseGroupApplication
to reject join requests.
- For user-initiated requests: Pass applicantId, set inviterId to nil or @"".
- For invitation requests: Pass both applicantId and inviterId.
Interface Prototype
- (void)refuseGroupApplication:(NSString *)groupId
#### Interface Prototype
```objc
- (void)refuseGroupApplication:(NSString *)groupId
inviterId:(nullable NSString *)inviterId
applicantId:(NSString *)applicantId
reason:(nullable NSString *)reason
success:(void (^)(void))successBlock
error:(void (^)(RCErrorCode errorCode))errorBlock;
Parameter Description
Parameter | Type | Description |
---|---|---|
groupId | NSString | The targetId of the group. |
inviterId | NSString | The inviter's userId (optional). Required for invitation requests; leave empty for user-initiated join requests. |
applicantId | NSString | The userId of the user requesting to join the group. |
reason | NSString | Reason for rejection. |
successBlock | Block | Success callback. |
errorBlock | Block | Failure callback. |
Example Code
// Group ID
NSString *groupId = @"groupId";
// Applicant ID
NSString *applicantId = @"applicantId";
// Inviter ID (required for invitation requests, nil or @"" for user-initiated requests)
NSString *inviterId = @"inviterId";
// Rejection reason (optional)
NSString *reason = @"reason";
[[RCCoreClient sharedCoreClient] refuseGroupApplication:groupId inviterId:inviterId applicantId:applicantId reason:reason success:^{
// Rejection successful
} error:^(RCErrorCode errorCode) {
// Rejection failed
}];
Paginated Group Application List
Call getGroupApplications
to retrieve group applications in paginated format.
Group applications expire after 7 days. RC servers store application data for up to 7 days; applications must be resubmitted after expiration.
Interface Prototype
- (void)getGroupApplications:(RCPagingQueryOption *)option
directions:(NSArray<NSNumber *> *)directions
status:(NSArray<NSNumber *> *)status
success:(void (^)(RCPagingQueryResult<RCGroupApplicationInfo *> *result))successBlock
error:(void (^)(RCErrorCode errorCode))errorBlock;
Parameter Description
Parameter | Type | Description |
---|---|---|
option | RCPagingQueryOption | Query options including page token (optional, returns first page if empty), items per page (max 200), and sort order (default descending) |
directions | NSArray<NSNumber *> | Application direction [RCGroupApplicationDirection] array |
status | NSArray<NSNumber *> | Status type [RCGroupApplicationStatus] array |
successBlock | Block | Success callback returning [RCGroupApplicationInfo] array (total count not supported) |
errorBlock | Block | Failure callback |
Example Code
- (void)getGroupApplications:(NSString *)pageToken {
// Query options
RCPagingQueryOption *option = [[RCPagingQueryOption alloc] init];
// Page token (nil for first page)
option.pageToken = pageToken;
// Items per page
option.count = 20;
// Default NO for descending by operation time, YES for ascending
option.order = NO;
// Application direction
NSArray<NSNumber *> *directions = @[@(RCGroupApplicationDirectionInvitationReceived)];
// Status type
NSArray<NSNumber *> *status = @[@(RCGroupApplicationStatusManagerUnHandled)];
[[RCCoreClient sharedCoreClient] getGroupApplications:option directions:directions status:status success:^(RCPagingQueryResult<RCGroupApplicationInfo *> * _Nonnull result) {
// Retrieval successful
if (result.pageToken.length > 0) {
// Continue fetching next page when pageToken exists
[self getGroupApplications:result.pageToken];
} else {
// No more data available
}
} error:^(RCErrorCode errorCode) {
// Retrieval failed
}];
}