聊天室

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

1、相关接口

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

2、聊天室三种成员角色

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

3、聊天室管理

聊天室管理类:ECLiveChatRoomManager查看API

进入聊天室

用户要在聊天室内说话,必须先调用接口进入此聊天室,之后便可以进行沟通。
API介绍
代码示例
  • //构建进入聊天室透传信息对象、设置昵称与透传信息
  • ECLiveChatRoomMemberInfoBuilder infoBuilder = 
  •         new ECLiveChatRoomMemberInfoBuilder(用户的账号, 用户自己构建的透传信息);
  • //获得SDK聊天室管理类
  • ECLiveChatRoomManager roomManager = ECDevice.getECLiveChatRoomManager();                 
  •     if(roomManager==null){
  •              return;
  •     }
  •     //调用加入房间,传入相应的参数
  •     roomManager.joinLiveChatRoom(房间id, infoBuilder, 透传通知其他人信息, 
  •                                         new ECLiveCallBack.OnEnterLiveChatRoomListener() {
  •         @Override
  •         public void onEnterResult(ECError error, ECLiveChatRoom liveChatRoom,
  •                                                 ECLiveChatRoomMember member) {
  •                  if (error.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
  •                     //进入房间成功
  •                    // do 业务逻辑    
  •                  } else {
  •                      //进入房间失败
  •                   // do 业务逻辑
  •                  }
  •          }
  • });               

聊天室内发送消息 

目前只支持发送文本消息,其他消息暂不支持,用户如果想发送其他消息,可以用userdata发送自定义消息。
API介绍
代码示例
  • //创建一个文本消息体,并添加到消息对象中
  • ECMessage msg = ECMessage.createECMessage(ECMessage.Type.TXT);
  • //创建消息对象
  • ECTextMessageBody msgBody = new ECTextMessageBody(text.toString());
  • msg.setBody(msgBody);        
  •         //获得SDK聊天室管理类
  •         ECLiveChatRoomManager roomManager = ECDevice.getECLiveChatRoomManager();
  •         if(roomManager==null){
  •             return;
  •         }
  •         //调用发送消息的方法,传入相应的参数
  •         roomManager.sendLiveChatRoomMessage(msg, new OnSendLiveChatRoomMessageListener() {
  •             @Override
  •             public void onSendResult(ECError error, ECMessage message){
  •                 if (error.errorCode == SdkErrorCode.REQUEST_SUCCESS){                   
  •                 }
  •             }
  •         });                                                                                       

获取聊天室信息

通过查询聊天室信息、获取当前在线人数、聊天室名称等信息用于界面UI展示。
API介绍
  • void queryLiveChatRoomInfo(java.lang.String roomId,
  •                            ECLiveCallBack.OnQueryLiveChatRoomInfoListener listener)
  • 查询聊天室信息
  • 参数:
  • roomId - 聊天室房间号
  • listener - 回调监听
 代码示例
  • //获得SDK聊天室管理类
  • ECLiveChatRoomManager roomManager =  ECDevice.getECLiveChatRoomManager();
  •         if(roomManager==null){
  •             return;
  •         }
  •     //调用获取方法,传入相应参数
  •     roomManager.queryLiveChatRoomInfo(房间id, new ECLiveCallBack.OnQueryLiveChatRoomInfoListener() {
  •             @Override
  •             public void onQueryLiveChatRoom(ECError error, ECLiveChatRoom liveChatRoom) {
  •                 if (error.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
  •                              //查询成功
  •                    } else {
  •                            //查询失败
  •                           }
  •                        }
  •               });       

修改聊天室信息 

创建者可以修改当前聊天室的展示信息。
API介绍
代码示例
  • //构建修改聊天室对象        
  • ECLiveChatRoomModifyBuilder builder = new ECLiveChatRoomModifyBuilder(聊天室id,
  •                  聊天室昵称, 聊天室描述, 聊天室透传展示信息, 声音模式);
  • //获得SDK聊天室管理类
  • ECLiveChatRoomManager roomManager = ECDevice.getECLiveChatRoomManager();
  • if(roomManager==null){
  •     return;
  • }
  • //构建通知对象
  • ECLiveNotifyWrapper notifyWrapper = new ECLiveNotifyWrapper(设置通知透传信息, 是否通知其他人);
  • //调用修改方法,传入对象
  • roomManager.modifyLiveChatRoomInfo(builder, notifyWrapper, 
  •                         new ECLiveCallBack.OnUpdateLiveChatRoomListener() {
  •     @Override
  •     public void onResult(ECError ecError) {
  •     }
  • });                                                                    

获取聊天室成员列表 

