管理聊天室成员

更新时间:2022-02-28

环信即时通讯 IM iOS SDK 提供 IEMChatroomManager 类、 EMChatroomManagerDelegate 类 和 EMChatroom 类,支持对聊天室成员的管理,包括获取、添加和移除聊天室成员等,主要方法如下:

  • getChatroomMemberListFromServerWithId 获取聊天室成员列表;
  • getChatroomBlacklistFromServerWithId 获取聊天室黑名单列表;
  • getChatroomWhiteListFromServerWithId 获取聊天室白名单列表;
  • isMemberInWhiteListFromServerWithChatroomId 查看自己是否在聊天室白名单中;
  • addWhiteListMembers 添加白名单;
  • removeWhiteListMembers 移除白名单;
  • removeMembers 将成员移出聊天室;
  • blockMembers 加人到聊天室黑名单;
  • unblockMembers 从聊天室黑名单中移除;
  • getChatroomMuteListFromServerWithId 获取聊天室被禁言列表;
  • muteMembers 将一组成员禁言;
  • unmuteMembers 解除禁言;
  • muteAllMembersFromChatroom 设置全员禁言;
  • unmuteAllMembersFromChatroom 解除全员禁言;
  • updateChatroomOwner 变更聊天室所有者;
  • addAdmin 添加聊天室管理员;
  • removeAdmin 移除聊天室管理员。

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

管理聊天室成员

获取聊天室成员列表

所有成员都可以调用该接口获取当前聊天室成员列表。

注意

聊天室创建者、管理员和普通成员均可调用该接口。

示例代码如下:

EMError *error = nil;
[[EMClient sharedClient].roomManager getChatroomMemberListFromServerWithId:@"chatroomId" cursor:1 pageSize:20 error:&error];

获取聊天室黑名单列表

管理员可以调用该接口获取当前聊天室黑名单成员列表。

注意

仅聊天室所有者和管理员可调用该接口。

示例代码如下:

EMError *error = nil;
[[EMClient sharedClient].roomManager getChatroomBlacklistFromServerWithId:@"chatroomId" pageNumber:1 pageSize:20 error:&error];

获取聊天室白名单列表

管理员可调用该接口获取当前聊天室的白名单成员列表。

注意

仅聊天室所有者和管理员可调用该接口。

示例代码如下:

EMError *error = nil;
[EMClient.sharedClient.roomManager getChatroomWhiteListFromServerWithId:@"aChatroomId" error:&error];

查看自己是否在聊天室白名单中

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

示例代码如下:

EMError *error = nil;
[EMClient.sharedClient.roomManager isMemberInWhiteListFromServerWithChatroomId:@"aChatroomId" error:&error];

将成员添加至白名单

管理员可调用该接口将成员添加至聊天室白名单。

注意

仅聊天室所有者和管理员可调用该接口。

示例代码如下:

EMError *error = nil;  
[EMClient.sharedClient.roomManager addWhiteListMembers:@[@"userId1",@"userId2"] fromChatroom:@"aChatroomId" error:&error];

将成员移出白名单

管理员可调用该接口将成员移出聊天室白名单。

注意

仅聊天室所有者和管理员可调用该接口。

示例代码如下:

EMError *error = nil;  
[EMClient.sharedClient.roomManager removeWhiteListMembers:@[@"userId1",@"userId2"] fromChatroom:@"aChatroomId" error:&error];

将成员移出聊天室

管理员可调用该接口将成员移出聊天室。

注意

  • 仅聊天室所有者和管理员可调用该接口;
  • 聊天室成员会收到相应的通知,触发其他成员的 didDismissFromChatroom 代理回调方法;
  • 移出原因:EMChatroomBeKickedReasonBeRemoved
  • 成员被移出后可重新进入聊天室。

示例代码如下:

EMError *error = nil;
[[EMClient sharedClient].roomManager removeMembers:@[@"userName"] fromChatroom:@"chatroomId" error:&error];

将成员加入聊天室黑名单

管理员可调用该接口将成员添加至聊天室黑名单。

