群成员管理

更新时间:2022-02-28

本文介绍如何管理群组成员。

环信即时通讯 IM iOS SDK 提供 IEMGroupManager 类和 EMGroup 类,用于管理群成员,其中包含如下主要方法:

  • addMembers 邀请用户入群;
  • removeMembers 群组踢人;
  • updateGroupOwner 变更群主;
  • addAdmin 添加群管理员;
  • removeAdmin 移除群管理员;
  • getGroupAdmin 获取管理员列表;
  • blockMembers 将群成员加入群黑名单;
  • unblockMembers 将用户移除群黑名单;
  • getGroupBlacklistFromServerWithId 获取群黑名单列表;
  • muteMembers 禁言指定群成员;
  • unmuteMembers 将指定用户从禁言列表中移除;
  • getGroupMuteListFromServerWithId 获取群禁言列表;
  • muteAllMembersFromGroup 开启群全员禁言;
  • unmuteAllMembersFromGroup 关闭群全员禁言;
  • addWhiteListMembers 将群成员添加到群白名单;
  • removeWhiteListMembers 将群成员从群白名单中移除;
  • isMemberInWhiteListFromServerWithGroupId 检查自己是否在群白名单中;
  • getGroupWhiteListFromServerWithId 获取群白名单列表。

开始前,请确保满足以下条件:

群组加人

1、根据不同群类型,群组加人会有差别。

  • 不管是私有群还是公开群,群主和管理员均可通过 IEMGroupManager#addMembers 加人;
  • 如果私有群放开了群成员要求,群成员也可邀请用户入群。

2、如果需要用户确认才能加入群的情况。

受邀用户会收到群组事件回调 EMGroupManagerDelegate#groupInvitationDidReceive

  • 如果用户同意加入群组。
    • 邀请人会收到回调 EMGroupManagerDelegate#groupInvitationDidAcceptEMGroupManagerDelegate#userDidJoinGroup
    • 其他群成员会收到回调 EMGroupManagerDelegate#userDidJoinGroup
  • 如果用户拒绝加入群组,邀请人会收到回调 EMGroupManagerDelegate#groupInvitationDidDecline

3、如果不需要用户确认直接加入群组的情况。

  • 受邀用户会收到回调 EMGroupManagerDelegate#didJoinGroup
  • 邀请人会收到回调 EMGroupManagerDelegate#groupInvitationDidAcceptEMGroupManagerDelegate#userDidJoinGroup;其他群成员会收到回调 EMGroupManagerDelegate#userDidJoinGroup

4、用户入群后,将可以收到群消息。

示例代码如下:

  • 邀请加群:
[[EMClient sharedClient].groupManager addMembers:@{@"member1",@"member2"}
                                                                                              toGroup:@"groupID" 
                                                                                                message:@"message" 
                                                                                         completion:nil];
  • 群组踢人

1、管理员以上权限可以将群成员踢出群组。

2、群成员被踢出群组后,将不会再接收到群消息。

3、群成员被踢出群组后,被踢群成员会收到群组事件回调 EMGroupManagerDelegate#didLeaveGroup,其他成员会收到回调 EMGroupManagerDelegate#userDidLeaveGroup

示例代码如下:

[[EMClient sharedClient].groupManager removeMembers:@{@"member"}
                                                                                                 fromGroup:@"groupsID" 
                                                                                                completion:nil];

变更群组所有者

群主可以将权限移交给群组中指定成员,移交后原群主只具备普通成员权限,群成员会接收到群组事件回调 EMGroupManagerDelegate#groupOwnerDidUpdate

示例如下:

[[EMClient sharedClient].groupManager updateGroupOwner:@"groupID"
                                                                                                        newOwner:@"newOwner"
                                                                                                                error:nil];

添加和移除管理员权限

添加管理员权限

管理员除了不具备解散群组等少数权限外,拥有群组的绝大部分权限。添加群管理员仅限群主操作。添加群管理员后,添加为管理员的成员和其他管理员会接收到群组事件回调 EMGroupManagerDelegate#groupAdminListDidUpdate

示例代码:

