聊天室

聊天室跟普通的IM群(微信群,QQ群等)相比最大的不同点在于它是一个比较开放的虚拟组织。我们可以将直播聊天室比喻成一个广场,广场是开放无边界的,所有的人都可以随进随出,而群组就像一个房间,是一个有边界有容量上限的私密组织,并且进入这个房间需要一定条件,一般是主动申请加入或被邀请加入。              

1、相关接口

直播sdk相关接口分2大类别:   
                 
后台Rest提供接口
具体参考文档地址:服务器直播聊天室接口                                  
  • 创建聊天室                                                 
  • 切换聊天室状态(开启/关闭/销毁)
                        
SDK接口文档(本页面提供)                                    
IOS SDK内部提供的接口: 进入聊天室,聊天室内发送消息,获取聊天室信息,获取聊天室成员列表,获取成员信息,对成员进行禁言、拉黑、踢出,修改个人信息,修改聊天室信息,退出聊天室等接口。
                        

2、聊天室三种成员角色

创建者(权限最高)>管理员>普通成员(权限高的能对权限低的做相应处理)。
                                    
  •  创建者:可以对所有成员进行管理,禁言/解除禁言/拉黑/从黑名单移除/踢出/修改聊天室信息。                                    
  •  管理员:只能对成员进行管理,禁言/解除禁言/拉黑/从黑名单移除/踢出。                                        
  •  普通成员:无权限
  • /** 聊天室房间创建者*/
  • LiveChatRoomMemberRole_Creator=1, 
  • /** 聊天室房间管理理者*/
  • LiveChatRoomMemberRole_Admin=2,
  • /** 聊天室房间成员*/
  • LiveChatRoomMemberRole_Member=3, 

3、聊天室管理

聊天室管理类:ECLiveChatRoomManager查看API

进入聊天室 

