IM 即时通讯
Windows/macOS
产品介绍
简介
主要功能
产品优势
海外数据中心
IM平滑迁移方案
接口及业务限制
功能介绍
帐号集成与登录
基础消息功能
群组功能
聊天室功能
聊天室标签功能
圈组功能
多端登录与互踢策略
质量数据监控台
更新日志
Demo 更新日志
NIM SDK 更新日志
快速开始
实现单聊消息收发(不含 UI)
实现圈组消息收发(不含 UI)
开发指南
概要介绍
集成方式(当前版本)
集成方式(Windows旧版本)
集成方式(macOS旧版本)
初始化
登录登出
消息收发
最近会话
历史记录
用户资料托管
好友关系托管
事件订阅
系统通知
系统通知概述
内置系统通知管理
内置系统通知未读数
自定义系统通知收发
群组功能
群组概述
群组管理
群成员管理
群消息管理
超大群功能
开通聊天室功能
聊天室
圈组功能
初始化
登录圈组
圈组服务器管理
圈组服务器成员管理
游客功能
频道相关
频道管理
频道分组
频道分组黑白名单
频道未读数管理
搜索服务器和频道
身份组相关
身份组概述
身份组应用场景
服务器身份组
频道身份组
频道分组身份组
频道用户定制权限
自定义权限项
成员权限判定
身份组相关查询
圈组订阅机制
圈组消息相关
圈组消息收发
圈组消息撤回
圈组消息更新
圈组消息删除
会话消息回复(Thread)
圈组快捷评论
获取频道最后一条消息
消息正在输入
圈组消息搜索
圈组消息查询
查询@我的消息
服务器未读数
圈组系统通知
圈组系统通知概述
圈组系统通知收发
圈组系统通知更新
圈组各端接口命名差异
语音录制与播放
NOS云存储服务
文档转换
反垃圾(内容审核)
API 参考
Windows/macOS API 参考
状态码
IM 控制台指南
创建应用
注册 IM 账号
升级服务
配置应用客户端标识
参考文档
升级指引
开发示例
UI库指南
Demo源码导读
打包发布
类与常量定义说明
常见问题
FAQ
服务协议

超大群功能

更新时间: 2022/07/11 09:22:05

超大群功能概述

超大群是针对大规模群聊场景的功能。目前支持不超过10000人的群聊。由于超大群场景较为特殊,并不能支持所有高级群提供的管理功能。目前超大群仅支持群主与普通成员两种身份。开通超大群功能请联系商务。

群聊消息

群聊消息收发和管理与双人聊天完全相同,仅在消息类型(kNIMMsgKeyToType)上做了区分。

获取群组

SDK 在程序启动时会对本地群信息进行同步,所以只需要调用本地缓存接口获取群就可以了。SDK 提供了批量获取自己的群接口、以及根据单个群 ID 查询的接口。同样SDK 也提供了远程获取群信息的接口。

  • 本地获取群组id列表
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);
  • 本地获取群组列表(群信息)
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版本后可以通过该接口获取本地缓存的无效群组(不在群或群已经解散)信息:

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字段区分自己是否还在该群。

  • 从服务器上获取群组信息
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++

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

void 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++

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

void 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++

void TeamEventCb(const nim::SuperTeamEvent& team_event)
{
	···
}

void foo()
{
	nim::SuperTeam::LeaveAsync("12345", &TeamEventCb);
}

C

void 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);
}

编辑群组资料

超大群拥有者可修改群名及其他群资料。

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++

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

void 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);
}

群组成员

  • 获取群成员列表,获取到的群成员只有网易云信服务器托管的群相关数据,需要开发者结合自己管理的用户数据进行界面显示。
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++

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

void 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);
}

开发者可以通过调用该接口获取本地缓存中无效的群成员(已经不在群内)信息:

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 可以通过注册全局回调函数接受群组通知。

void nim_super_team_reg_team_event_cb(const char *json_extension, nim_super_team_event_cb_func cb, const void *user_data);

例:

C++

void OnTeamEventCallback(const nim::SuperTeamEvent& result)
{
	···
}

foo()
{
	nim::SuperTeam::RegSuperTeamEventCb(&OnTeamEventCallback);
}

C

void 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++

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)
{
	...
}
此文档是否对你有帮助?
有帮助
我要吐槽
  • 超大群功能概述
  • 群聊消息
  • 获取群组
  • 加入群组
  • 踢人出群
  • 主动退群
  • 编辑群组资料
  • 群组成员
  • 群组通知
  • 自定义拓展
  • 设置消息提醒