从v5.3.2开始、sdk增加直播聊天室功能、推出直播领域消息解决方案。
聊天室跟普通的IM群(微信群,QQ群等)相比最大的不同点在于它是一个比较开放的虚拟组织。我们可以将直播聊天室比喻成一个广场,广场是开放无边界的,所有的人都可以随进随出,而群就像一个房间,是一个有边界有容量上限的私密组织,并且进入这个房间需要一定条件,一般是主动申请加入或被邀请加入。
直播sdk相关接口分2大类别:
1.1.1 后台Rest提供接口。具体参考文档地址://www.yuntongxun.com/doc/sdk/server/2_5_1_8.html
(1) 创建聊天室
(2) 切换聊天室状态(开启/关闭)
1.1.2 SDK接口文档(本页面提供)
IOS SDK内部提供的接口: 进入聊天室、聊天室内发送消息、获取聊天室信息、获取聊天室成员列表、获取成员信息、对成员进行禁言/拉黑、踢出、修改个人信息、修改聊天室信息、退出聊天室等接口。
(1) 创建者:可以对所有成员进行管理,禁言/解除禁言/拉黑/从黑名单移除/踢出/修改聊天室信息。
(2) 管理员:只能对成员进行管理,禁言/解除禁言/拉黑/从黑名单移除/踢出。
(3) 普通成员:无权限
✾ 进入聊天室 — 用户要在聊天室内说话,必须先调用接口进入此聊天室。用户进入聊天室后,不会收到此聊天室的历史消息推送。如有历史消息需求,可以调用消息查询接口进行显示。代码如下:
- (void)joinLiveChatRoom:(ECJoinLiveChatRoomRequest *)request completion:(void(^)(ECError *error, ECLiveChatRoomInfo *roomInfo,ECLiveChatRoomMember *member))completion; ECJoinLiveChatRoomRequest *request = [[ECJoinLiveChatRoomRequest alloc] init]; request.roomId = @"聊天室房间id"; request.nickName = @”昵称”; [[ECDevice sharedInstance].liveChatRoomManager joinLiveChatRoom:request completion:^(ECError *error, ECLiveChatRoomInfo *roomInfo, ECLiveChatRoomMember *member) { if (error.errorCode ==ECErrorType_NoError) {// 加入成功之后做跳转逻辑 } else { // 加入的错误码,详见错误码介绍 }];
✾ 聊天室内发送消息和接收聊天室消息 — 目前只支持发送文本消息,其他消息暂不支持,用户如果想发送其他消息,可以用userdata发送自定义消息。代码如下:
(1)聊天室内发送消息,代码如下:
[[ECDevice sharedInstance].liveChatRoomManager sendLiveChatRoomMessage:message progress: self completion:^(ECError *error, ECMessage *amessage) { if (error.errorCode == ECErrorType_LiveChatRoom_Forbid) { } return message; }
(2)接收消息 — 详见DeviceDelegateHelper+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不会缓存聊天室信息,开发者需要根据业务自己做好缓存。代码如下:
[[ECDevice sharedInstance].liveChatRoomManager queryLiveChatRoomInfo:@”聊天室房间id” completion:^(ECError *error, ECLiveChatRoomInfo *roomInfo) { if (error.errorCode == ECErrorType_NoError) { } }];
✾ 修改聊天室信息 — 只有创建者才能修改房间信息,创建者可以修改公告,房间昵称,是否全员禁言等功能。代码如下:
ECModifyLiveChatRoomInfoRequest *request = [[ECModifyLiveChatRoomInfoRequest alloc] init]; request.roomId =@”聊天室房间id”; request.roomName = @”房间名称”; request.announcement = @”公告”; request.isAllMuteMode = 是否全员禁言; request.roomExt = @"透传字段"; [[ECDevice sharedInstance].liveChatRoomManager modifyLiveChatRoomInfo:request completion:^(ECError *error, ECLiveChatRoomInfo *roomInfo) { if (error.errorCode == ECErrorType_NoError) { } else {} }];
✾ 获取聊天室成员列表 — 此接口可以远程获取聊天室成员列表,SDK不会缓存聊天室成员列表和查询单个成员信息,开发者需要根据业务自己做好缓存。代码如下:
NSString *userId = self.listArray.lastObject;(为空第一页) [[ECDevice sharedInstance].liveChatRoomManager queryLiveChatRoomMembers:@”聊天室房间id” userId:nil pageSize:10 completion:^(ECError *error, NSArray*userArray) { if (error.errorCode == ECErrorType_NoError) { [self.listArray removeAllObjects]; [self.listArray addObjectsFromArray:userArray]; [self.collectionView reloadData]; } }];
✾ 获取成员信息 — 当用户需要查看自己或者其他成员信息时,可以调用此接口,访问其他人的信息。代码如下:
NSString *roomId = @”聊天室房间id”; NSString *userId = @”用户id”; [[ECDevice sharedInstance].liveChatRoomManager queryLiveChatRoomMember:roomId userId: useId completion:^(ECError *error, ECLiveChatRoomMember *amember) { if (error.errorCode == ECErrorType_NoError) { } }];
✾ 修改个人信息 — 在当前聊天室房间中设置昵称、透传信息。代码如下:
ECModifyLiveChatRoomMemberInfoRequest *request = [[ECModifyLiveChatRoomMemberInfoRequest 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 {} }];
✾ 禁言 — 角色权限高的用户可以对角色权限低的用户设置禁言状态,设置禁言后的用户将不能发送消息,但可以接收消息。代码如下:
ECForbidLiveChatRoomMemberRequest *request = [[ECForbidLiveChatRoomMemberRequest alloc] init]; request.roomId = @”聊天室房间id”; request.userId = @”用户id”; request.isMute = @”是否禁言”; request.muteDuration = @”禁言时长”; [[ECDevice sharedInstance].liveChatRoomManager forbidLiveChatRoomMember: request completion:^(ECError *error, ECLiveChatRoomMember *member) { if (error.errorCode == ECErrorType_NoError) {} }];
✾ 拉黑 — 角色权限高的用户可以对角色权限低的用户设置拉黑状态,设置拉黑后的用户将不能发送消息,不能接收消息,并且若被移除聊天室,被拉黑的用户将不能加入此房间。代码如下:
ECDefriendLiveChatRoomMemberRequest *request = [[ECDefriendLiveChatRoomMemberRequest alloc] init]; request.roomId =@”房间id”; request.userId =@”将要拉黑的用户id”; request.isBlack = @”是否拉黑”; [[ECDevice sharedInstance].liveChatRoomManager dfriendLiveChatRoomMember: request completion:^(ECError *error, ECLiveChatRoomMember *member) { if (error.errorCode == ECErrorType_NoError) {} }];
✾ 踢出 — 创建者/管理员可以将成员从该聊天室中进行踢出。代码如下:
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) {} }];
✾ 退出聊天室 — 用户主动退出聊天室,调用此接口。代码如下:
ECExitLiveChatRoomRequest *request = [[ECExitLiveChatRoomRequest alloc] init]; request.roomId =@”聊天室id”; [[ECDevice sharedInstance].liveChatRoomManager exitLiveChatRoom:request completion:^(ECError *error, NSString *roomId) { if (error.errorCode != ECErrorType_NoError) { } }];
✾ 聊天室内的通知消息 — 当用户加入,退出,被禁言,被踢出,被拉黑,变更角色等,聊天室内的成员都会收到通知消息. 在聊天室中所有的通知都以消息 ECLiveChatRoomNoticeMessage 的形式展示,内部 ECLiveChatRoomNoticeType为不同类型的通知。代码如下:
/** 收到聊天室的通知消息 @param msg 通知消息体 */ - (void)onReceiveLiveChatRoomNoticeMessage:(ECLiveChatRoomNoticeMessage *)msg; 通过ECLiveChatRoomNoticeMessage 的type字段区分不同的通知消息体类型.
文档更新时间:2017年7月11日