此接口可以远程获取聊天室成员列表,SDK不会缓存聊天室成员列表和查询单个成员信息,开发者需要根据业务自己做好缓存。
API介绍
代码示例
  • //获得SDK聊天室管理类
  • ECLiveChatRoomManager roomManager = ECDevice.getECLiveChatRoomManager();
  • if(roomManager==null){
  •     return;
  • }
  • //创建查询对象
  • ECLiveSearchMembersConditionBuilder builder = new ECLiveSearchMembersConditionBuilder(查询的房间号,"", 
  •                                         查询的成员角色,分页数第几页);
  •    //调用查询方法,传入对象
  •    roomManager.queryLiveChatRoomMembers(builder,new ECLiveCallBack.OnQueryLiveChatRoomMembersListener(){
  •             @Override
  •             public void onQueryResult(ECError error, ArrayList list){
  •                 if(error.errorCode==SdkErrorCode.REQUEST_SUCCESS){
  •                     }else{
  •                 }
  •             }
  •         });
  •     }                                                                                                  

获取成员信息 

当用户需要查看自己或者其他成员信息时,可以调用此接口,访问其他人的信息。
API介绍
  • void queryLiveChatRoomMember(java.lang.String roomId,
  •                              java.lang.String userId,
  •                              ECLiveCallBack.OnQuerySingleLiveChatRoomMembersListener listener)
  • 查询聊天室里面单个成员信息
  • 参数:
  • roomId - 房间号
  • userId - 被查询的成员的账号
  • listener - 回调
代码示例                                     
  • //获得SDK聊天室管理类
  • ECLiveChatRoomManager roomManager = ECDevice.getECLiveChatRoomManager();
  •                             if(roomManager==null){
  •                                 return;
  •                             }
  •     //调用获取成员信息,传入相应参数
  •     roomManager.queryLiveChatRoomMember(房间号, 查询成员的账号, 
  •                              new ECLiveCallBack.OnQuerySingleLiveChatRoomMembersListener() {
  •         @Override
  •         public void onQueryResult(ECError error, ECLiveChatRoomMember member){
  •         }
  •     });                                                                 

修改个人信息 

在当前聊天室房间中设置昵称、透传信息。
API介绍
  • void modifyLiveChatRoomSelfInfo(java.lang.String roomId,
  •                                 ECLiveChatRoomMemberInfoBuilder info,
  •                                 ECLiveCallBack.OnUpdateSelfInfoListener listener)
  • 聊天室修改个人信息
  • 参数:
  • roomId - 房间号
  • info - 个人透传信息
  • listener - 回调
代码示例
  • //创建成员信息对象
  • ECLiveChatRoomMemberInfoBuilder modifySelfInfo = new ECLiveChatRoomMemberInfoBuilder(个人设置的昵称,个人设置的透传信息);
  •     //获得SDK聊天室管理类
  •     ECLiveChatRoomManager roomManager = ECDevice.getECLiveChatRoomManager();
  •     if(roomManager==null){
  •         return;
  •     }
  •     //调用修改个人信息方法
  •     roomManager.modifyLiveChatRoomSelfInfo(聊天室id, modifySelfInfo, 
  •                                             new ECLiveCallBack.OnUpdateSelfInfoListener() {
  •         @Override
  •         public void onResult(ECError error) {
  •             if (error.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
  •                  // do 业务逻辑    
  •             } else {
  •                  // do 业务逻辑
  •             }
  •         }
  •     });                                       

对聊天室成员进行禁言/解除禁言 

创建者、管理员可以对成员进行禁言/解除禁言/加入黑名单/从黑名单移除处理。
API介绍
  •  void forbidLiveChatRoomMember(java.lang.String roomId,
  •                               java.lang.String userId,
  •                               ECLiveControlOption controlOption,
  •                               ECLiveNotifyWrapper notifyWrapper,
  •                               ECLiveCallBack.OnControlMemberStateListener listener)
  • 在聊天室里面对成员禁言
  • 参数:
  • roomId - 房间号
  • userId - 被禁言的人的账号
  • controlOption - 控制封装
  • notifyWrapper - 通知对象
  • listener - 回调
代码示例               
  •  //获得SDK聊天室管理类
  •  ECLiveChatRoomManager roomManager = ECDevice.getECLiveChatRoomManager();
  •  if(roomManager==null){
  •        return;
  •  }
  •  //设置禁言时间和操作类型
  •  ECLiveControlOption option = new ECLiveControlOption(时长[在禁言状态有效],被设置的类型);
  •  //调用禁言的方法
  •  roomManager.forbidLiveChatRoomMember(房间id, 被设置成员的账号, option, 通知给其他人的透传信息,
  •                         new ECLiveCallBack.OnControlMemberStateListener() {
  •         @Override
  •  public void onResult(ECError ecError) {                                                                
  •         }
  •     });                        

