logo
当前页

房间属性管理


功能简介

ZIM SDK 的房间属性功能,提供了可在指定房间中,设置自定义属性的能力。

通常可以应用在语音直播、聊天室等的属性同步、语聊房的麦位管理、以及狼人杀等卡牌类游戏中,记录用户的角色和牌局状态等场景中。

实现流程

开发者需要在调用 createRoom 接口时,设置房间属性参数,创建并加入房间。

注意
  • 每个房间中,最多允许设置 20 个属性,以 Key-Value 的方式进行存储。Key的长度上限为 16 字节,Value的长度上限为 1024 字节,所有属性的总长度不得超过 5120 字节。开发者如果需要提高属性上限,请联系 ZEGO 技术支持。
  • 房间销毁后,设置的自定义属性也会同时销毁。
示例代码
ZIMRoomInfo *zimRoomInfo = [[ZIMRoomInfo alloc] init];        
// 创建一个 ZIMRoomInfo 对象。
ZIMRoomAdvancedConfig *config = [[ZIMRoomAdvancedConfig alloc] init];
NSMutableDictionary *roomAttributes = [[NSMutableDictionary alloc] init];
NSString *myValue = @"room_info_value";
NSString *myKey = @"room_info";
       
[roomAttributes setObject:myValue forKey:myKey];
        
config.roomAttributes = roomAttributes;
        
[zim createRoom:zimRoomInfo config:config callback:^(ZIMRoomFullInfo * _Nonnull roomInfo, ZIMError * _Nonnull errorInfo) {}];
1
Copied!

设置房间属性

每个房间中,设置的属性以 Key-Value 的形式存储。

  • 当 Key 不存在时,设置房间属性表示增加属性。
  • 当 key 已经存在时,设置房间属性表示更新已有属性的取值。
示例代码
NSString *key = @"room_info";
NSString *value = @"room_info_value";
NSMutableDictionary *roomAttributes = [[NSMutableDictionary alloc] init];
[roomAttributes setObject:value forKey:key];
ZIMRoomAttributesSetConfig *setConfig = [[ZIMRoomAttributesSetConfig alloc] init];
setConfig.isDeleteAfterOwnerLeft = true;
setConfig.isForce = false;
[zim setRoomAttributes:roomAttributes roomID:roomID config:setConfig callback:^(NSString * _Nonnull roomID, NSArray<NSString *> * _Nonnull errorKeys, ZIMError * _Nonnull errorInfo) {}];
1
Copied!

删除房间属性

通常开发者只能删除自己拥有的属性,也可以设置 “config” 中的 “isForce” 参数取值,删除他人创建的属性。

示例代码
NSString *key = [NSString stringWithFormat:@"seat_%d",targetIndex];
NSMutableArray *keys = [[NSMutableArray alloc] init];
[keys addObject:key];
ZIMRoomAttributesDeleteConfig *config = [[ZIMRoomAttributesDeleteConfig alloc] init];
config.isForce = true;
[zim deleteRoomAttributesByKeys:keys roomID:roomID config:config callback:^(NSString * _Nonnull roomID, NSArray<NSString *> * _Nonnull errorKeys, ZIMError * _Nonnull errorInfo) {}];
1
Copied!

获取房间属性

注意

登录房间时,房间最新属性将通过 roomAttributesUpdated 回调返回,无需调用 queryRoomAllAttributesByRoomID

示例代码
[zim queryRoomAllAttributesByRoomID:roomID callback:^(NSString * _Nonnull roomID, NSDictionary<NSString *,NSString * > * _Nonnull roomAttributes, ZIMError * _Nonnull errorInfo) {}];
1
Copied!

房间属性组合操作

组合操作可以使用 beginRoomAttributesBatchOperationWithRoomIDendRoomAttributesBatchOperationWithRoomID 方法将同一房间中,多个不同操作合并为一个原子操作进行执行,通常用于连续操作时不想被其他用户操作插入执行的情况。

示例代码
//组合操作
NSMutableDictionary *roomAttributes = [[NSMutableDictionary alloc] init];
NSString *key = @"key";
NSString *value = @"value";
[roomAttributes setObject:value forKey:key];
//设置添加新房间属性的配置。
ZIMRoomAttributesSetConfig *config = [[ZIMRoomAttributesSetConfig alloc] init];
config.isForce = false;
config.isDeleteAfterOwnerLeft = true;
//删除房间属性的相关配置。
NSString *deleteKey = @"key";
NSMutableArray *keys = [[NSMutableArray alloc] init];
[keys addObject:deleteKey];
ZIMRoomAttributesDeleteConfig *deleteConfig = [[ZIMRoomAttributesDeleteConfig alloc] init];
//设置组合房间属性操作。
ZIMRoomAttributesBatchOperationConfig *setConfig = [[ZIMRoomAttributesBatchOperationConfig alloc] init];
setConfig.isDeleteAfterOwnerLeft = true;
setConfig.isForce = false;
setConfig.isUpdateOwner = true;
[zim beginRoomAttributesBatchOperationWithRoomID:roomID config:setConfig];

//修改房间属性

//首先添加一个房间属性。
[zim setRoomAttributes:roomAttributes roomID:roomID config:config callback:^(NSString * _Nonnull roomID, NSArray<NSString *> * _Nonnull errorKeys, ZIMError * _Nonnull errorInfo) {}];

//然后删除一个房间属性。
[zim deleteRoomAttributesByKeys:keys roomID:roomID config:config callback:^(NSString * _Nonnull roomID, NSArray<NSString *> * _Nonnull errorKeys, ZIMError * _Nonnull errorInfo) {}];

//组合两个操作。
[zim endRoomAttributesBatchOperationWithRoomID:roomID callback:^(NSString * _Nonnull roomID, ZIMError * _Nonnull errorInfo) {}];
1
Copied!

Previous

房间资料管理

Next

房间用户管理