聊天室

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

1、相关接口

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

2、聊天室三种成员角色

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

获取聊天室信息

通过查询聊天室信息、获取当前在线人数、聊天室名称等信息用于界面UI展示。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字段区分不不同的通知消息体类型