拉黑/移除黑名单

角色权限高的用户可以对角色权限低的用户设置拉黑状态,设置拉黑后的用户将不能发送消息,不能接收消息,并且若被移除聊天室,被拉黑的用户将不能加入此房间。
API介绍
  • void dfriendLiveChatRoomMember(java.lang.String roomId,
  •                                java.lang.String userId,
  •                                ECLiveEnums.ECState controlOption,
  •                                ECLiveNotifyWrapper notifyWrapper,
  •                                ECLiveCallBack.OnControlMemberStateListener listener)
  • 加入黑名单
  • 参数:
  • roomId - 房间号
  • userId - 被加入黑名单成员的账号
  • controlOption - 控制封装
  • notifyWrapper - 通知对象
  • listener - 回调
代码示例           
  • //获得SDK聊天室管理类
  • ECLiveChatRoomManager roomManager = ECDevice.getECLiveChatRoomManager();
  • if(roomManager==null){
  •     return;
  • }
  • //调用拉黑/移除黑名单
  • roomManager.dfriendLiveChatRoomMember(房间id, 被设置的人的账号, 拉黑/移除黑名单, 
  •                                         通知给其他人的透传信息, new ECLiveCallBack.OnControlMemberStateListener() {
  •       @Override
  •       public void onResult(ECError ecError) {
  •           if (ecError.errorCode == SdkErrorCode.REQUEST_SUCCESS) {                                    
  •           }
  •       }
  • });

踢出

创建者/管理员可以将成员从该聊天室中踢出。
API介绍
  • void kickLiveChatRoomMember(java.lang.String roomId,
  •                             java.lang.String userId,
  •                             ECLiveNotifyWrapper notifyWrapper,
  •                             ECLiveCallBack.OnLiveChatRoomKickMemberListener listener)
  • 在聊天室里面踢人
  • 参数:
  • roomId - 聊天室房间号
  • userId - 被踢出人的账号
  • notifyWrapper - 通知封装
  • listener - 回调
代码示例
  • //获得SDK聊天室管理类
  • ECLiveChatRoomManager roomManager = ECDevice.getECLiveChatRoomManager();
  • if(roomManager==null){
  •      return;
  • }
  • //创建通知对象
  • ECLiveNotifyWrapper notifyWrapper = new ECLiveNotifyWrapper(设置通知透传信息, 是否通知其他人);
  • //调用踢出方法
  • roomManager.kickLiveChatRoomMember(聊天室id, 被踢的成员userid, 
  •                 notifyWrapper, new ECLiveCallBack.OnLiveChatRoomKickMemberListener() {
  •     @Override
  •     public void onResult(ECError ecError) {
  •     }
  • });                                                                              

退出聊天室

用户主动退出聊天室,调用此接口。
API介绍
  • void exitLiveChatRoom(java.lang.String roomId,
  •                       ECLiveNotifyWrapper notifyWrapper,
  •                       ECLiveCallBack.OnExitLiveChatRoomListener listener)
  • 退出聊天室房间
  • 参数:
  • roomId - 房间号
  • notifyWrapper - 通知透传信息
  • listener - 回调接口
代码示例
  • //获得SDK聊天室管理类
  • ECLiveChatRoomManager roomManager = ECDevice.getECLiveChatRoomManager();
  • if(roomManager==null){
  •     return;
  • }
  • //构建通知对象
  • ECLiveNotifyWrapper notifyWrapper = new ECLiveNotifyWrapper(设置通知透传信息, 是否通知其他人);
  • //调用退出聊天室
  • roomManager.exitLiveChatRoom(room.roomId, notifyWrapper,
  •                                                 new ECLiveCallBack.OnExitLiveChatRoomListener() {
  •      @Override
  •      public void onResult(ECError ecError) {
  •          if (ecError.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
  •          } else {
  •          }
  •      }
  • });                                                                                                   

接收聊天室消息及通知接口 

当用户加入,退出,被禁言,被踢出,被拉黑,变更角色等,聊天室内的成员都会收到通知消息。
回调: OnLiveChatRoomListener查看API
  • public interface OnLiveChatRoomListener{
  •     /**
  •      * 接收聊天室消息
  •      * @param message
  •      */
  •     void OnReceiveLiveChatRoomMessage(ECMessage message);
  •     /**
  •      * 接收聊天室通知消息
  •      * @param notice
  •      */
  •     void OnReceiveLiveChatRoomNotification(ECLiveChatRoomNotification notice);
  •     ///**通知类型*/ 根据type获取不同的通知类型
  •     //public ECLiveEnums.ECNoticeType noticeType;       
  •      }