注意

  • 仅聊天室所有者和管理员可调用该接口;
  • 聊天室成员会收到相应的通知,触发其他成员的 didDismissFromChatroom 代理回调方法;
  • 移除原因:EMChatroomBeKickedReasonBeRemoved;
  • 在黑名单中的成员需要聊天室所有者权限的所有者主动从黑名单中移除后,才能再次加入聊天室。

示例代码如下:

EMError *error = nil;
[[EMClient sharedClient].roomManager blockMembers:@[@"userName"] fromChatroom:@"chatroomId" error:&error];

将成员移出聊天室黑名单

管理员可调用该接口将成员移出聊天室黑名单。

注意

仅聊天室所有者和管理员可调用该接口。

示例代码如下:

EMError *error = nil;
[[EMClient sharedClient].roomManager unblockMembers:@[@"userName"] fromChatroom:@"chatroomId" error:&error];

管理禁言

获取聊天室被禁言列表

管理员可调用该接口获取聊天室被禁言列表。

注意

  • 仅聊天室所有者和管理员可调用该接口;
  • 权限高者可禁言权限低者,反之不允许。

示例代码如下:

EMError *error = nil;
[[EMClient sharedClient].roomManager getChatroomMuteListFromServerWithId:@"chatroomId" pageNumber:1 pageSize:20 error:&error];

将一组成员禁言

管理员可调用该接口将一组成员禁言。

注意

  • 仅聊天室所有者和管理员可调用该接口;
  • 权限高者可禁言权限低者,反之不允许;
  • 聊天室成员会收到相应的通知,触发其他成员的 chatroomMuteListDidUpdate: addedMutedMembers: muteExpire 代理回调方法。

示例代码如下:

EMError *error = nil;
[[EMClient sharedClient].roomManager muteMembers:@[@"userName"] muteMilliseconds:-1 fromChatroom:@"chatroomId" error:&error];

解除禁言

管理员可调用该接口将一组成员解除禁言。

注意

  • 仅聊天室所有者和管理员可调用该接口;
  • 权限高者可禁言权限低者,反之不允许;
  • 聊天室成员会收到相应的通知,触发其他成员的 chatroomMuteListDidUpdate: removedMutedMembers 代理回调方法。

示例代码如下:

EMError *error = nil;
[[EMClient sharedClient].roomManager unmuteMembers:@[@"userName"] fromChatroom:@"chatroomId" error:&error];

设置全员禁言

管理员可调用该接口设置全员禁言。

注意

  • 仅聊天室所有者和管理员可调用该接口;
  • 设置全员禁言后,仅在白名单中的成员可以发言;
  • 聊天室成员会收到相应的通知,触发其他成员的 chatroomMuteListDidUpdate: addedMutedMembers: muteExpire 代理回调方法。

示例代码如下:

EMError *error = nil;
[EMClient.sharedClient.roomManager muteAllMembersFromChatroom:@"chatRoomId" error:&error];

解除全员禁言

管理员可调用该接口设置解除全员禁言。

注意

  • 仅聊天室所有者和管理员可调用该接口;
  • 解除全员禁言后,仅在黑名单中的成员不可以发言;
  • 聊天室成员会收到相应的通知,触发其他成员的 chatroomMuteListDidUpdate: addedMutedMembers: muteExpire 代理回调方法。

示例代码如下:

EMError *error = nil;
[EMClient.sharedClient.roomManager unmuteAllMembersFromChatroom:@"chatRoomId" error:&error];

管理管理员

变更聊天室所有者

所有者调用该接口可以变更聊天室所有者。

注意

  • 聊天室的所有者仅有一人;
  • 仅聊天室所有者可调用该接口;
  • 聊天室成员会收到相应的通知,触发其他成员的 chatroomOwnerDidUpdate: newOwner: oldOwner 代理回调方法。

示例代码如下:

EMError *error = nil;
[[EMClient sharedClient].roomManager updateChatroomOwner:@"chatroomId" newOwner:@"textString" error:&error];

添加聊天室管理员

聊天室所有者调用该接口可以添加聊天室管理员。

