一、获取群资料
你可以调用 getGroupsInfo (Java / Swift / Objective-C / C++) 获取群资料。该接口支持一次传入多个 groupID,批量获取多个群的群资料。
代码示例如下:
JavaSwiftObjective-CC++V2TIMManager.getGroupManager().getGroupsInfo(groupIDList, new V2TIMValueCallback<List<V2TIMGroupInfoResult>>() { @Override public void onSuccess(List<V2TIMGroupInfoResult> v2TIMGroupInfoResults) { // 获取群资料成功 } @Override public void onError(int code, String desc) { // 获取群资料失败 }});V2TIMManager.shared.getGroupsInfo(groupIDList: ["groupA"]) { groupResultList in groupResultList.forEach { item in print(item.description) }} fail: { code, desc in print("getGroupsInfo fail, \\(code), \\(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 (Java / Swift / Objective-C / C++) 修改群资料。
如果你事先调用 addGroupListener 添加了群组事件监听器,群资料被修改后,全员会收到 onGroupInfoChanged (Java / Swift / Objective-C / C++) 回调。
不同类型的群组,可以修改群资料的成员角色不同:
| 群组类型 | 可以修改群资料的成员角色 |
| 好友工作群(Work) | 所有群成员 |
| 陌生人社交群(Public) | 群主和管理员 |
| 临时会议群(Meeting) | 群主和管理员 |
| 社群(Community) | 群主和管理员 |
| 直播群(AVChatRoom) | 群主 |
注意:不是所有的群资料 V2TIMGroupInfo 的字段都能修改,只有可写的属性才能修改。
示例代码如下:
JavaSwiftObjective-CC++// 示例代码:修改群资料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) { // 修改群资料失败 }});let groupInfo = V2TIMGroupInfo()groupInfo.groupID = "groupA"groupInfo.faceURL = "http://xxxx"V2TIMManager.shared.setGroupInfo(info: groupInfo) { LOGI(message: "setGroupInfo succ")} fail: { code, desc in LOGI(message: "setGroupInfo fail, \\(code), \\(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. 在 即时通信 IM 控制台 配置群自定义字段的 key。key 为 string 类型,长度不超过 16 字节。如果不预配置 key,直接设置 key-value 会失败。配置页面如下:
2. 调用 setGroupInfo 接口设置该字段,value 长度不超过 512 字节。
注意:1. 最多可设置 10 个自定义字段,在字段创建后,该字段将不可删除,也无法修改字段名与字段类型。
注意:2. 自定义字段主要用于 V1 和 V2 版本的兼容,如果你直接使用的是 V2 版本的 API,建议使用 initGroupAttributes 接口设置群属性,其设置更灵活(无需控制台配置),支持的存储也更大(最大支持 16K)。详情请参考 群自定义属性。
四、设置群消息的接收选项
任何群成员都可以调用 setGroupReceiveMessageOpt (Java / Swift / Objective-C / C++) 接口修改群消息接收选项。该设置仅针对当前操作的群成员生效,不会影响其他群成员的设置。
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.1 当群内收到新消息,会话列表需要更新时,可以通过会话 V2TIMConversation 中的 unreadCount (Java / Swift / Objective-C / C++) 获取到消息未读数。
1.2 根据 V2TIMConversation 的 recvOpt (Java / Swift / Objective-C / C++) 判断获取到的群消息接收选项为 V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE 时显示小红点而非消息未读数。
·接收群内消息但只提醒 at 消息,在会话列表界面显示小圆点(不显示未读数)
群消息接收选项设置为 V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE_EXCEPT_AT 后,正常接收群内消息只提醒 at 消息。
·只接收 at 消息
仅适用话题场景,消息接收选项设置为 V2TIM_NOT_RECEIVE_MESSAGE_EXCEPT_AT,在线和离线都只接收 at 消息。
注意:说明:
注意:此方式需使用 unreadCount 功能,仅适用于好友工作群(Work)、陌生人社交群(Public)和社群(Community),直播群(AVChatRoom)、临时会议群(Meeting)暂不支持。群组类型详见 群类型介绍。
示例代码如下:
JavaSwiftObjective-CV2TIMManager.getMessageManager().setGroupReceiveMessageOpt("groupA", V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE, new V2TIMCallback() { @Override public void onSuccess() { // 修改群消息接收选项成功 } @Override public void onError(int code, String desc) { // 修改群消息接收选项失败 }});V2TIMManager.shared.setGroupReceiveMessageOpt(groupID: "groupID", opt: .V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE, succ: { // 修改群消息接收选项成功}, fail: { code, msg in // 修改群消息接收选项失败})[[V2TIMManager sharedInstance] setGroupReceiveMessageOpt:@"groupID" opt:V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE succ:^{ // 修改群消息接收选项成功} fail:^(int code, NSString *msg) { // 修改群消息接收选项失败}];