功能描述
基于 API 2.0 我们设计了全新的群自定义字段,我们称之为 "群属性"。
基于群属性,我们可以做语聊房的麦位管理。当有人上麦的时候,可以设置一个群属性管理上麦人信息。当有人下麦的时候,可以删除对应群属性。其他成员可以通过获取群属性列表来展示麦位列表。
群属性通过键值对的方式表示,相关方法在核心类 V2TIMGroupManager(Android)
/ V2TIMManager(Group)(iOS & Mac)
中。
说明:
- 6.7 及其以前版本,只支持 AVChatRoom 直播群;
- 从 6.8 版本开始,同时支持 AVChatRoom、Public、Meeting、Work 四种群类型;
- 社群和话题暂时不支持。
群属性功能特性有:
- 最多支持 16 个群属性,每个群属性的大小最大支持 4k,所有群属性的大小最大支持 16k。
initGroupAttributes
、setGroupAttributes
、deleteGroupAttributes
接口合并计算,SDK 限制为单个登录用户 5 秒 10 次,超过后回调 8511 错误码;后台限制单个登录用户 1 秒 5 次,超过后返回 10049 错误码。
getGroupAttributes
接口 SDK 限制为单个登录用户 5 秒 20 次。
- 从 5.6 版本开始,当每次APP启动后初次修改群属性时,请您先调用 getGroupAttributes 拉取到最新的群属性之后,再发起修改操作。
- 从 5.6 版本开始,当多个用户同时修改同一个群属性时,只有第一个用户可以执行成功,其它用户会收到 10056 错误码;收到这个错误码之后,请您调用 getGroupAttributes 把本地保存的群属性更新到最新之后,再发起修改操作。
初始化群属性
调用 initGroupAttributes
(Android / iOS & Mac / Windows) 接口可以初始化群属性。如果该群之前有群属性,会先清空原来的群属性。
示例代码如下:
V2TIMManager.getGroupManager().initGroupAttributes("groupA", attributeMap, new V2TIMCallback() {
@Override
public void onSuccess() {
}
@Override
public void onError(int code, String 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&)>;
<span class="hljs-built_in">Callback</span>() = <span class="hljs-keyword">default</span>;
~<span class="hljs-built_in">Callback</span>() <span class="hljs-keyword">override</span> = <span class="hljs-keyword">default</span>;
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">SetCallback</span><span class="hljs-params">(SuccessCallback success_callback, ErrorCallback error_callback)</span> </span>{
success_callback_ = std::<span class="hljs-built_in">move</span>(success_callback);
error_callback_ = std::<span class="hljs-built_in">move</span>(error_callback);
}
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">OnSuccess</span><span class="hljs-params">()</span> <span class="hljs-keyword">override</span> </span>{
<span class="hljs-keyword">if</span> (success_callback_) {
<span class="hljs-built_in">success_callback_</span>();
}
}
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">OnError</span><span class="hljs-params">(<span class="hljs-keyword">int</span> error_code, <span class="hljs-keyword">const</span> V2TIMString& error_message)</span> <span class="hljs-keyword">override</span> </span>{
<span class="hljs-keyword">if</span> (error_callback_) {
<span class="hljs-built_in">error_callback_</span>(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
(Android / iOS & Mac / Windows) 接口可以设置群属性。如果设置的群属性不存在,会自动添加该群属性。
示例代码如下:
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 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&)>;
<span class="hljs-built_in">Callback</span>() = <span class="hljs-keyword">default</span>;
~<span class="hljs-built_in">Callback</span>() <span class="hljs-keyword">override</span> = <span class="hljs-keyword">default</span>;
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">SetCallback</span><span class="hljs-params">(SuccessCallback success_callback, ErrorCallback error_callback)</span> </span>{
success_callback_ = std::<span class="hljs-built_in">move</span>(success_callback);
error_callback_ = std::<span class="hljs-built_in">move</span>(error_callback);
}
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">OnSuccess</span><span class="hljs-params">()</span> <span class="hljs-keyword">override</span> </span>{
<span class="hljs-keyword">if</span> (success_callback_) {
<span class="hljs-built_in">success_callback_</span>();
}
}
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">OnError</span><span class="hljs-params">(<span class="hljs-keyword">int</span> error_code, <span class="hljs-keyword">const</span> V2TIMString& error_message)</span> <span class="hljs-keyword">override</span> </span>{
<span class="hljs-keyword">if</span> (error_callback_) {
<span class="hljs-built_in">error_callback_</span>(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
(Android / iOS & Mac / Windows) 接口可以删除指定群属性,如果 keys
字段填 null
/nil
,则会清空所有的群属性。
示例代码如下:
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 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&)>;
<span class="hljs-built_in">Callback</span>() = <span class="hljs-keyword">default</span>;
~<span class="hljs-built_in">Callback</span>() <span class="hljs-keyword">override</span> = <span class="hljs-keyword">default</span>;
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">SetCallback</span><span class="hljs-params">(SuccessCallback success_callback, ErrorCallback error_callback)</span> </span>{
success_callback_ = std::<span class="hljs-built_in">move</span>(success_callback);
error_callback_ = std::<span class="hljs-built_in">move</span>(error_callback);
}
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">OnSuccess</span><span class="hljs-params">()</span> <span class="hljs-keyword">override</span> </span>{
<span class="hljs-keyword">if</span> (success_callback_) {
<span class="hljs-built_in">success_callback_</span>();
}
}
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">OnError</span><span class="hljs-params">(<span class="hljs-keyword">int</span> error_code, <span class="hljs-keyword">const</span> V2TIMString& error_message)</span> <span class="hljs-keyword">override</span> </span>{
<span class="hljs-keyword">if</span> (error_callback_) {
<span class="hljs-built_in">error_callback_</span>(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
(Android / iOS & Mac / Windows) 接口可以获取指定群属性,如果 keys
字段填 null
/nil
,则会获取所有的群属性。
说明:
getGroupAttributes
接口 SDK 限制为单个登录用户 5 秒 20 次。
示例代码如下:
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 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&)>;
<span class="hljs-built_in">ValueCallback</span>() = <span class="hljs-keyword">default</span>;
~<span class="hljs-built_in">ValueCallback</span>() <span class="hljs-keyword">override</span> = <span class="hljs-keyword">default</span>;
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">SetCallback</span><span class="hljs-params">(SuccessCallback success_callback, ErrorCallback error_callback)</span> </span>{
success_callback_ = std::<span class="hljs-built_in">move</span>(success_callback);
error_callback_ = std::<span class="hljs-built_in">move</span>(error_callback);
}
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">OnSuccess</span><span class="hljs-params">(<span class="hljs-keyword">const</span> T& value)</span> <span class="hljs-keyword">override</span> </span>{
<span class="hljs-keyword">if</span> (success_callback_) {
<span class="hljs-built_in">success_callback_</span>(value);
}
}
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">OnError</span><span class="hljs-params">(<span class="hljs-keyword">int</span> error_code, <span class="hljs-keyword">const</span> V2TIMString& error_message)</span> <span class="hljs-keyword">override</span> </span>{
<span class="hljs-keyword">if</span> (error_callback_) {
<span class="hljs-built_in">error_callback_</span>(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
(Android / iOS & Mac / Windows) 回调出来所有的群属性字段。
示例代码如下:
V2TIMManager.getInstance().addGroupListener(new V2TIMGroupListener() {
@Override
public void onGroupAttributeChanged(String groupID, Map<String, String> groupAttributeMap) {
}
});
[[V2TIMManager sharedInstance] addGroupListener:self];
- (void)onGroupAttributeChanged:(NSString *)groupID attributes:(NSMutableDictionary<NSString *,NSString *> *)attributes {
}
class GroupListener final : public V2TIMGroupListener {
public:
GroupListener() = default;
~GroupListener() override = default;
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">OnGroupAttributeChanged</span><span class="hljs-params">(<span class="hljs-keyword">const</span> V2TIMString& groupID,
<span class="hljs-keyword">const</span> V2TIMGroupAttributeMap& groupAttributeMap)</span> <span class="hljs-keyword">override</span> </span>{
<span class="hljs-comment">// 群属性变更通知</span>
}
<span class="hljs-comment">// 其他成员 ...</span>
};
GroupListener groupListener;
V2TIMManager::GetInstance()->AddGroupListener(&groupListener);
本页内容是否解决了您的问题?