Skip to main content

Group Join Management

This document guides developers on how to use RC's Instant Messaging Android IMLib SDK to implement features including actively joining groups, inviting users to join groups, users accepting or rejecting group invitations, and administrators approving or rejecting group join requests.

tip

This feature is supported starting from version 5.12.0.

Service Activation

The information hosting service is enabled by default, allowing you to use this feature directly.

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 group join requests.

Actively Joining a Group

You can call the [joinGroup] method to actively join a group.

The result is affected by the group's join permission [joinPermission], with the following two scenarios:

  1. When the group's join permission ([joinPermission]) is requires group owner/administrator approval, a successful API call will return RC_GROUP_JOIN_GROUP_NEED_MANAGER_ACCEPT (25424) in IRongCoreEnum.CoreErrorCode, indicating that approval from the group owner or administrator is required. Both the requester and the group owner/administrator will receive the onGroupApplicationEvent callback.
  2. When the group's join permission ([joinPermission]) is "no approval required", a successful API call will return SUCCESS (0) in IRongCoreEnum.CoreErrorCode, indicating successful group join. Both the requester and all group members will receive the onGroupOperation callback with the operation type Join.

Code Example

// Group ID
String groupId = "groupId1";
RongCoreClient.getInstance().joinGroup(groupId, new IRongCoreCallback.ResultCallback<IRongCoreEnum.CoreErrorCode>() {
@Override
public void onSuccess(IRongCoreEnum.CoreErrorCode processCode) {
// Group join request successful
}

@Override
public void onError(IRongCoreEnum.CoreErrorCode e) {
// Group join request failed
}
});

Inviting Others to Join a Group

This feature is affected by the group's invite role permission [invitePermission]. Only users with permission can call the [inviteUsersToGroup] method to invite others to join the group.

Code Example

// Group ID
String groupId = "groupId1";
// User ID list
List<String> userIds = new ArrayList<>();
userIds.add("userId1");
userIds.add("userId2");
userIds.add("userId3");
RongCoreClient.getInstance().inviteUsersToGroup(groupId, userIds, new IRongCoreCallback.ResultCallback<IRongCoreEnum.CoreErrorCode>() {
@Override
public void onSuccess(IRongCoreEnum.CoreErrorCode processCode) {
// Group invitation request successful
}

@Override
public void onError(IRongCoreEnum.CoreErrorCode e) {
// Group invitation request failed
}
});

Group invitation behavior is influenced by three factors:

  1. Join Permission ([joinPermission]): Whether group owner/administrator approval is required.
  2. Inviter Role ([role]): Whether the inviter is a group owner/administrator or a regular member.
  3. Invitee Handling Permission ([inviteHandlePermission]): Whether invitee consent is required to join the group.

Specific Rules

tip

The table below assumes the group's invite permission [invitePermission] is set to Everyone, meaning all members can invite others to join the group.

Developers can configure different permissions based on actual requirements.

Join PermissionInviter RoleInvitee ApprovalEvent Flow
Requires owner/admin approvalRegular memberRequiredFlow A
Not requiredFlow B
Owner or adminRequiredFlow C
Not requiredFlow D
No owner/admin approval requiredAll rolesRequiredFlow C
Not requiredFlow D
Event Flows
Flow A

Permission description: Regular member invites others, requires owner/admin approval, requires invitee approval.

  1. After sending the invitation, the success callback's IRongCoreEnum.CoreErrorCode returns RC_GROUP_JOIN_GROUP_NEED_MANAGER_ACCEPT (25424), indicating owner/admin approval is pending. The inviter and owner/admin receive the onGroupApplicationEvent callback.
  2. After owner/admin approval, the inviter, owner/admin, and invitee receive the onGroupApplicationEvent callback.
  3. After invitee approval, the inviter, owner/admin, and invitee receive the onGroupApplicationEvent callback. All group members receive the onGroupOperation callback with operation type Join.
Flow B

Permission description:

  • Regular member invites others, requires owner/admin approval, does not require invitee approval.
  1. After sending the invitation, the success callback's IRongCoreEnum.CoreErrorCode returns RC_GROUP_JOIN_GROUP_NEED_MANAGER_ACCEPT (25424), indicating owner/admin approval is pending. The inviter and owner/admin receive the onGroupApplicationEvent callback.
  2. After owner/admin approval, the invitee successfully joins the group. The inviter and owner/admin receive the onGroupApplicationEvent callback. All group members receive the onGroupOperation callback with operation type Join.
Flow C

Permission description:

  • Any role (owner, admin, or regular member) invites others, no owner/admin approval required, requires invitee approval.
  1. After sending the invitation, the success callback's IRongCoreEnum.CoreErrorCode returns RC_GROUP_NEED_INVITEE_ACCEPT (25427), indicating invitee approval is required. The inviter and invitee receive the onGroupApplicationEvent callback.
  2. After invitee approval, the inviter and invitee receive the onGroupApplicationEvent callback. All group members receive the onGroupOperation callback with operation type Join.
Flow D

Permission description:

  • Owner/admin invites others, requires owner/admin approval, does not require invitee approval.
  • Any role (owner, admin, or regular member) invites others, no owner/admin approval required, does not require invitee approval.
  1. After sending the invitation, the success callback's IRongCoreEnum.CoreErrorCode returns SUCCESS (0), indicating successful invitation. The invitee directly joins the group, and all members receive the onGroupOperation callback with operation type Join.

Handling Group Invitations

