聊天室
从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字段区分不不同的通知消息体类型