聊天室
从v5.3.2版本开始,sdk增加聊天室功能,推出直播领域消息解决方案。
聊天室跟普通的IM群(微信群,QQ群等)相比最大的不同点在于它是一个比较开放的虚拟组织。我们可以将直播聊天室比喻成一个广场,广场是开放无边界的,所有的人都可以随进随出,而群组就像一个房间,是一个有边界有容量上限的私密组织,并且进入这个房间需要一定条件,一般是主动申请加入或被邀请加入。
1、相关接口
sdk相关接口分2大类别:
后台Rest提供接口。具体参考文档地址: 服务器直播聊天室接口
- 创建聊天室,参考demo中的CreateRoomUI 类。
- 切换聊天室状态(开启/关闭/销毁),参考demo中的ECLIveChatRoomListUI 类。
SDK接口文档(本页面提供)
安卓sdk内部提供的接口: 进入聊天室,聊天室内发送消息,获取聊天室信息,获取聊天室成员列表,获取成员信息,对成员进行禁言、拉黑、踢出,修改个人信息,修改聊天室信息,退出聊天室等接口。
2、聊天室三种成员角色
创建者(权限最高)>管理员>普通成员(权限高的能对权限低的做相应处理)
(1) 创建者:可以对所有成员进行管理,包括禁言/解除禁言/拉黑/从黑名单移除/踢出/修改聊天室信息。
(2) 管理员:只能对成员进行管理,禁言/解除禁言/拉黑/从黑名单移除/踢出。
(3) 普通成员:无权限
3、聊天室管理
聊天室管理类:ECLiveChatRoomManager查看API
进入聊天室
用户要在聊天室内说话,必须先调用接口进入此聊天室,之后便可以进行沟通。
API介绍
- void joinLiveChatRoom(java.lang.String roomId,
- ECLiveChatRoomMemberInfoBuilder info,
- ECLiveNotifyWrapper notifyWrapper,
- ECLiveCallBack.OnEnterLiveChatRoomListener listener)
- 加入聊天室
- 参数:
- roomId - 聊天室房间号
- info - 加入房间进去的透传信息
- notifyWrapper - 通知透传信息
- listener - 监听
代码示例
- //构建进入聊天室透传信息对象、设置昵称与透传信息
- 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介绍
- java.lang.String sendLiveChatRoomMessage(ECMessage message,
- ECLiveCallBack.OnSendLiveChatRoomMessageListener listener)
- 在聊天室发送消息
- 参数:
- message - 消息对象
- listener - 回调接口
代码示例
- //创建一个文本消息体,并添加到消息对象中
- 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介绍
- void modifyLiveChatRoomInfo(ECLiveChatRoomModifyBuilder builder,
- ECLiveNotifyWrapper notifyWrapper,
- ECLiveCallBack.OnUpdateLiveChatRoomListener listener)
- 修改聊天室信息
- 参数:
- builder - 构建修改聊天室修改封装
- notifyWrapper - 修改时通知成员包装对象
- listener - 回调
代码示例
- //构建修改聊天室对象
- 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介绍
- void queryLiveChatRoomMembers(ECLiveSearchMembersConditionBuilder builder,
- ECLiveCallBack.OnQueryLiveChatRoomMembersListener listener)
- 查询聊天室成员列表
- 参数:
- builder - 查询聊天室成员封装
- listener - 回调
代码示例
- //获得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;
- }