用户要在聊天室内说话,必须先调用接口进入此聊天室。 用户进入聊天室后,不会收到此聊天室的历史消息推送。
代码示例
  • /** 
  • @brief 加入聊天室 
  • @param request 加 入聊天室请求类 
  • @param completion 回调, [error 错误信息, roomInfo 房间信息, member 请求加入聊天室的成员信息] 
  • */ 
  • -(void)joinLiveChatRoom:(ECJoinLiveChatRoomRequest *)request completion:(void(^)(ECError *error,ECLiveChatRoomInfo *roomInfo,ECLiveChatRoomMember *membe r))completion; 
  • ECJoinLiveChatRoomRequest *request = [[ECJoinLiveChatRoomRequest alloc] init ]; 
  • request.roomId = @"聊天室房间id"; 
  • request.nickName = @”昵称”; 
  • [[ECDevice sharedInstance].liveChatRoomManager joinLiveChatRoom:request comp letion:^(ECError *error, ECLiveChatRoomInfo *roomInfo, ECLiveChatRoomMember *member) {
  •     if (error.errorCode ==ECErrorType_NoError) {
  •     // 加入成功之后做跳转逻辑 
  •     } else {
  •     // 加入的错误码,详见错误码介绍 
  • }]; 

聊天室内发送消息

目前只支持发送文本消息,其他消息暂不支持,用户如果想发送其他消息,可以用userdata发送自定义消息。
代码示例              
  • //1. 构造文本消息体 
  • ECTextMessageBody *messageBody = [[ECTextMessageBody alloc] initWithText:@"你好,欢迎来到云通讯"]; 
  • //2. 构造出具体消息,设置消息接收者、对应的消息体 
  • //发送单聊消息,接收者传对 方的登录账号;发送群组消息,接收者传群组id 
  • ECMessage *message = [[ECMessage alloc] initWithReceiver:@"John的账号Id" body:messageBody]; 
  • NSDate* date = [NSDate dateWithTimeIntervalSinceNow:0]; 
  • NSTimeInterval tmp =[date timeIntervalSince1970]*1000; 
  • //3. 设置消息时间(发送消息是本地时间,接收消息是服务器时间) 
  • message.timestamp = [NSString stringWithFormat:@"%lld",(long long)tmp]; 
  • //4. 消息发送 
  • [[ECDevice sharedInstance].liveChatRoomManager sendLiveChatRoomMessage:message progress:self completion:^(ECError*error, ECMessage *amessage) { 
  • if (error.errorCode == ECErrorType_NoError
  •  {
  • //发送成功处理
  • }else{
  • //失败处理
  • }
  • }];

聊天室接收消息 

设置 [ECDevice sharedInstance].delegate ,实现以下方法,当收到聊天室消息时会主动调用详见demo ECDeviceDelegateHelper+LiveChatRoom.h。
代码示例                         
  • - (void)onReceiveLiveChatRoomMessage:(ECMessage *)message {if (message.from.length==0) return;if (message.timestamp) {
  •         NSDate* date = [NSDate dateWithTimeIntervalSinceNow:0];
  •         NSTimeInterval tmp =[date timeIntervalSince1970]*1000;
  •         message.timestamp = [NSString stringWithFormat:@"%lld", (long long)tmp];}
  •         [[NSNotificationCenter defaultCenter] postNotificationName:
  •         KNOTIFICATION_onLiveChatRoomMesssageChanged object:message];
  •         }                      
                                                               

获取聊天室信息 

 此接口可以远程获取聊天室信息,SDK不会缓存聊天室信息,开发者需要根据业务自己做好缓存。
 代码示例
  • /** 
  • @brief 查询聊天室信息 
  • @param roomId 聊天室id 
  • @param completion 回调 [error 错误信息,roomInfo 房间信息] */
  •  
  • -(void)queryLiveChatRoomInfo:(NSString *)roomId completion:(void(^)(ECError *error,ECLiveChatRoomInfo *roomInfo))completion;
  • [[ECDevice sharedInstance].liveChatRoomManager queryLiveChatRoomInfo:self.ro 
  • omId completion:^(ECError *error, ECLiveChatRoomInfo *roomInfo) { 
  •     if (error.errorCode == ECErrorType_NoError) 
  •     {//成功获取聊天室信息
  •     }else{
  •     //获取失败
  •     } 
  • }];                                                                  

修改聊天室信息 

只有创建者才能修改房间信息,创建者可以修改公告、房间昵称、是否全员禁言等功能。
代码示例
  • /** 
  • @brief 修改聊天室信息 
  • @param request 修改聊天室请求类 
  • @param completion 回调[error 错误信息, roomInfo 最新聊天室信息] 
  • */ 
  • - (void)modifyLiveChatRoomInfo:(ECModifyLiveChatRoomInfoRequest *)request co mpletion:(void(^)(ECError *error,ECLiveChatRoomInfo *roomInfo))completion; 
  • ECModifyLiveChatRoomInfoRequest *request = [[ECModifyLiveChatRoomInfoRequest alloc] init]; 
  • request.roomId = @"聊天室房间id"; 
  • request.roomName = @"房间名称"; 
  • request.announcement = @"公告"; 
  • //是否全员禁言  
  • request.isAllMuteMode = NO; 
  • request.roomExt = @"透传字段";                                                                    

获取聊天室成员列表 

此接口可以远程获取聊天室成员列表,SDK不会缓存聊天室成员列表和查询单个成员信息,开发者需要根据业务自己做好缓存。
代码示例 
  • /** 
  • @brief 查询聊天室成员列列表 
  • @param roomId 聊天室id 
  • @param userId 成员id
  • @param pageSize  页数 
  • @param completion 回调[error 错误信息, userArray 聊天室成员] */
  •  
  • - (void)queryLiveChatRoomMembers:(NSString *)roomId userId:(NSString *)userId pageSize:(NSInteger)pageSize completion:(void(^)(ECError *error,NSArray<EC LiveChatRoomMember *> *userArray))completion; 
  • [[ECDevice sharedInstance].liveChatRoomManager queryLiveChatRoomMembers:self .roomId userId:nil pageSize:10 completion:^(ECError *error, NSArray<ECLiveCh atRoomMember *> *userArray) { 
  •     if (error.errorCode == ECErrorType_NoError) {//获取成功 
  •     }else{//失败处理 
  •     } 
  • }];

获取成员信息 

当用户需要查看自己或者其他成员信息时,可以调用此接口,访问其他人的信息。代码如下:
代码示例
  • /** 
  • @brief 查询聊天室单个成员
  • @param roomId 聊天室id 
  • @param userId 成员id 
  • @param completion 回调[error 错误信息, member 查询的成员信息] */
  •  
  • - (void)queryLiveChatRoomMember:(NSString *)roomId userId:(NSString *)userId 
  • completion:(void(^)(ECError *error,ECLiveChatRoomMember *member))completion ; 
  • [[ECDevice sharedInstance].liveChatRoomManager queryLiveChatRoomMember:@"聊天 
  • 室房间id" userId:@"需要查询的成员id" completion:^(ECError *error, ECLiveChatRoo mMember *member) { 
  • if (error.errorCode == ECErrorType_NoError && member) {
  • //查询成功
  • }eles{
  • //查询失败处
  • }];

修改个人信息 

在当前聊天室房间中设置昵称、透传信息。
代码示例
  • /** 
  • @brief 修改聊天室成员信息 
  • @param request 修改聊天室成员信息请求类 
  • @param completion 回调 [error 错误信息, member 修改后成员信息] 
  • */

  • -(void)modifyLiveChatRoomSelfInfo:(ECModifyLiveChatRoomMemberInfoRequest *) request completion:(void(^)(ECError *error,ECLiveChatRoomMember *member))com pletion; 
  • ECModifyLiveChatRoomMemberInfoRequest *request = [[ECModifyLiveChatRoomMembe rInfoRequest alloc] init]; 
  • request.roomId = @"聊天室id"; 
  • request.nickName = @"聊天室内昵称"; 
  • request.infoExt = @"透传信息"; 
  • [[ECDevice sharedInstance].liveChatRoomManager modifyLiveChatRoomSelfInfo:request completion:^(ECError *error, ECLiveChatRoomMember *member) { 
  • if (error.errorCode == ECErrorType_NoError)
  •  {//修改成功 
  • } else {
  • //修改失败 
  • }];                                                                   

禁言 

角色权限高的用户可以对角色权限低的用户设置禁言状态,被禁言的用户将不能发送消息,但可以接收消息。
代码示例
  • /** 
  • @brief 禁言聊天室成员
  • @param request 禁言聊天室成员请求类 
  • @param completion 回调 
  • */
  •  
  • - (void)forbidLiveChatRoomMember:(ECForbidLiveChatRoomMemberRequest *)reques t completion:(void(^)(ECError *error,ECLiveChatRoomMember *member))completion; 
  • ECForbidLiveChatRoomMemberRequest *request = [[ECForbidLiveChatRoomMemberReq uest alloc] init]; 
  • request.roomId = @"房间id";
  • request.userId = @"待禁言用户id"; 
  • request.isMute = YES;//YES 禁言 NO 取消禁言 
  • [[ECDevice sharedInstance].liveChatRoomManager forbidLiveChatRoomMember:request completion:^(ECError *error, ECLiveChatRoomMember *member) {
  •     if (error.errorCode == ECErrorType_NoError) { 
  •     }else{ 
  •     } 
  • }];

拉黑 

角色权限高的用户可以对角色权限低的用户设置拉黑状态,被拉黑的用户将不能发送消息,不能接收消息,并且若被移除聊天室,被拉黑的用户将不能加入此房间。
代码示例
  • /** 
  • @brief 拉 黑聊天室成员 
  • @param request 拉黑聊天室成员请求类 
  • @param completion 回调 
  • */
  •  
  • - (void)dfriendLiveChatRoomMember:(ECDefriendLiveChatRoomMemberRequest *)req uest completion:(void(^)(ECError *error,ECLiveChatRoomMember *member))completion; 
  • ECDefriendLiveChatRoomMemberRequest *request = [[ECDefriendLiveChatRoomMembe rRequest alloc] init]; 
  • request.roomId = @"房间id"; 
  • request.userId = @" 用户id";
  • request.isBlack = YES;//YES 拉 黑 NO 取消拉黑
  • [[ECDevice sharedInstance].liveChatRoomManager dfriendLiveChatRoomMember:request completion:^(ECError *error, ECLiveChatRoomMember *member) { 
  •     if (error.errorCode == ECErrorType_NoError) {
  •     //成功处理
  •     }else{
  •     //失败处理
  •     } 
  • }];                                                      

踢出 

创建者/管理员可以将成员从该聊天室中进行踢出。
代码示例
  • /** 
  • @brief 踢出聊天室 
  • @param request 踢出聊天室请求类 
  • @param completion 回调 
  • */ 

  • - (void)kickLiveChatRoomMember:(ECKickLiveChatRoomMemberRequest*)request co mpletion:(void(^)(ECError *error,NSString *userId))completion; 
  • ECKickLiveChatRoomMemberRequest *request = [[ECKickLiveChatRoomMemberRequest alloc] init]; 
  • request.roomId = @"房间id";
  • request.userId = @" 用户id";
  • [[ECDevice sharedInstance].liveChatRoomManager kickLiveChatRoomMember:request completion:^(ECError *error, NSString *userId) { 
  •     if (error.errorCode == ECErrorType_NoError) {
  •     //踢出成功出来 
  •     }else{
  •     //失败处理 
  •     } 
  • }];                                                                   

退出聊天室  

用户主动退出聊天室,调用此接口。
代码示例
  • /** 
  • @brief 退出聊天室 
  • @param request 退出聊天室请求类 
  • @param completion 回调 
  • */ 
  • - (void)exitLiveChatRoom:(ECExitLiveChatRoomRequest *)request completion:(vo id(^)(ECError *error,NSString *roomId))completion; 
  • ECExitLiveChatRoomRequest *request = [[ECExitLiveChatRoomRequest alloc] init ]; 
  • request.roomId = @"房间id"; 
  • [[ECDevice sharedInstance].liveChatRoomManager exitLiveChatRoom:request comp letion:^(ECError *error, NSString *roomId) { 
  •     if (error.errorCode != ECErrorType_NoError) {
  •     //退出成功 
  •     } 
  • }];

聊天室内的通知消息 

当有用户加入,退出,被禁言,被踢出,被拉黑,变更⻆色等操作,聊天室内的成员都会收到通知消息。 在聊天室中所有的通知都以消息 ECLiveChatRoomNoticeMessage 的形式展示,内部 ECLiveChatRoomNoticeType 为不不同类型的通知。 
设置 [ECDevice sharedInstance].delegate ,实现以下方法,当收到聊天室通知消息时会主动调用。
 
代码示例
  • /** 
  • 收到聊天室的通知消息 
  • @param msg 通知消息 
  • */ 
  • - (void)onReceiveLiveChatRoomNoticeMessage:(ECLiveChatRoomNoticeMessage *)ms g; 
  • //通过ECLiveChatRoomNoticeMessage 的type字段区分不不同的通知消息体类型