房间用户管理
功能简介
ZIM SDK 支持设置房间内的用户属性,即在房间内,自定义房间内的用户属性。
可应用的场景:
- 设置成员角色,如设置房主、管理员、观众、观众等级。
- 开/关摄像头、开/关麦克风、是否能发言、是否共享白板等。
实现流程
注意
- 每个房间中,最多允许设置 500 个用户的用户属性,以
Key-Value
的方式进行存储。开发者如果需要提高属性上限,请联系 ZEGO 技术支持。 - 房间内的每个用户,所拥有的用户属性
Key-Value
的总长度不超过 144 字节,且Key-Value
的个数不超过 30 对。单个Key-Value
的长度,Key 不超过 8 字节、Value 不超过 64 字节。开发者如果需要提高上限,请联系 ZEGO 技术支持。 - 房间销毁后,设置的自定义用户属性也会同时销毁。
设置用户属性
注意
操作者和被设置/修改属性的用户,都必须是该房间内的用户。
开发者可以通过 setRoomMembersAttributes 接口,设置房间内用户的用户属性。设置的房间用户属性以 Key-Value
的形式存储:
- 当 Key 不存在时,设置用户属性表示增加属性。
- 当 key 已经存在时,设置用户属性表示更新已有属性的取值。
示例代码
ZIMRoomMemberAttributesSetConfig *setConfig = [[ZIMRoomMemberAttributesSetConfig alloc] init];
[[ZIM getInstance] setRoomMembersAttributes:@{@"key1":@"value1"} userIDs:@[@"user1",@"user2"] roomID:@"roomID" config:setConfig callback:^(NSString * _Nonnull roomID, NSArray<ZIMRoomMemberAttributesOperatedInfo *> * _Nonnull operatedInfos, NSArray<NSString *> * _Nonnull errorUserList, ZIMError * _Nonnull errorInfo) {
//这里写设置结果返回后的业务逻辑
}];
1
查询用户属性
房间内的用户,可以通过 queryRoomMembersAttributesByUserIDs 接口,查询房间内某些用户的用户属性。
示例代码
[[ZIM getInstance] queryRoomMembersAttributesByUserIDs:@[@"userID1",@"userID2"] roomID:@"roomID" callback:^(NSString * _Nonnull roomID, NSArray<ZIMRoomMemberAttributesInfo *> * _Nonnull infos, ZIMError * _Nonnull errorInfo) {
//这里写查询结果返回后的业务逻辑
}];
1
查询所有用户属性
房间内的用户,可以通过 queryRoomMemberAttributesListByRoomID 接口,查询该房间内的所有用户的用户属性。
示例代码
ZIMRoomMemberAttributesQueryConfig *queryConfig = [[ZIMRoomMemberAttributesQueryConfig alloc] init];
queryConfig.count = 100;
[[ZIM getInstance] queryRoomMemberAttributesListByRoomID:@"roomID" config:queryConfig callback:^(NSString * _Nonnull roomID, NSArray<ZIMRoomMemberAttributesInfo *> * _Nonnull infos, NSString * _Nonnull nextFlag, ZIMError * _Nonnull errorInfo) {
//这里写查询结果返回后的业务逻辑
}];
1
用户属性变更通知
当房间内成员的房间用户属性发生变更时,开发者可以通过注册 setEventHandler 的回调接口 onRoomMemberAttributesUpdated 方法,监听房间内成员的用户属性变更通知。
Untitled
- (void)zim:(ZIM *)zim
roomMemberAttributesUpdated:(NSArray<ZIMRoomMemberAttributesUpdateInfo * > *)updateInfo
operatedUserInfo:(ZIMRoomOperatedInfo *)operatedInfo
roomID:(NSString *)roomID{
//这里写房间用户属性发生变更后的业务逻辑
}
1
说明
在房间内,如果有用户调用了 setRoomMembersAttributes 接口时:
- 当房间内人数在 500 人以内时,所有房间内的用户,均可以收到房用户属性变更的通知。
- 当房间内人数超过 500 人时,仅操作者和被设置/修改属性的用户,可以收到房用户属性变更的通知。
开发者如果需要提高上限,请联系 ZEGO 技术支持。
批量查询房间用户信息
开发者可以通过调用 queryRoomMembersByUserIDs 接口,传入 roomID 、 userID 数组,批量查询房间中用户的信息。接口调用成功后, ZIMRoomMembersQueriedCallback 会返回查询成功的 userList(可用于确认目标用户在房间中),以及查询失败的 errorUserList(可用于确认目标用户不在房间中)。
说明
批量查询用户数量的默认上限为 10 名。
示例代码如下所示:
Untitled
NSString *userIdA = @"targetUserIdA";
NSString *userIdB = @"targetUserIdB";
NSArray<NSString *> *targetUserIDs = @[userIdA,userIdB];
// userID 映射 ZIMRoomMemberInfo 的 map, 可以缓存起来用于后续 UI 展示,目前 ZIMRoomMemberInfo 暴露了 userID , userName。
NSMutableDictionary *targetRoomMemberMap = [[NSMutableDictionary alloc] init];
[[ZIM getInstance] queryRoomMembersByUserIDs:targetUserIDs roomID:@"targetRoomID" callback:^(NSString * _Nonnull roomID, NSArray<ZIMRoomMemberInfo *> * _Nonnull memberList, NSArray<ZIMErrorUserInfo *> * _Nonnull errorUserList, ZIMError * _Nonnull errorInfo) {
if(errorInfo.code != ZIMErrorCodeSuccess){
NSLog(@"query room members failed! error code:%ld, error message: %@",errorInfo.code, errorInfo.message);
return;
}
// userID 映射 ZIMErrorUserInfo 的 map, 如果有需要关注失败原因可以读取此数据结构
NSMutableDictionary *targetErrorUserInfoMap = [[NSMutableDictionary alloc] init];
for (ZIMRoomMemberInfo *currentMemberInfo in memberList) {
[targetRoomMemberMap setObject:currentMemberInfo forKey:currentMemberInfo.userID];
}
for (ZIMErrorUserInfo *currentErrorUserInfo in errorUserList){
[targetErrorUserInfoMap setObject:currentErrorUserInfo forKey:currentErrorUserInfo.userID];
}
// 判断是否目标成员是否在房间内
bool isTargetUserIdAInTheRoom = [[targetRoomMemberMap allKeys] containsObject:userIdA];
}];
1