/**
 *  Add group admin, need Owner permissions
 *
 *  Synchronization method will block the current thread
 *
 *  @param aAdmin     Admin
 *  @param aGroupId   Group ID
 *  @param pError     Error
 *  @result           Group instance
 */
[[EMClient sharedClient].groupManager addAdmin:@"member" 
                                                                                         toGroup:@"groupID" 
                                                                                               error:nil];

移除管理员权限

指定群管理员若被群主移除管理员权限,只具备普通群成员的权限。移除管理员权限的成员和其他管理员会接收到群组事件回调 EMGroupManagerDelegate#groupAdminListDidUpdate

示例代码如下:

/**
 *  Remove group admin, need Owner permissions
 *
 *  @param aAdmin     Admin
 *  @param aGroupId   Group ID
 *  @param aCompletionBlock The callback block of completion
 *
 */
[[EMClient sharedClient].groupManager removeAdmin:@"admin" 
                                                                                          fromGroup:@"groupID"                                                                                                    error:nil];

群组黑名单

群主及群管理员可以将群组中的指定群成员加入或者移出群黑名单。群成员被加入黑名单后将无法收发群消息。

将群成员拉入群组黑名单

群成员被群主或者群管理员加入群黑名单后将无法接收群消息,并同时被移出群粗,该用户无法申请再次加入群组。

示例代码如下:

/**

 *  Add users to group blacklist, owner‘s authority is required
    *
 *  @param aMembers         Users to be added into the blacklist
 *  @param aGroupId         Group ID
 *  @param aCompletionBlock The callback block of completion
    *
     */
    [[EMClient sharedClient].groupManager blockMembers:members 
                                                                                               fromGroup:@"groupID" 
                                                                                            completion:nil];
    

将群成员移出群黑名单

指定用户被群主或者群管理员移出群黑名单后,可以再次申请加入群组。

示例代码如下:

/**

* Remove users from the blacklist(Only the group owner can call this function)
  *
* Asynchronous processing required
  *
* @param groupId,     Group ID
* @param username,    Username to be unblocked
  */
  ChatClient.getInstance().groupManager().unblockUser(groupId, username);
  

获取群组的黑名单用户列表

群主及群管理员可以从服务或获取群组的黑名单用户 ID 列表。

示例代码如下:

/**

 *  Get the blacklist of group from the server, need owner / admin permissions
    *
 *  @param aGroupId         Group ID
 *  @param aPageNum         Page number
 *  @param aPageSize        Page size
 *  @param pError           Error
    *
 *  @result NSArray       Group blacklist
    */
    [[EMClient sharedClient].groupManager getGroupBlacklistFromServerWithId:@"groupId" 
                                            pageNumber:pageNumber 
                                                pageSize:pageSize 
                                            completion:nil];
    

群组禁言

为了方便管理群组,环信即时通讯 IM SDK 提供了针对成员和群组的禁言操作。

将群成员加入和移出禁言列表

为了精细化管理群成员发言,群主和群成员可以根据情况将指定群成员加入或者移出群禁言列表。群成员被加入群禁言列表后,将不能够发言,即使其被加入群白名单也不能发言。

  • 将群成员加入禁言列表中

群成员被群主或者群管理员加入禁言列表后,被禁言成员和其他未操作的管理员或者群主将会收到群组事件回调 EMGroupManagerDelegate#groupMuteListDidUpdate

/**

 *  Mute group members, need Owner / Admin permissions
    *
 *  Synchronization method will block the current thread
    *
 *  @param aMuteMembers         The list of mute, type is <NSString>
 *  @param aMuteMilliseconds    Muted time duration in millisecond
 *  @param aGroupId             Group ID
 *  @param pError               Error
    *
 *  @result    Group instance
    */
    [[EMClient sharedClient].groupManager muteMembers:members 
                                                                               muteMilliseconds:60 
                                                                                            fromGroup:@"groupID" 
                                                                                                    error:nil];
    
  • 将群成员移出禁言列表

群成员被群主或者群管理员移出禁言列表后,被移出的群成员及其他未操作的管理员或者群主将会收到群组事件回调 EMGroupManagerDelegate#groupMuteListDidUpdate

