Group Pages
This feature is supported starting from version 5.12.0.
Group-related pages include contact selection, group creation, group settings, and group member lists.
Enable the Service
Before using this feature, you must enable the User Profile Hosting service in the Console.
Contact Selection/Addition Page
The contact selection/addition page class is RCSelectUserViewController.
By default, this page displays the current user's friend list from the User Profile Hosting service.
Initialization
Call the initialization method of the RCSelectUserViewController class to build the friend list page.
Note: You need to create an RCSelectUserViewModel object as the business logic handler for RCSelectUserViewController.
Parameter Description
RCSelectUserViewController parameters:
| Parameter | Type | Description |
|---|---|---|
| viewModel | RCSelectUserViewModel | The business logic handler for RCSelectUserViewController. Fetches and processes the contact list display logic. |
RCSelectUserViewModel parameters:
| Parameter | Type | Description |
|---|---|---|
| type | RCSelectUserType | Contact selection type: RCSelectUserTypeCreateGroup for group creation or RCSelectUserTypeInviteJoinGroup for adding members to a group. |
| groupId | NSString | Group ID (optional). Required when type is RCSelectUserTypeInviteJoinGroup. |
Sample Code
// Group ID (optional). Required when type is `RCSelectUserTypeInviteJoinGroup`.
RCSelectUserViewModel *vm = [RCSelectUserViewModel viewModelWithType:RCSelectUserTypeCreateGroup groupId:nil];
RCSelectUserViewController *vc = [[RCSelectUserViewController alloc] initWithViewModel:vm];
[self.navigationController pushViewController:vc animated:YES];
Configure Maximum Selectable Users
IMKit allows configuring the maximum number of selectable users per session via the maxSelectCount property of RCSelectUserViewModel. The default is 30. The configured value must be > 0 and ≤ 100.
Sample Code
RCSelectUserViewModel *vm = [RCSelectUserViewModel viewModelWithType:RCSelectUserTypeCreateGroup groupId:nil];
// Default max selectable count is 30
vm.maxSelectCount = 50;
RCSelectUserViewController *vc = [[RCSelectUserViewController alloc] initWithViewModel:vm];
[self.navigationController pushViewController:vc animated:YES];
Intercept Selection Completion Callback
Use the RCSelectUserViewModelDelegate protocol to intercept the selection completion callback.
- Add the delegate:
RCSelectUserViewModel *vm = [RCSelectUserViewModel viewModelWithType:RCSelectUserTypeCreateGroup groupId:nil];
vm.delegate = self;
RCSelectUserViewController *vc = [[RCSelectUserViewController alloc] initWithViewModel:vm];
[self.navigationController pushViewController:vc animated:YES];
- Implement the interception method:
- (BOOL)selectUserDidSelectComplete:(RCSelectUserViewModel *)viewModel
selectUserIds:(NSMutableArray <NSString *>*)selectUserIds
viewController:(UIViewController*)viewController {
return YES; // YES: SDK won't handle it; NO: SDK handles it
}
Group Creation Page
The group creation page class is RCGroupCreateViewController.
Initialization
Call the initialization method of RCGroupCreateViewController to build the page.
Note: Create an RCGroupCreateViewModel object as the business logic handler.
Parameter Description
RCGroupCreateViewController parameters:
| Parameter | Type | Description |
|---|---|---|
| viewModel | RCGroupCreateViewModel | Business logic handler for group creation. |
RCGroupCreateViewModel parameters:
| Parameter | Type | Description |
|---|---|---|
| inviteeUserIds | NSArray <NSString *>* | List of selected user IDs (excluding the current user). |
| delegate | RCGroupCreateViewModelDelegate | Delegate. |
Sample Code
NSArray *selectUserIds = @[@"userId1", @"userId2"];
RCGroupCreateViewModel *viewModel = [RCGroupCreateViewModel viewModelWithInviteeUserIds:self.selectUserIds];
viewModel.delegate = self;
RCGroupCreateViewController *vc = [[RCGroupCreateViewController alloc] initWithViewModel:viewModel];
[self.navigationController pushViewController:vc animated:YES];
Since the group ID must be provided by you, implement the generateGroupId method of RCGroupCreateViewModelDelegate to supply it to the IMKit SDK.
Sample Code
- (NSString *)generateGroupId {
return @"groupId";
}
Custom Avatar Click Event
To customize group avatar selection during creation, implement the avatar click method in RCGroupCreateViewModelDelegate:
- (void)groupPortraitDidClick:(UIViewController *)inViewController
resultBlock:(void(^)(NSString *portraitUrl))resultBlock {
// Navigate to avatar selection and return the result via resultBlock
NSString *portraitRemoteUrl = @"Remote avatar URL after upload";
resultBlock(portraitRemoteUrl);
}
Group Settings Page
Note: The "Do Not Disturb" and "Pin Conversation" cells shown in the image are demo implementations via custom cells and are not part of the built-in page.
Initialization
Call the initialization method of RCProfileViewController to build the page.
Note: Use an RCGroupProfileViewModel object as the business logic handler.
The same RCProfileViewController class is used for both group settings and user profiles, differentiated by the ViewModel type passed during initialization.
Parameter Description
RCProfileViewController parameters:
| Parameter | Type | Description |
|---|---|---|
| viewModel | RCProfileViewModel | Business logic handler. Use RCGroupProfileViewModel (a subclass) for group settings. |
RCGroupProfileViewModel parameters:
| Parameter | Type | Description |
|---|---|---|
| groupId | NSString | Group ID. |
Sample Code
RCGroupProfileViewModel *viewModel = [RCGroupProfileViewModel viewModelWithGroupId:self.targetId];
RCProfileViewController *vc = [[RCProfileViewController alloc] initWithViewModel:viewModel];
[self.navigationController pushViewController:vc animated:YES];
Custom Title
The built-in navigation bar title defaults to "Group Name (Member Count)". You can customize it after initialization:
RCProfileViewController *vc = [[RCProfileViewController alloc] initWithViewModel:viewModel];
vc.title = @"custom title";
Configure Displayed Member Count
Use the displayMaxMemberCount property of RCGroupProfileViewModel to set the maximum number of members displayed. Default is 30. The value must be ≥ 5 and ≤ 50.
RCGroupProfileViewModel *viewModel = [RCGroupProfileViewModel viewModelWithGroupId:self.targetId];
viewModel.delegate = self;
/// Max displayed members (default: 30). Must be between 5 and 50.
viewModel.displayMaxMemberCount = 20;
RCProfileViewController *vc = [[RCProfileViewController alloc] initWithViewModel:viewModel];
Customize Group Settings Cells
RCGroupProfileViewModel and RCMyProfileViewModel inherit from the same parent class RCProfileViewModel. Refer to the Current User Profile Page Custom Cells logic, replacing RCMyProfileViewModel with RCGroupProfileViewModel when checking for group settings pages.
Group Member List Page
Initialization
Clicking the member list cell in group settings navigates to this page by default. To customize or navigate from elsewhere, initialize using RCGroupMemberListViewController with an RCGroupMemberListViewModel.
Parameter Description
RCGroupMemberListViewController parameters:
| Parameter | Type | Description |
|---|---|---|
| viewModel | RCGroupMemberListViewModel | Business logic handler for member list display. |
RCGroupMemberListViewModel parameters:
| Parameter | Type | Description |
|---|---|---|
| groupId | NSString | Group ID. |
Sample Code
RCGroupMemberListViewModel *viewModel = [RCGroupMemberListViewModel viewModelWithGroupId:self.groupId];
RCGroupMemberListViewController *membersVC = [[RCGroupMemberListViewController alloc] initWithViewModel:viewModel];
membersVC.title = @"Group Members";
[self.navigationController pushViewController:membersVC animated:YES];
Configure Members per Page
Set the pageCount property of RCGroupMemberListViewModel during initialization. Default is 50. Value must be > 0 and ≤ 100:
RCGroupMemberListViewModel *viewModel = [RCGroupMemberListViewModel viewModelWithGroupId:self.groupId];
/// Members per page (default: 50). Must be between 1 and 100.
viewModel.pageCount = 60;
Custom Member Click Event
By default, clicking a member navigates to the built-in user profile page. To customize:
- Set the delegate:
RCGroupMemberListViewModel *viewModel = [RCGroupMemberListViewModel viewModelWithGroupId:group.groupId];
viewModel.delegate = self;
- Implement the click handler:
- (BOOL)groupMemberList:(RCGroupMemberListViewModel *)viewModel
viewController:(UIViewController*)viewController
tableView:(UITableView *)tableView
didSelectRow:(NSIndexPath *)indexPath
cellViewModel:(RCGroupMemberCellViewModel *)cellViewModel {
return YES; // YES: SDK won't handle it; NO: SDK handles it
}
Remove Members Page
Initialization
The group settings page includes navigation to this page by default. To customize or navigate from elsewhere, initialize RCRemoveGroupMembersViewController with an RCRemoveGroupMembersViewModel.
Parameter Description
RCRemoveGroupMembersViewController parameters:
| Parameter | Type | Description |
|---|---|---|
| viewModel | RCRemoveGroupMembersViewModel | Business logic handler for member removal. |
RCRemoveGroupMembersViewModel parameters:
| Parameter | Type | Description |
|---|---|---|
| groupId | NSString | Group ID. |
Sample Code
RCRemoveGroupMembersViewModel *viewModel = [RCRemoveGroupMembersViewModel viewModelWithGroupId:group.groupId];
RCRemoveGroupMembersViewController *vc = [[RCRemoveGroupMembersViewController alloc] initWithViewModel:viewModel];
[self.navigationController pushViewController:vc animated:YES];
Configure Maximum Removable Members per Session
Set the maxSelectCount property of RCRemoveGroupMembersViewModel. Default is 30. Value must be > 0 and ≤ 100:
RCRemoveGroupMembersViewModel *viewModel = [RCRemoveGroupMembersViewModel viewModelWithGroupId:group.groupId];
/// Max selectable count per session (default: 30). Must be between 1 and 100.
viewModel.maxSelectCount = 60;
Custom Member Click Event
To override the default profile navigation:
- Set the delegate:
RCRemoveGroupMembersViewModel *viewModel = [RCRemoveGroupMembersViewModel viewModelWithGroupId:group.groupId];
viewModel.delegate = self;
- Implement the handler:
- (BOOL)groupRemoveMembers:(RCRemoveGroupMembersViewModel *)viewModel
viewController:(UIViewController*)viewController
tableView:(UITableView *)tableView
didSelectRow:(NSIndexPath *)indexPath
cellViewModel:(RCRemoveGroupMemberCellViewModel *)cellViewModel {
return YES; // YES: SDK won't handle it; NO: SDK handles it
}
Intercept Removal Completion Callback
To customize post-selection behavior:
- Set the delegate:
RCRemoveGroupMembersViewModel *viewModel = [RCRemoveGroupMembersViewModel viewModelWithGroupId:group.groupId];
viewModel.delegate = self;
- Implement the callback:
- (BOOL)groupRemoveMembersDidSelectComplete:(RCRemoveGroupMembersViewModel *)viewModel
selectUserIds:(NSMutableArray <NSString *>*)selectUserIds
viewController:(UIViewController*)viewController {
return YES; // YES: SDK won't handle it; NO: SDK handles it
}