initGroupAttributes API (Java / Swift / Objective-C / C++) to initialize the group attributes, and the original group attributes, if any, will be cleared first.V2TIMManager.getGroupManager().initGroupAttributes("groupA", attributeMap, new V2TIMCallback() {@Overridepublic void onSuccess() {// Initialized the group attributes successfully}@Overridepublic void onError(int code, String desc) {// Failed to initialized the group attributes}});
V2TIMManager.shared.initGroupAttributes(groupID: "groupID", attributes: ["key1":"value1", "key2":"value2"]) {print( "initGroupAttributes succ")} fail: { code, desc inprint( "initGroupAttributes fail, \\(code), \\(desc)")}
[[V2TIMManager sharedInstance] initGroupAttributes:@"groupA" attributes:@{@"key1" : @"value1"} succ:^{// Initialized the group attributes successfully} fail:^(int code, NSString *desc) {// Failed to initialized the group attributes}];
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([=]() {// Initialized the group attributes successfullydelete callback;},[=](int error_code, const V2TIMString& error_message) {// Failed to initialized the group attributesdelete callback;});V2TIMManager::GetInstance()->GetGroupManager()->InitGroupAttributes(groupID, attributes, callback);
setGroupAttributes API (Java / Swift / Objective-C / C++) to set the group attributes. If a group attribute doesn't exist, it will be automatically added.HashMap<String, String> attributeMap = new HashMap<>();attributeMap.put("key1", "value1");attributeMap.put("key2", "value2");V2TIMManager.getGroupManager().setGroupAttributes("groupA", attributeMap, new V2TIMCallback() {@Overridepublic void onSuccess() {// Set the group attributes successfully}@Overridepublic void onError(int code, String desc) {// Failed to set the group attributes}});
V2TIMManager.shared.setGroupAttributes(groupID: "groupID", attributes: ["key1": "modify value1"]) {print( "setGroupAttributes succ")} fail: { code, desc inprint( "setGroupAttributes fail, \\(code), \\(desc)")}
[[V2TIMManager sharedInstance] setGroupAttributes:@"groupA" attributes:@{@"key1" : @"value1"} succ:^{// Set the group attributes successfully} fail:^(int code, NSString *desc) {// Failed to set the group attributes}];
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([=]() {// Set the group attributes successfullydelete callback;},[=](int error_code, const V2TIMString& error_message) {// Failed to set the group attributesdelete callback;});V2TIMManager::GetInstance()->GetGroupManager()->SetGroupAttributes(groupID, attributes, callback);
deleteGroupAttributes API (Java / Swift / Objective-C / C++) to delete a specified group attribute. If keys is set to null/nil, all the group attributes will be cleared.List<String> keyList = new ArrayList<>();keyList.add("key1");V2TIMManager.getGroupManager().deleteGroupAttributes("groupA", keyList, new V2TIMCallback() {@Overridepublic void onSuccess() {// Deleted successfully}@Overridepublic void onError(int code, String desc) {// Failed to delete}});
V2TIMManager.shared.deleteGroupAttributes(groupID: "groupID", keys: ["key1"]) {print( "deleteGroupAttributes succ")} fail: { code, desc inprint( "deleteGroupAttributes fail, \\(code), \\(desc)")}
[[V2TIMManager sharedInstance] deleteGroupAttributes:@"groupA" keys:@[@"key1"] succ:^{// Deleted successfully} fail:^(int code, NSString *desc) {// Failed to delete}];
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([=]() {// The group attributes deleted successfullydelete callback;},[=](int error_code, const V2TIMString& error_message) {// Failed to delete the group attributesdelete callback;});V2TIMManager::GetInstance()->GetGroupManager()->DeleteGroupAttributes(groupID, keys, callback);
getGroupAttributes API (Java / Swift / Objective-C / C++) to get a specified group attribute. If keys is set to null/nil, all the group attributes will be obtained.getGroupAttributes API can be called by a logged-in user 20 times every five seconds in the SDK.V2TIMManager.getGroupManager().getGroupAttributes("groupA", null, new V2TIMValueCallback<Map<String, String>>() {@Overridepublic void onSuccess(Map<String, String> stringStringMap) {// Obtained successfully}@Overridepublic void onError(int code, String desc) {// Failed to obtain}});
V2TIMManager.shared.getGroupAttributes(groupID: "groupID", keys: nil) { map inmap.forEach { (key: String, value: String) inprint( "\\(key): \\(value)")}} fail: { code, desc inprint( "getGroupAttributes fail, \\(code), \\(desc)")}
[[V2TIMManager sharedInstance] getGroupAttributes:@"groupA" keys:nil succ:^(NSMutableDictionary<NSString *,NSString *> *groupAttributeList) {// Obtained successfully} fail:^(int code, NSString *desc) {// Failed to obtain}];
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) {// The group attributes obtained successfullydelete callback;},[=](int error_code, const V2TIMString& error_message) {// Failed to obtain the group attributesdelete callback;});V2TIMManager::GetInstance()->GetGroupManager()->GetGroupAttributes("groupID", {}, callback);
addGroupListener to add a group event listener, all the group attributes will be called back through onGroupAttributeChanged (Java / Swift / Objective-C / C++) when a group attribute is changed.V2TIMManager.getInstance().addGroupListener(new V2TIMGroupListener() {@Overridepublic void onGroupAttributeChanged(String groupID, Map<String, String> groupAttributeMap) {// A group attribute was changed.}});
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);
initGroupAttributes, setGroupAttributes, and deleteGroupAttributes APIs each can be called by a logged-in user up to 10 times every 5 seconds in the SDK, and the 8511 error code will be called back if the limit is exceeded. The APIs each can be called by a logged-in user up to 5 times every second in the backend, and the 10049 error code will be called back if the limit is exceeded.getGroupAttributes API can be called by a logged-in user 20 times every 5 seconds in the SDK.getGroupAttributes to pull the latest group attributes before you initiate the modification operation.getGroupAttributes to update the locally stored group attributes to the latest before you initiate the modification operation.Feedback