群资料

功能描述

群资料指的是与群组相关的一些信息,例如群 ID、群类型、群自定义字段、已加入的成员数量等,保存在 V2TIMGroupInfo 对象中。该对象由 IM SDK 创建并返回,不支持用户自定义。

获取群资料

您可以调用 getGroupsInfo (Android / iOS & Mac / Windows) 获取群资料。该接口支持一次传入多个 groupID,批量获取多个群的群资料。
代码示例如下:
Android
iOS & Mac
Windows
V2TIMManager.getGroupManager().getGroupsInfo(groupIDList, new V2TIMValueCallback<List<V2TIMGroupInfoResult>>() {
@Override
public void onSuccess(List<V2TIMGroupInfoResult> v2TIMGroupInfoResults) {
// 获取群资料成功
}

@Override
public void onError(int code, String desc) {
// 获取群资料失败
}
});
[[V2TIMManager sharedInstance] getGroupsInfo:@[@"groupA"] succ:^(NSArray<V2TIMGroupInfoResult *> *groupResultList) {
// 获取群资料成功
} 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_;
};

V2TIMStringVector groupIDList;
groupIDList.PushBack("group1");

auto callback = new ValueCallback<V2TIMGroupInfoResultVector>{};
callback->SetCallback(
[=](const V2TIMGroupInfoResultVector& groupInfoResultList) {
// 获取群资料成功
delete callback;
},
[=](int error_code, const V2TIMString& error_message) {
// 获取群资料失败
delete callback;
});
V2TIMManager::GetInstance()->GetGroupManager()->GetGroupsInfo(groupIDList, callback);

修改群资料

您可以调用 setGroupInfo (Android / iOS & Mac / Windows) 修改群资料。
如果您事先调用 addGroupListener 添加了群组事件监听器,群资料被修改后,全员会收到 onGroupInfoChanged (Android / iOS & Mac / Windows) 回调。
不同类型的群组,可以修改群资料的成员角色不同:
群组类型
可以修改群资料的成员角色
好友工作群(Work)
所有群成员
陌生人社交群(Public)
群主和管理员
临时会议群(Meeting)
群主和管理员
社群(Community)
群主和管理员
直播群(AVChatRoom)
群主
注意
不是所有的群资料 V2TIMGroupInfo 的字段都能修改,只有可写的属性才能修改。
示例代码如下:
Android
iOS & Mac
Windows
// 示例代码:修改群资料
V2TIMGroupInfo v2TIMGroupInfo = new V2TIMGroupInfo();
v2TIMGroupInfo.setGroupID("需要修改的群 ID");
v2TIMGroupInfo.setFaceUrl("http://xxxx");
V2TIMManager.getGroupManager().setGroupInfo(v2TIMGroupInfo, new V2TIMCallback() {
@Override
public void onSuccess() {
// 修改群资料成功
}

@Override
public void onError(int code, String desc) {
// 修改群资料失败
}
});
V2TIMGroupInfo *info = [[V2TIMGroupInfo alloc] init];
info.groupID = @"需要修改的群 ID";
info.faceURL = @"http://xxxx";
[[V2TIMManager sharedInstance] setGroupInfo:info 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_;
};

V2TIMGroupInfo info;
info.groupID = "需要修改的群 ID";
info.faceURL = "http://xxxx";
info.modifyFlag |= V2TIM_GROUP_INFO_MODIFY_FLAG_FACE_URL;

auto callback = new Callback;
callback->SetCallback(
[=]() {
// 修改群资料成功
delete callback;
},
[=](int error_code, const V2TIMString& error_message) {
// 修改群资料失败
delete callback;
});

V2TIMManager::GetInstance()->GetGroupManager()->SetGroupInfo(info, callback);

设置群自定义字段

群资料 V2TIMGroupInfo 中的属性 customInfo 表示群自定义字段,您同样可调用上节介绍的 API setGroupInfo 修改该字段值。
与设置 V2TIMGroupInfo 中的其他字段不同,设置群自定义字段需要 2 个步骤:
1. 控制台 配置群自定义字段的 key。key 为 string 类型,长度不超过 16 字节。如果不预配置 key,直接设置 key-value 会失败。配置路径:Applications > Your App > Chat > Configuration > Group Configuration > Custom Group Field。
2. 调用 setGroupInfo 接口设置该字段,value 长度不超过 512 字节。
注意
1. 最多可设置 10 个自定义字段,在字段创建后,该字段将不可删除,也无法修改字段名与字段类型。
2. 自定义字段主要用于 V1 和 V2 版本的兼容,如果您直接使用的是 V2 版本的 API,建议使用 initGroupAttributes 接口设置群属性,其设置更灵活(无需控制台配置),支持的存储也更大(最大支持 16K)。详情请参考 群自定义属性

设置群消息的接收选项

任何群成员都可以调用 setGroupReceiveMessageOpt (Android / iOS & Mac / Windows) 接口修改群消息接收选项。该设置仅针对当前操作的群成员生效,不会影响其他群成员的设置。
V2TIMReceiveMessageOpt 的可选项有:
消息接收选项
支持类型
功能描述
V2TIM_RECEIVE_MESSAGE
单聊、群聊、全局
在线时正常接收消息,离线时接收离线推送通知
V2TIM_NOT_RECEIVE_MESSAGE
单聊、群聊
在线和离线都不接收消息
V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE
单聊、群聊、全局
在线时正常接收消息,离线时不接收离线推送通知
V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE_EXCEPT_AT
群聊
在线接收消息,离线只接收 at 消息的推送
V2TIM_NOT_RECEIVE_MESSAGE_EXCEPT_AT
话题
在线和离线只接收 at 消息
设置不同的 V2TIMReceiveMessageOpt 可以实现群消息免打扰:
免打扰效果
消息接收选项
说明
完全不接收消息
V2TIM_NOT_RECEIVE_MESSAGE
群内的任何消息都收不到,会话列表也不会更新。
接收消息但不提醒
V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE
此时建议在会话列表界面显示小圆点(不显示未读数):
1、收到新消息,会话列表需要更新,通过会话 V2TIMConversation 中的 unreadCount 获取到消息未读数。
2、如果未读数大于零,UI 显示小红点而非未读数。
接收消息但只提醒 at 消息
V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE_EXCEPT_AT
正常接收群内消息只提醒 at 消息。
只接收 at 消息
V2TIM_NOT_RECEIVE_MESSAGE_EXCEPT_AT
在线和离线只接收话题的 at 消息。
说明:
以上实现效果中如果涉及V2TIMConversationunreadCount,只能在好友工作群(Work)、陌生人社交群(Public)和社群(Community)中使用,直播群(AVChatRoom)、临时会议群(Meeting)暂不支持。群组类型详见 群组介绍
示例代码如下:
Android
iOS & Mac
Windows
V2TIMManager.getMessageManager().setGroupReceiveMessageOpt("groupA", V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE, new V2TIMCallback() {
@Override
public void onSuccess() {
// 修改群消息接收选项成功
}

@Override
public void onError(int code, String desc) {
// 修改群消息接收选项失败
}
});
[[V2TIMManager sharedInstance] setGroupReceiveMessageOpt:@"groupA" opt:V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE 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";
V2TIMReceiveMessageOpt opt = V2TIMReceiveMessageOpt::V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE;

auto callback = new Callback;
callback->SetCallback(
[=]() {
// 修改群消息接收选项成功
delete callback;
},
[=](int error_code, const V2TIMString& error_message) {
// 修改群消息接收选项失败
delete callback;
});

V2TIMManager::GetInstance()->GetMessageManager()->SetGroupReceiveMessageOpt(groupID, opt, callback);