创建和管理聊天室

更新时间:2022-02-28

本文介绍如何创建和管理聊天室。

环信即时通讯 IM iOS SDK 提供 IEMChatroomManager 类、EMChatroomManagerDelegate 类和 EMChatroom 类,支持聊天室的创建、获取、修改、删除等管理功能。主要方法如下:

  • getChatroomsFromServerWithPage 从服务器获取指定数目的聊天室;
  • createChatroomWithSubject 创建聊天室;
  • chatroomWithId 获取聊天室实例;
  • joinChatroom 加入聊天室;
  • leaveChatroom 退出聊天室;
  • destroyChatroom 解散聊天室。

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

  • 完成 SDK 初始化,详见 快速开始
  • 了解环信即时通讯 IM 的使用限制,详见 使用限制
  • 了解环信即时通讯 IM 聊天室不同版本的数量限制,详见 环信即时通讯 IM 价格
  • 聊天室创建者和管理员的数量之和不能超过 100 ,即管理员最多可添加 99 个。

从服务器获取指定数目的聊天室

用户可调用 getChatroomsFromServerWithPage 接口从服务器获取指定数目的聊天室列表,最多可获取 1,000 个聊天室。

EMError *error = nil;
[[EMClient sharedClient].roomManager getChatroomsFromServerWithPage:1 pageSize:50 error:&error];

创建聊天室

需要在服务器端调用 createChatroomWithSubject 接口创建聊天室。

示例代码如下:

EMError *error = nil;
EMChatroom *retChatroom = [[EMClient sharedClient].roomManager createChatroomWithSubject:@"aSubject" description:@"aDescription" invitees:@[@"user1",@[user2]]message:@"aMessage" maxMembersCount:aMaxMembersCount error:&error];

获取聊天室实例

用户调用该接口获取聊天室的基本信息。

示例代码如下:

EMChatroom *chatRoom = [EMChatroom chatroomWithId:@"chatroomId"];

加入聊天室

用户调用该接口可以进入具体的聊天室。

注意

  • 权限:所有人都有权限。
  • 其他成员收到通知,触发其他成员的 userDidJoinChatroom 代理回调方法。

示例代码如下:

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

退出聊天室

用户调用该接口可以退出当前聊天室。

注意

  • 权限:所有人都有权限。
  • 其他成员收到,触发其他成员的 userDidLeaveChatroom 代理回调方法。

示例代码如下:

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

解散聊天室

管理员调用该接口可以解散聊天室。

注意

  • 权限:需要聊天室所有者权限。
  • 其它成员会收到解散通知,并且被踢出聊天室,触发其他成员的 didDismissFromChatroom 代理回调方法。

示例代码如下:

EMError *error = nil;
[[EMClient sharedClient].roomManager destroyChatroom:self.chatroom.chatroomId error:&error];

离开聊天室时,SDK 默认会删除此聊天室本地所有消息,如果不想删除,可以设置以下属性为 NO

/**  

 *  \~chinese
 *  离开聊天室时是否删除所有消息, 默认为 `YES`。
    *
 *  \~english 
 *  Whether to delete all the chat room messages when leaving the chat room, default is YES
    */
    @property (nonatomic, assign) BOOL isDeleteMessagesWhenExitChatRoom;
    

示例代码如下:

EMOptions *retOpt = [EMOptions optionsWithAppkey:@"appkey"];
retOpt.isDeleteMessagesWhenExitChatRoom = NO;

设置聊天室相关回调

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

//注册聊天室回调。
[[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 {
  }