Windows/macOS

超大群管理

更新时间: 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
此文档是否对你有帮助?
有帮助
去反馈
  • 超大群功能概述
  • 群聊消息
  • 获取群组
  • 加入群组
  • 踢人出群
  • 主动退群
  • 编辑群组资料
  • 群组成员
  • 群组通知
  • 自定义拓展
  • 设置消息提醒
  • 根据关键字检索超大群成员
  • 根据成员类型检索超大群成员