即时通信 IM Android&iOS&Windows&Mac(群计数器)

群计数器是给每个群组开放了一个用于存储整数类型数据的能力。可以以用它存储一些群组纬度、整数类型的附加信息,例如直播群的累计观看人数、观看人次、主播被点赞的次数、观众累计送给主播的礼物数等。

相关产品
即时通信 IM 产品页,含版本规格、价格与购买入口。

一、功能描述

注意:说明:

二、效果展示

你可以使用群计数器实现如下的效果:

三、接口说明

群计数器的接口限制:

1. 单个群内最大支持 20 组群计数器,也就是说,单个群内 key 的个数不超过 20 个;

2. 单个群计数器的 key 不超过 128 字节,value 必须为整数类型(最大支持 64 位有符号整型);

3. setGroupCounters、increaseGroupCounter、decreaseGroupCounter 接口合并计算,SDK 限制为单个登录用户最多 5 秒调用 20 次,超过限制后接口回调 8516 错误码;

4. getGroupCounters 接口单独计算,SDK 限制为单个登录用户最多 5 秒 20 次调用,超过限制后接口回调 8516 错误码。

四、设置群计数器

你可以调用接口 setGroupCounters(Java / Swift / Objective-C / C++)设置多组群计数器。计数器设置成功后会触发 onGroupCounterChanged (Java / Swift / Objective-C / C++)回调,onGroupCounterChanged 的使用参见下文的 群计数器变更通知。

注意:说明:

示例:调用 setGroupCounters 接口分别设置计数器 key1 和 key2 的值为 0。

