超大群管理
更新时间: 2024/03/12 10:59:50
超大群功能概述
超大群是针对大规模群聊场景的功能。目前支持不超过10000人的群聊。由于超大群场景较为特殊,并不能支持所有高级群提供的管理功能。目前超大群支持群主、管理员与普通成员三种身份。开通超大群功能请联系商务。
群聊消息
群聊消息收发和管理与双人聊天完全相同,仅在消息类型(kNIMMsgKeyToType)上做了区分。
获取群组
SDK 在程序启动时会对本地群信息进行同步,所以只需要调用本地缓存接口获取群就可以了。SDK 提供了批量获取自己的群接口、以及根据单个群 ID 查询的接口。同样SDK 也提供了远程获取群信息的接口。
- 本地获取群组id列表
C++void nim_super_team_query_all_my_teams_async(const char *json_extension, nim_super_team_query_all_my_teams_cb_func cb, const void *user_data);
- 本地获取群组列表(群信息)
C++void nim_super_team_query_all_my_teams_info_async(const char *json_extension, nim_super_team_query_all_my_teams_info_cb_func cb, const void *user_data);
V2.7.0版本后可以通过该接口获取本地缓存的无效群组(不在群或群已经解散)信息:
C++Json::Value values;
Json::FastWriter fw;
values[kNIMSuperTeamSearchKeyIncludeInvalid] = true;
exten = values.toStyledString();
nim_super_team_query_all_my_teams_info_async(exten.c_str(), &QueryAllMyTeamsInfoCallback, nullptr);
在回调函数中,开发者通过解析群组信息json后,通过kNIMSuperTeamInfoKeyValidFlag字段区分该群为存在的群还是已经解散的群,通过kNIMSuperTeamInfoKeyMemberValid字段区分自己是否还在该群。
- 从服务器上获取群组信息
C++void nim_super_team_query_team_info_online_async(const char *tid, const char *json_extension, nim_super_team_opt_cb_func cb, const void *user_data);
加入群组
超大群SDK只支持主动邀请的方式将用户加入到群组中。
- 邀请用户入群:
请求完成后,被邀请者将直接入群。
C++
C++void OnTeamEventCallback(const nim::SuperTeamEvent& result)
{
···
}
void foo()
{
const std::list<std::string> friend_list;
friend_list.push_back("test1");
friend_list.push_back("test2");
nim::SuperTeam::InviteAsync("123445", friend_list, &OnTeamEventCallback);
}
C
Cvoid CallbackTeamChange(int res_code, int notification_id, const char *tid, const char *result, const char *json_extension, const void *user_data)
{
//
}
typedef void(*nim_super_team_invite_async)(const char *tid, const char *jsonlist_uids, const char *json_extension, nim_super_team_event_cb_func cb, const void* user_data);
void foo()
{
Json::Value friend_list;
friend_list.append("litianyi01");
friend_list.append("litianyi02");
nim_super_team_invite_async func = (nim_super_team_invite_async) GetProcAddress(hInst, "nim_super_team_invite_async");
func("12345", friend_list.toStyledString().c_str(), "", &CallbackTeamChange, nullptr);
}
踢人出群
超大群群组可以踢人。
C++
C++void TeamEventCb(const nim::SuperTeamEvent& team_event)
{
···
}
void foo()
{
std::list<std::string> uids_list;
uids_list.push_back("test_user");
nim::SuperTeam::KickAsync("12345", uids_list, &TeamEventCb);
}
C
Cvoid TeamEventCb(int res_code, int notification_id, const char *tid, const char *result, const char *json_extension, const void *user_data)
{
···
}
typedef void(*nim_super_team_kick_async)(const char *tid, const char *jsonlist_uids, const char *json_extension, nim_super_team_event_cb_func cb, const void* user_data);
void foo()
{
nim_super_team_kick_async func = (nim_super_team_kick_async) GetProcAddress(hInst, "nim_super_team_kick_async");
Json::Value json_value;
json_value.append("litianyi01");
json_value.append("litianyi02");
func("12345", json_value.toStyledString().c_str(), "", &TeamEventCb, nullptr);
}
主动退群
除拥有者外,其他用户均可以主动退群:
C++
C++void TeamEventCb(const nim::SuperTeamEvent& team_event)
{
···
}
void foo()
{
nim::SuperTeam::LeaveAsync("12345", &TeamEventCb);
}
C
Cvoid TeamEventCb(int res_code, int notification_id, const char *tid, const char *result, const char *json_extension, const void *user_data)
{
···
}
typedef void(*nim_super_team_leave_async)(const char *tid, const char *json_extension, nim_super_team_event_cb_func cb, const void* user_data);
void foo()
{
nim_super_team_leave_async func = (nim_super_team_leave_async) GetProcAddress(hInst, "nim_super_team_leave_async");
func("12345", "", &TeamEventCb, nullptr);
}
编辑群组资料
超大群拥有者可修改群名及其他群资料。
C++void nim_super_team_update_team_info_async(const char *tid, const char *json_info, const char *json_extension, nim_super_team_opt_cb_func cb, const void *user_data);
例:
C++
C++void OnUpdateBroadCb(const nim::SuperTeamEvent& team_event)
{
if (team_event.res_code_ == 200)
{
···
}
}
void foo()
{
Json::Value broad;
broad["title"] = "title";
broad["content"] = "内容";
broad["creator"] = "test_user";
Json::Value broads;
broads.append(broad);
Json::FastWriter writer;
nim::SuperTeamInfo param;
param.SetAnnouncement(writer.write(broads));
param.SetTeamID("tid_");
nim::SuperTeam::UpdateSuperTeamInfoAsync("tid_", param, &OnUpdateBroadCb);
}
C
Cvoid CallbackTeamOperate(int error, int team_operate, const char *tid, const char* str, const char *json_exten, const void *user_data)
{
if (error == kNIMResSuccess)
{
...
}
else
{
...
}
}
typedef void(*nim_super_team_update_team_info_async)(const char *tid, const char *json_info, const char *json_extension, nim_super_team_event_cb_func cb_func, const void* user_data);
void foo()
{
Json::Value values;
values[kNIMTeamInfoKeyID] = "tid";
values[kNIMTeamInfoKeyAnnouncement] = "123"; //修改群公告,同样的,目前可以修改群名称,群简介,具体参阅api文档
nim_super_team_update_team_info_async func = (nim_super_team_update_team_info_async) GetProcAddress(hInst, "nim_super_team_update_team_info_async");
func("tid", values.toStyledString().c_str(), nullptr, &CallbackTeamOperate, nullptr);
}
群组成员
- 获取群成员列表,获取到的群成员只有网易云信服务器托管的群相关数据,需要开发者结合自己管理的用户数据进行界面显示。
C++void nim_super_team_query_team_members_async(const char *tid, bool include_user_info, const char *json_extension, nim_super_team_query_team_members_cb_func cb, const void *user_data);
例:
C++
C++void OnGetTeamMembers(const std::string& team_id, int count, const std::list<nim::SuperTeamMemberProperty>& team_member_list)
{
for (const auto& member : team_member_list)
{
···
}
}
foo()
{
nim::SuperTeam::QuerySuperTeamMembersAsync("tid_", &OnGetTeamMembers);
}
C
Cvoid CallbackQueryTeamMembersCb(const char * tid, int count, bool include_user_info, const char* str, const char *json_exten, const void *user_data)
{
//解析str
}
typedef void(*nim_super_team_query_team_members_async)(const char *tid, bool include_user_info, const char *json_extension, nim_super_team_query_team_members_cb_func cb, const void* user_data);
void foo()
{
nim_super_team_query_team_members_async func = (nim_super_team_query_team_members_async) GetProcAddress(hInst, "nim_super_team_query_team_members_async");
func("tid", include_user_info ? true : false, nullptr, &CallbackQueryTeamMembersCb, nullptr);
}
开发者可以通过调用该接口获取本地缓存中无效的群成员(已经不在群内)信息:
C++Json::Value values;
Json::FastWriter fw;
values[kNIMSuperTeamSearchKeyIncludeInvalid] = true;
exten = values.toStyledString();
//include_user_info必须为true
func("tid", true, exten.c_str(), &CallbackQueryTeamMembersCb, nullptr);
在回调函数中,开发者通过解析群成员json,通过kNIMSuperTeamUserKeyValidFlag字段判断该成员目前是否还在群里。
群组通知
用户在创建群或者进入群成功之后,任何关于群的变动(群组资料变动,群成员变动等),网易云信服务器都会下发一条群通知消息。APP 可以通过注册全局回调函数接受群组通知。
C++void nim_super_team_reg_team_event_cb(const char *json_extension, nim_super_team_event_cb_func cb, const void *user_data);
例:
C++
C++void OnTeamEventCallback(const nim::SuperTeamEvent& result)
{
···
}
foo()
{
nim::SuperTeam::RegSuperTeamEventCb(&OnTeamEventCallback);
}
C
Cvoid CallbackTeamEvent(int error, int team_event, const char *tid, const char* str, const char *json_exten, const void *user_data)
{
switch (team_event)
{
...
}
}
typedef void(*nim_super_team_reg_team_event_cb)(const char *json_extension, nim_super_team_event_cb_func cb, const void *user_data);
void foo()
{
nim_super_team_reg_team_event_cb func = (nim_super_team_reg_team_event_cb) GetProcAddress(hInst, "nim_super_team_reg_team_event_cb");
func(nullptr, &CallbackTeamEvent, nullptr);
}
- SDK 在收到群通知之后,会对本地缓存的群信息做出对应的修改,然后触发与修改相对应的委托事件回调。
- 群通知是接收型的消息,开发者不应该自己手动去创建和发送群通知消息。
自定义拓展
SDK 提供了群信息的拓展接口,开发者可以通过维护群信息的两个属性来自行定义内容。
- 应用方可以自行拓展这个字段做个性化配置,客户端不可以修改这个字段 kNIMSuperTeamInfoKeyServerCustom (nim_super_team_def.h)
- 应用方可以自行拓展这个字段做个性化配置,客户端可以修改这个字段 kNIMSuperTeamInfoKeyCustom (nim_super_team_def.h)
设置消息提醒
可以对超大群设置消息提醒类型,群消息提醒分为全部提醒、仅管理员消息提醒、全部不提醒等三种,默认为全部提醒。 PC SDK可以通过修改自己的群属性来设置消息提醒:
-
API 介绍
C++
static bool UpdateMyPropertyAsync(const SuperTeamMemberProperty& prop, const SuperTeamEventCallback& cb, const std::string& json_extension = "")
File:nim_cpp_super_team.h
Namespace:NIM
Class:SuperTeam
C
**void nim_super_team_update_my_property_async(const char *info, const char json_extension, nim_super_team_opt_cb_func cb, const void user_data)
File:nim_super_team.h
-
参数说明
C/C++
参数 | 类型 | 必须 | 说明 |
---|---|---|---|
prop(C++) | struct | 是 | 群组成员信息 |
cb | function | 是 | 回调函数 |
json_extension | std::string | 否 | 扩展参数 |
- 示例代码
C++
C++long long new_bits = 0;
if (全部提醒)
new_bits &= ~nim::kNIMSuperTeamBitsConfigMaskMuteNotify;
else if (不提醒)
new_bits |= nim::kNIMSuperTeamBitsConfigMaskMuteNotify;
else//只提醒管理员消息
new_bits |= nim::kNIMSuperTeamBitsConfigMaskOnlyAdmin;
nim::SuperTeamMemberProperty values(群id, 自己的account id, 自己的群成员类型);
values.SetBits(new_bits);
nim::SuperTeam::UpdateMyPropertyAsync(values, nbase::Bind(&TeamCallback::OnTeamEventCallback, std::placeholders::_1));
void TeamCallback::OnTeamEventCallback(const nim::SuperTeamEvent& result)
{
...
}
根据关键字检索超大群成员
NIM SDK 支持根据关键字检索超大群成员。
- 若传入超大群 ID 和关键字,则 SDK 将在指定群组中根据关键字搜索。
- 若不指定群组,直接传入关键字,SDK 则进行全局搜素。
调用 searchTeamMembers
方法根据关键字检索超大群成员。调用成功后会返回匹配到的超大群成员信息列表。
参数说明:
参数名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
+ option | NIMTeamMemberKeywordSearchOption | 是 | 检索配置项。 |
示例代码:
cpp
根据成员类型检索超大群成员
调用 getTeamMemberList
方法在指定群组中根据成员类型检索超大群成员。调用成功后会返回匹配到的超大群成员信息列表。
参数说明:
参数名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
teamId | String | 是 | 超大群 ID。 |
+ option | NIMTeamMemberRoleTypeSearchOption | 是 | 检索配置项。 |
示例代码:
cpp