/**

 *  Unmute group members, need Owner / Admin permissions
    *
 *  Synchronization method will block the current thread
    *
 *  @param aMembers         The list of unmute, type is <NSString>
 *  @param aGroupId         Group ID
 *  @param pError           Error
    *
 *  @result    Group instance
    */
    [[EMClient sharedClient].groupManager unmuteMembers:members 
                                                                                                fromGroup:@"groupID" 
                                                                                                        error:nil];
    

获取群成员禁言列表

群主和群管理员可以获取群组的禁言列表。

示例代码如下:

/**

 *  Get the mutes of group  from the server
    *
 *  Group manager and the group administrator allow the operate
    *
 *  @param aGroupId         Group ID
 *  @param aPageNum         Page number
 *  @param aPageSize        Page size
 *  @param pError           Error
    *
 *  @result NSArray       Group muteList
    */
    [[EMClient sharedClient].groupManager getGroupMuteListFromServerWithId:@"groupID"
                                                                                                                                   pageNumber:pageNumber
                                                                                                                                       pageSize:pageSize
                                                                                                                                            error:nil];
    

开启和关闭全员禁言

为了快捷管理群成员发言,群主和群成员可以开启和关闭群组全员禁言。开启群组全员禁言后,除了在群白名单中的群成员,其他成员将不能发言。

开启全员禁言

群主和群管理员开启群组全员禁言后,除了白名单中的群成员,其他成员将不能发言。开启群组全员禁言后,群成员会收到群组事件回调 EMGroupManagerDelegate#groupAllMemberMuteChanged

示例代码如下:

/**

 * Mute all members
 * @param groupId Group ID
   */
   [[EMClient sharedClient].groupManager muteAllMembersFromGroup:@"groupID"
                                                                                                                            error:nil];
   

关闭全员禁言

群主和群管理员可以关闭群组全员禁言。关闭群组全员禁言后,群成员将会收到群组事件回调 EMGroupManagerDelegate#groupAllMemberMuteChanged

示例代码如下:

/**

 * Lift all members' ban
 * @param groupId Group ID
   */
   [[EMClient sharedClient].groupManager unmuteAllMembersFromGroup:@"groupID"
                                                                                                                                error:nil];
   

白名单管理

群主和群管理员可以将指定群成员加入或者移出群白名单,在开启群组全员禁言后,白名单用户不受全员禁言限制。如果白名单用户在群禁言列表中,该用户也不能发言。

添加用户到白名单

群成员被群主或者群管理员添加到群白名单后,该群成员及其他未操作的群管理员和群主将会收到群组事件回调 EMGroupManagerDelegate#groupWhiteListDidUpdate

/**

 * Add users to the whitelist
 * @param groupId Group ID
 * @param members member ID list
   */
   [[EMClient sharedClient].groupManager addWhiteListMembers:members
                                                                                                          fromGroup:@"groupID" 
                                                                                                                    error:nil];
   

将用户从白名单移除

群成员被群主或者群管理员移除群白名单后,该群成员及其他未操作的群管理员和群主将会收到群组事件回调 EMGroupManagerDelegate#groupWhiteListDidUpdate

/**

 * Remove users from the whitelist
 * @param groupId Group ID
 * @param members member ID list
   */
   [[EMClient sharedClient].groupManager removeWhiteListMembers:members
                                                                                                             fromGroup:@"groupID" 
                                                                                                                       error:nil];
   

检查自己是否在白名单中

用户可以调用如下 API 检查自己是否在群白名单中:

/**

 * Check if you are in the whitelist
 * @param groupId Group ID
   */
   [[EMClient sharedClient].groupManager
                                                               isMemberInWhiteListFromServerWithGroupId:@"groupID"
                                                                                                                                  error:nil];
   

获取白名单成员列表

群主和群管理员可以获取群组白名单列表。

/**

 * Get the list of whitelisted members from the server
 * @param groupId Group ID
   */
   [[EMClient sharedClient].groupManager getGroupWhiteListFromServerWithId:@"groupID"                                                                                                                                               error:nil];