一、功能描述
以语聊房麦位管理为例:
·有人上麦时,设置一个群属性管理上麦人信息。
·有人下麦时,删除对应群属性。
·其他群成员可以通过获取群属性列表来展示麦位列表,监听群属性更新刷新麦位列表。
注意:说明:
二、初始化群属性
调用 initGroupAttributes (Java / Swift / Objective-C / C++) 接口可以初始化群属性。如果该群之前有群属性,会先清空原来的群属性。
示例代码如下:
JavaSwiftObjective-CC++V2TIMManager.getGroupManager().initGroupAttributes("groupA", attributeMap, new V2TIMCallback() { @Override public void onSuccess() { // 初始化群属性成功 } @Override public void onError(int code, String desc) { // 初始化群属性失败 }});V2TIMManager.shared.initGroupAttributes(groupID: "groupID", attributes: ["key1":"value1", "key2":"value2"]) { print( "initGroupAttributes succ")} fail: { code, desc in print( "initGroupAttributes fail, \\(code), \\(desc)")}[[V2TIMManager sharedInstance] initGroupAttributes:@"groupA" attributes:@{@"key1" : @"value1"} succ:^{ // 初始化群属性成功} fail:^(int code, NSString *desc) { // 初始化群属性失败}];class Callback final : public V2TIMCallback {public: using SuccessCallback = std::function<void()>; using ErrorCallback = std::function<void(int, const V2TIMString&)>; Callback() = default; ~Callback() override = default; void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) { success_callback_ = std::move(success_callback); error_callback_ = std::move(error_callback); } void OnSuccess() override { if (success_callback_) { success_callback_(); } } void OnError(int error_code, const V2TIMString& error_message) override { if (error_callback_) { error_callback_(error_code, error_message); } }private: SuccessCallback success_callback_; ErrorCallback error_callback_;};V2TIMString groupID = "groupA";V2TIMGroupAttributeMap attributes;attributes.Insert("key1", "value1");attributes.Insert("key2'", "value2");auto callback = new Callback;callback->SetCallback( [=]() { // 初始化群属性成功 delete callback; }, [=](int error_code, const V2TIMString& error_message) { // 初始化群属性失败 delete callback; });V2TIMManager::GetInstance()->GetGroupManager()->InitGroupAttributes(groupID, attributes, callback);
三、设置群属性
调用 setGroupAttributes (Java / Swift / Objective-C / C++) 接口可以设置群属性。如果设置的群属性不存在,会自动添加该群属性。
示例代码如下:
JavaSwiftObjective-CC++HashMap<String, String> attributeMap = new HashMap<>();attributeMap.put("key1", "value1");attributeMap.put("key2", "value2");V2TIMManager.getGroupManager().setGroupAttributes("groupA", attributeMap, new V2TIMCallback() { @Override public void onSuccess() { // 设置群属性成功 } @Override public void onError(int code, String desc) { // 设置群属性失败 }});V2TIMManager.shared.setGroupAttributes(groupID: "groupID", attributes: ["key1": "modify value1"]) { print( "setGroupAttributes succ")} fail: { code, desc in print( "setGroupAttributes fail, \\(code), \\(desc)")}[[V2TIMManager sharedInstance] setGroupAttributes:@"groupA" attributes:@{@"key1" : @"value1"} succ:^{ // 设置群属性成功} fail:^(int code, NSString *desc) { // 设置群属性失败}];class Callback final : public V2TIMCallback {public: using SuccessCallback = std::function<void()>; using ErrorCallback = std::function<void(int, const V2TIMString&)>; Callback() = default; ~Callback() override = default; void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) { success_callback_ = std::move(success_callback); error_callback_ = std::move(error_callback); } void OnSuccess() override { if (success_callback_) { success_callback_(); } } void OnError(int error_code, const V2TIMString& error_message) override { if (error_callback_) { error_callback_(error_code, error_message); } }private: SuccessCallback success_callback_; ErrorCallback error_callback_;};V2TIMString groupID = "groupA";V2TIMGroupAttributeMap attributes;attributes.Insert("key1", "value1");attributes.Insert("key2'", "value2");auto callback = new Callback;callback->SetCallback( [=]() { // 设置群属性成功 delete callback; }, [=](int error_code, const V2TIMString& error_message) { // 设置群属性失败 delete callback; });V2TIMManager::GetInstance()->GetGroupManager()->SetGroupAttributes(groupID, attributes, callback);
四、删除群属性
调用 deleteGroupAttributes (Java / Swift / Objective-C / C++) 接口可以删除指定群属性,如果 keys 字段填 null/nil ,则会清空所有的群属性。
示例代码如下:
JavaSwiftObjective-CC++List<String> keyList = new ArrayList<>();keyList.add("key1");V2TIMManager.getGroupManager().deleteGroupAttributes("groupA", keyList, new V2TIMCallback() { @Override public void onSuccess() { // 删除成功 } @Override public void onError(int code, String desc) { // 删除失败 }});V2TIMManager.shared.deleteGroupAttributes(groupID: "groupID", keys: ["key1"]) { print( "deleteGroupAttributes succ")} fail: { code, desc in print( "deleteGroupAttributes fail, \\(code), \\(desc)")}[[V2TIMManager sharedInstance] deleteGroupAttributes:@"groupA" keys:@[@"key1"] succ:^{ // 删除成功} fail:^(int code, NSString *desc) { // 删除失败}];class Callback final : public V2TIMCallback {public: using SuccessCallback = std::function<void()>; using ErrorCallback = std::function<void(int, const V2TIMString&)>; Callback() = default; ~Callback() override = default; void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) { success_callback_ = std::move(success_callback); error_callback_ = std::move(error_callback); } void OnSuccess() override { if (success_callback_) { success_callback_(); } } void OnError(int error_code, const V2TIMString& error_message) override { if (error_callback_) { error_callback_(error_code, error_message); } }private: SuccessCallback success_callback_; ErrorCallback error_callback_;};V2TIMString groupID = "groupA";V2TIMStringVector keys;keys.PushBack("key1");keys.PushBack("key2");auto callback = new Callback;callback->SetCallback( [=]() { // 删除群属性成功 delete callback; }, [=](int error_code, const V2TIMString& error_message) { // 删除群属性失败 delete callback; });V2TIMManager::GetInstance()->GetGroupManager()->DeleteGroupAttributes(groupID, keys, callback);
五、获取群属性
调用 getGroupAttributes (Java / Swift / Objective-C / C++) 接口可以获取指定群属性,如果 keys 字段填 null/nil ,则会获取所有的群属性。
注意:说明:
注意:getGroupAttributes 接口 SDK 限制为单个登录用户 5 秒 20 次。
示例代码如下:
JavaSwiftObjective-CC++V2TIMManager.getGroupManager().getGroupAttributes("groupA", null, new V2TIMValueCallback<Map<String, String>>() { @Override public void onSuccess(Map<String, String> stringStringMap) { // 获取成功 } @Override public void onError(int code, String desc) { // 获取失败 }});V2TIMManager.shared.getGroupAttributes(groupID: "groupID", keys: nil) { map in map.forEach { (key: String, value: String) in print( "\\(key): \\(value)") }} fail: { code, desc in print( "getGroupAttributes fail, \\(code), \\(desc)")}[[V2TIMManager sharedInstance] getGroupAttributes:@"groupA" keys:nil succ:^(NSMutableDictionary<NSString *,NSString *> *groupAttributeList) { // 获取成功} fail:^(int code, NSString *desc) { // 获取失败}];template <class T>class ValueCallback final : public V2TIMValueCallback<T> {public: using SuccessCallback = std::function<void(const T&)>; using ErrorCallback = std::function<void(int, const V2TIMString&)>; ValueCallback() = default; ~ValueCallback() override = default; void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) { success_callback_ = std::move(success_callback); error_callback_ = std::move(error_callback); } void OnSuccess(const T& value) override { if (success_callback_) { success_callback_(value); } } void OnError(int error_code, const V2TIMString& error_message) override { if (error_callback_) { error_callback_(error_code, error_message); } }private: SuccessCallback success_callback_; ErrorCallback error_callback_;};auto callback = new ValueCallback<V2TIMGroupAttributeMap>{};callback->SetCallback( [=](const V2TIMGroupAttributeMap& groupAttributeMap) { // 获取群属性成功 delete callback; }, [=](int error_code, const V2TIMString& error_message) { // 获取群属性失败 delete callback; });V2TIMManager::GetInstance()->GetGroupManager()->GetGroupAttributes("groupID", {}, callback);
六、群属性更新
如果你事先调用 addGroupListener 添加了群组事件监听器,群属性有任何的更新变化,都会通过 onGroupAttributeChanged (Java / Swift / Objective-C / C++) 回调出来所有的群属性字段。
示例代码如下:
JavaSwiftObjective-CC++V2TIMManager.getInstance().addGroupListener(new V2TIMGroupListener() { @Override public void onGroupAttributeChanged(String groupID, Map<String, String> groupAttributeMap) { // 群属性变更通知 }});V2TIMManager.shared.addGroupListener(listener: self)func onGroupAttributeChanged(groupID: String, attributes: Dictionary<String, String>) { print( "groupID:\\(groupID), attributes:\\(attributes)")}[[V2TIMManager sharedInstance] addGroupListener:self];- (void)onGroupAttributeChanged:(NSString *)groupID attributes:(NSMutableDictionary<NSString *,NSString *> *)attributes { // A group attribute was changed.}class GroupListener final : public V2TIMGroupListener {public: GroupListener() = default; ~GroupListener() override = default; void OnGroupAttributeChanged(const V2TIMString& groupID, const V2TIMGroupAttributeMap& groupAttributeMap) override { // A group attribute was changed. } // Other members …};// Add a group event listener. Keep `groupListener` valid before the listener is removed to ensure event callbacks are received.GroupListener groupListener;V2TIMManager::GetInstance()->AddGroupListener(&groupListener);
七、接口限制
1. 最多支持 16 个群属性,每个群属性的大小最大支持 4k,所有群属性的大小最大支持 16k。
2. initGroupAttributes、setGroupAttributes、deleteGroupAttributes 接口合并计算,SDK 限制为单个登录用户 5 秒 10 次,超过后回调 8511 错误码;后台限制单个登录用户 1 秒 5 次,超过后返回 10049 错误码。
3. getGroupAttributes 接口 SDK 限制为单个登录用户 5 秒 20 次。
4. 从 5.6 版本开始,当每次 App 启动后初次修改群属性时,请你先调用 getGroupAttributes 拉取到最新的群属性之后,再发起修改操作。
5. 从 5.6 版本开始,当多个用户同时修改同一个群属性时,只有第一个用户可以执行成功,其它用户会收到 10056 错误码;收到这个错误码之后,请你调用 getGroupAttributes 把本地保存的群属性更新到最新之后,再发起修改操作。