注意

  • 聊天室的所有者仅有一人;
  • 需要聊天室所有者权限;
  • 聊天室成员会收到相应的通知,触发其他成员的 chatroomAdminListDidUpdate: addedAdmin 代理回调方法。

示例代码如下:

EMError *error = nil;
[[EMClient sharedClient].roomManager addAdmin:@"userName" toChatroom:@"chatroomId" error:&error];

移除聊天室管理员

所有者调用该接口可以移除聊天室管理员。

注意

  • 聊天室的所有者仅有一人;
  • 仅聊天室所有者可调用该接口;
  • 聊天室成员会收到相应的通知,触发其他成员的 chatroomAdminListDidUpdate: removedAdmin 代理回调方法。

示例代码如下:

EMError *error = nil;
[[EMClient sharedClient].roomManager removeAdmin:@"userName" fromChatroom:@"chatroomId" error:&error];

聊天室相关回调

管理员对聊天室的相关操作其他成员会收到回调通知,具体实现为先注册聊天室回调,然后实现具体聊天室回调方法。

示例代码如下:

//注册聊天室回调。
[[EMClient sharedClient].roomManager addDelegate:self delegateQueue:nil];

示例代码如下:

//移除聊天室回调。
[[EMClient sharedClient].roomManager removeDelegate:self];

聊天室代理方法

/**
 *  有用户加入聊天室。
 *  @param aChatroom    加入的聊天室。
 *  @param aUsername    加入者。
    */
 - (void)userDidJoinChatroom:(EMChatroom *)aChatroom
      user:(NSString *)aUsername{
 }

/**
 *  有用户离开聊天室。
 *  @param aChatroom    离开的聊天室。
 *  @param aUsername    离开者。
    */
 - (void)userDidLeaveChatroom:(EMChatroom *)aChatroom
      user:(NSString *)aUsername {
  }

/**
 *  被踢出聊天室。
 *  @param aChatroom    被踢出的聊天室。
 *  @param aReason      被踢原因。
    */
 - (void)didDismissFromChatroom:(EMChatroom *)aChatroom
      reason:(EMChatroomBeKickedReason)aReason {
  }

/**
 *  有成员被加入禁言列表。
 *  @param aChatroom        聊天室。
 *  @param aMutedMembers    被禁言的成员。
 *  @param aMuteExpire      禁言失效时间,暂时不可用。
    */
 - (void)chatroomMuteListDidUpdate:(EMChatroom *)aChatroom
      addedMutedMembers:(NSArray *)aMutes
             muteExpire:(NSInteger)aMuteExpire {
  }

/**

 *  有成员被移出禁言列表。
 *  @param aChatroom        聊天室。
 *  @param aMutedMembers    移出禁言列表的成员。
    */
 - (void)chatroomMuteListDidUpdate:(EMChatroom *)aChatroom
      removedMutedMembers:(NSArray *)aMutes {           
  }

/**
 *  有成员被加入管理员列表。
 *  @param aChatroom    聊天室。
 *  @param aAdmin       加入管理员列表的成员。
    */
- (void)chatroomAdminListDidUpdate:(EMChatroom *)aChatroom
      addedAdmin:(NSString *)aAdmin {
  }

/**
 *  有成员被移出管理员列表。
 *  @param aChatroom    聊天室。
 *  @param aAdmin       移出管理员列表的成员。
    */
- (void)chatroomAdminListDidUpdate:(EMChatroom *)aChatroom
      removedAdmin:(NSString *)aAdmin {
  }

/**
 *  聊天室创建者有更新。
 *  @param aChatroom    聊天室。
 *  @param aNewOwner    新聊天室所有者。
 *  @param aOldOwner    旧聊天室所有者。
    */
 - (void)chatroomOwnerDidUpdate:(EMChatroom *)aChatroom
      newOwner:(NSString *)aNewOwner
      oldOwner:(NSString *)aOldOwner {
  }
  

参考信息

被踢出聊天室原因的枚举类型 描述
EMChatroomBeKickedReasonBeRemoved 被管理员移出聊天室。
EMChatroomBeKickedReasonDestroyed 聊天室被销毁。
EMChatroomBeKickedReasonOffline 当前账号离线。