JavaSwiftObjective-CC++HashMap<String, Long> counters = new HashMap<>();counters.put("key1", 0);counters.put("key2", 0);V2TIMManager.getGroupManager().setGroupCounters("your group id", counters, new V2TIMValueCallback<Map<String, Long>>(){ @Override public void onError(int code, String desc) { Log.d(TAG, "set group counters fail"); } @Override public void onSuccess(Map<String, Long> stringLongMap) { Log.d(TAG, "set group counters succ"); }});V2TIMManager.shared.setGroupCounters(groupID: "", counters: ["key1":1, "key2":2]) { groupCounters in print( "setGroupCounters succ, \\(groupCounters)")} fail: { code, desc in print( "setGroupCounters fail, \\(code), \\(desc)")}NSDictionary *counters = @{ @"key1": @(0), @"key2": @(0)};[V2TIMManager.sharedInstance setGroupCounters:@"your group id" counters:counters succ:^(NSDictionary<NSString *,NSNumber *> *groupCounters) { NSLog(@"set group counters succ");} fail:^(int code, NSString *desc) { NSLog(@"set group counters fail");}];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_;};void setGroupCounters() { V2TIMString groupID = "your group id"; V2TIMStringToInt64Map counters; counters.Insert("key1", 0); counters.Insert("key2", 0); auto callback = new ValueCallback<V2TIMStringToInt64Map>{}; callback->SetCallback( [=](const V2TIMStringToInt64Map &counters){ // succ }, [=](int error_code, const V2TIMString& error_message){ // fail }); V2TIMManager::GetInstance()->GetGroupManager()->SetGroupCounters(groupID, counters, callback);}

五、递增群计数器

你可以调用递增接口 increaseGroupCounter (Java / Swift / Objective-C / C++) 对群计数器作累加操作,操作成功后会触发 onGroupCounterChanged (Java / Swift / Objective-C / C++)回调。onGroupCounterChanged 的使用参见下文的 群计数器变更通知。

注意:说明:

示例:假设当前的计数器 key1 的值是 8,调用 increaseGroupCounter 接口传入的递增变化量 value 为 2 后,最终 key1 的值变为 10。

JavaSwiftObjective-CC++V2TIMManager.getGroupManager().increaseGroupCounter("your group id", "key1", 2, new V2TIMValueCallback<Map<String, Long>>(){ @Override public void onError(int code, String desc) { Log.d(TAG, "increase group counters fail"); } @Override public void onSuccess(Map<String, Long> stringLongMap) { Log.d(TAG, "increase group counters succ"); }});V2TIMManager.shared.increaseGroupCounter(groupID: "", key: "key1", value: 2) { groupCounters in print( "increaseGroupCounters succ, \\(groupCounters)")} fail: { code, desc in print( "increaseGroupCounters fail, \\(code), \\(desc)")}[V2TIMManager.sharedInstance increaseGroupCounter:@"your group id" key:@"key1" value:2 succ:^(NSDictionary<NSString *,NSNumber *> *groupCounters) { NSLog(@"increase group counters succ");} fail:^(int code, NSString *desc) { NSLog(@"increase group counters fail");}];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_;};void increaseGroupCounters() { V2TIMString groupID = "your group id"; V2TIMString key = "key1"; int64_t value = 2; auto callback = new ValueCallback<V2TIMStringToInt64Map>{}; callback->SetCallback( [=](const V2TIMStringToInt64Map &counters){ // succ }, [=](int error_code, const V2TIMString& error_message){ // fail }); V2TIMManager::GetInstance()->GetGroupManager()->IncreaseGroupCounter(groupID, key, value, callback);}

六、递减群计数器

你可以调用递减接口 decreaseGroupCounter (Java / Swift / Objective-C / C++) 对群计数器作累减操作,操作成功后会触发 onGroupCounterChanged (Java / Swift / Objective-C / C++)回调,onGroupCounterChanged 的使用参见下文的 群计数器变更通知。

注意:说明:

示例:假设当前的计数器 key1 的值是 8,调用 decreaseGroupCounter 接口传入的递减变化量 value 为 2 后,最终 key1 的值变为 6。

JavaSwiftObjective-CC++V2TIMManager.getGroupManager().decreaseGroupCounter("your group id", "key1", 2, new V2TIMValueCallback<Map<String, Long>>(){ @Override public void onError(int code, String desc) { Log.d(TAG, "decrease group counters fail"); } @Override public void onSuccess(Map<String, Long> stringLongMap) { Log.d(TAG, "decrease group counters succ"); }});V2TIMManager.shared.decreaseGroupCounter(groupID: "", key: "key1", value: 2) { groupCounters in print( "decreaseGroupCounters succ, \\(groupCounters)")} fail: { code, desc in print( "decreaseGroupCounters fail, \\(code), \\(desc)")}[V2TIMManager.sharedInstance decreaseGroupCounter:@"your group id" key:@"key1" value:2 succ:^(NSDictionary<NSString *,NSNumber *> *groupCounters) { NSLog(@"decrease group counters succ");} fail:^(int code, NSString *desc) { NSLog(@"decrease group counters fail");}];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_;};void decreaseGroupCounters() { V2TIMString groupID = "your group id"; V2TIMString key = "key1"; int64_t value = 2; auto callback = new ValueCallback<V2TIMStringToInt64Map>{}; callback->SetCallback( [=](const V2TIMStringToInt64Map &counters){ // succ }, [=](int error_code, const V2TIMString& error_message){ // fail }); V2TIMManager::GetInstance()->GetGroupManager()->decreaseGroupCounter(groupID, key, value, callback);}

七、获取群计数器

你可以调用接口 getGroupCounters (Java / Swift / Objective-C / C++) ,并通过传入一组指定的 key 来获取对应的群计数器信息。接口会返回所有的与 key 相匹配的 key-value 键值对。

注意:说明:

注意:如果传入的 key 列表为空,则返回所有的群计数器。

示例:调用接口 getGroupCounters 分别获取计数器 key1 和 key2 的值。

JavaSwiftObjective-CC++List<String> keyList = Arrays.asList("key1", "key2");V2TIMManager.getGroupManager().getGroupCounters("your group id", keyList, new V2TIMValueCallback<Map<String, Long>>() { @Override public void onError(int code, String desc) { Log.d(TAG, "get group counters fail"); } @Override public void onSuccess(Map<String, Long> stringLongMap) { Log.d(TAG, "get group counters succ"); }});V2TIMManager.shared.getGroupCounters(groupID: "", keys: nil) { groupCounters in print( "getGroupCounters succ, \\(groupCounters)")} fail: { code, desc in print( "getGroupCounters fail, \\(code), \\(desc)")}[V2TIMManager.sharedInstance getGroupCounters:@"your group id" keys:@[@"key1", @"key2"] succ:^(NSDictionary<NSString *,NSNumber *> *groupCounters) { NSLog(@"get group counters succ");} fail:^(int code, NSString *desc) { NSLog(@"get group counters fail");}];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_;};void getGroupCounters() { V2TIMString groupID = "your group id"; V2TIMStringVector keys; keys.PushBack("key1"); keys.PushBack("key2"); auto callback = new ValueCallback<V2TIMStringToInt64Map>{}; callback->SetCallback( [=](const V2TIMStringToInt64Map &counters){ // succ }, [=](int error_code, const V2TIMString& error_message){ // fail }); V2TIMManager::GetInstance()->GetGroupManager()->GetGroupCounters(groupID, keys, callback);}

八、群计数器变更通知

当你调用 setGroupCounters、increaseGroupCounter、decreaseGroupCounter 接口修改群计数器时,会触发 onGroupCounterChanged 回调,并返回变化后的 value 值。

注意:说明:

注意:在使用上述回调之前,你需要调用接口 addGroupListener (Java / Swift / Objective-C / C++)添加群监听器。

示例代码如下:

JavaSwiftObjective-CC++private void initListener() { if (groupListener == null) { groupListener = new V2TIMGroupListener() { @Override public void onGroupCounterChanged(String groupID, String key, long newValue) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("onGroupCounterChanged groupID:").append(groupID).append("\\n"); stringBuilder.append("key:").append(key).append(", newValue:").append(String.valueOf(newValue)).append("\\n"); String result = "onGroupCounterChanged :" + stringBuilder.toString(); Log.d(TAG, result); } }; V2TIMManager.getInstance().addGroupListener(groupListener); }}V2TIMManager.shared.addGroupListener(listener: self)func onGroupCounterChanged(groupID: String, key: String, newValue: Int) { print( "groupID:\\(groupID), key:\\(key), value:\\(newValue)")}[V2TIMManager.sharedInstance addGroupListener:self];#pragma mark – V2TIMGroupListener- (void)onGroupCounterChanged:(NSString *)groupID key:(NSString *)key newValue:(NSInteger)newValue { NSLog(@"groupID:%@, changed:\\n%@:%zd\\n", groupID, key, newValue);}class GroupListener final : public V2TIMGroupListener {public: GroupListener() = default; ~GroupListener() override = default; void OnGroupCounterChanged(const V2TIMString &groupID, const V2TIMString &key, int64_t newValue) override { // changed }};GroupListener listener;V2TIMManager::GetInstance()->AddGroupListener(&listener);

赞 (0)
上一篇 4天前
下一篇 4天前