Accepting Group Invitations

After receiving a group invitation, users can call the acceptGroupInvite method to accept the invitation.

Code Example

// Group ID
String groupId = "groupId1";
// Inviter's user ID
String inviterId = "userId1";
RongCoreClient.getInstance().acceptGroupInvite(groupId, inviterId, new IRongCoreCallback.OperationCallback() {
@Override
public void onSuccess() {
// User successfully accepted group invitation
}

@Override
public void onError(IRongCoreEnum.CoreErrorCode e) {
// User failed to accept group invitation
}
});

Rejecting Group Invitations

After receiving a group invitation, users can call the refuseGroupInvite method to decline joining the group.

Code Example

// Group ID
String groupId = "groupId1";
// User ID of the inviter
String inviterId = "userId1";
// Reason for rejection
String reason = "Reason for rejection";
RongCoreClient.getInstance().refuseGroupInvite(groupId, inviterId, reason, new IRongCoreCallback.OperationCallback() {
@Override
public void onSuccess() {
// User successfully declined group invitation
}

@Override
public void onError(IRongCoreEnum.CoreErrorCode e) {
// User failed to decline group invitation
}
});

Group Owner or Administrator Handling Join Requests

Group join requests remain valid for 7 days. The RC server stores request data for up to 7 days, after which new requests must be submitted.

Approving Join Requests

Group owners or administrators can call acceptGroupApplication to approve join requests.

  • For user-initiated join requests: Pass the applicant's ID as applicantId and set inviterId to null or empty string "".
  • For invitation-based join requests: Pass the applicant's ID as applicantId and the inviter's ID as inviterId.
  • Requests expire after 7 days. The RC server stores request data for up to 7 days, after which new requests must be submitted.

Code Example

// Group ID
String groupId = "groupId1";
// User ID of the inviter
String inviterId = "userId1";
// User ID of the applicant
String applicantId = "userId2";
RongCoreClient.getInstance().acceptGroupApplication(groupId, inviterId, applicantId, new IRongCoreCallback.ResultCallback<IRongCoreEnum.CoreErrorCode>() {
@Override
public void onSuccess(IRongCoreEnum.CoreErrorCode errorCode) {
// Successfully approved join request
}

@Override
public void onError(IRongCoreEnum.CoreErrorCode e) {
// Failed to approve join request
}
});

The callback's IRongCoreEnum.CoreErrorCode is affected by the group's invitee handling permission ([inviteHandlePermission]), resulting in two scenarios:

  1. When invitee approval is required: Returns RC_GROUP_NEED_INVITEE_ACCEPT (25427), indicating the invitee must consent before joining. The invitee receives an onGroupApplicationEvent callback.
  2. When no invitee approval is needed: Returns SUCCESS (0), indicating the invitee joined successfully. All group members receive an onGroupOperation callback for the join event.

Rejecting Join Requests

Group owners or administrators can call refuseGroupApplication to reject join requests.

  • For user-initiated join requests: Pass the applicant's ID as applicantId and set inviterId to null or empty string "".
  • For invitation-based join requests: Pass the applicant's ID as applicantId and the inviter's ID as inviterId.
  • Requests expire after 7 days. The RC server stores request data for up to 7 days, after which new requests must be submitted.

Code Example

// Group ID
String groupId = "groupId1";
// User ID of the inviter
String inviterId = "userId1";
// User ID of the applicant
String applicantId = "userId2";
// Reason for rejection
String reason = "Reason for rejection";
RongCoreClient.getInstance().refuseGroupApplication(groupId, inviterId, applicantId, reason, new IRongCoreCallback.OperationCallback() {
@Override
public void onSuccess() {
// Successfully rejected join request
}

@Override
public void onError(IRongCoreEnum.CoreErrorCode e) {
// Failed to reject join request
}
});

Paginated Retrieval of Join Requests

Call getGroupApplications to retrieve join requests paginated. Requests expire after 7 days. The RC server stores request data for up to 7 days, after which new requests must be submitted.

This interface does not return total request counts.

Code Example

{
// ...
// Pagination parameter (null and "" are equivalent)
String pageToken = "";
getGroupApplications(pageToken);
// ...
}

public void getGroupApplications(String pageToken) {
// Pagination options
PagingQueryOption option = new PagingQueryOption();
// Page size (1-100)
option.setCount(20);
// Pagination token
option.setPageToken(pageToken);
// Sort order: true=ascending, false=descending
option.setOrder(false);
// Query both sent and received requests
GroupApplicationDirection[] directions = new GroupApplicationDirection[]{GroupApplicationDirection.ApplicationSent, GroupApplicationDirection.ApplicationReceived};
// Query pending, rejected, and joined statuses
GroupApplicationStatus[] status = new GroupApplicationStatus[]{GroupApplicationStatus.ManagerUnHandled, GroupApplicationStatus.ManagerRefused, GroupApplicationStatus.Joined};
RongCoreClient.getInstance().getGroupApplications(option, directions, status, new IRongCoreCallback.PageResultCallback<GroupApplicationInfo>() {
@Override
public void onSuccess(PagingQueryResult<GroupApplicationInfo> result) {
if (!TextUtils.isEmpty(result.getPageToken())) {
// Use returned pageToken to fetch next page
getGroupApplications(result.getPageToken());
} else {
// Retrieval complete
}
}

@Override
public void onError(IRongCoreEnum.CoreErrorCode e) {
// Retrieval failed
}
});
}