跳到主要内容

版本:5.X

超级群场景实践

超级群概述

融云超级群专为超大规模社区打造,支持百万级成员同时在线、亿级消息并发,是构建大型社区应用的理想会话方案。本文基于融云 IMLib 即时通讯能力,围绕超级群社区场景,系统梳理应用接入过程中的常见业务需求,并提供对应的解决方案与实现指引。

概念说明
超级群无人数上限的群组,类似 Discord 的"服务器"
频道(Channel)同一超级群内可划分多个频道,通过 channelId 区分不同话题讨论区

与普通群、聊天室的区别

特性普通群聊天室超级群
成员上限3000 人无限制无限制
离线消息连接后拉取全部离线消息加入后拉取一定数量历史消息同步会话与最后一条消息,用户进入会话后主动拉取
远程推送离线时每条消息主动推送无推送离线时固定频率推送(可配置)
@消息群内成员全量接收无 @支持 @指定成员、@全员
消息可靠性100%高并发时有抛弃策略100%
频道不支持不支持支持多频道(公有/私有)

技术优势

  • 消息可靠性:海量消息高并发场景下,100% 到达,不丢不重不乱序。
  • 成员无上限:单个超级群/频道无人数限制,可承载百万级社区成员。
  • 消息状态服务端维护:未读数等状态全部由服务端维护,减轻客户端开发压力。
  • 高并发不卡顿:用户无论离线或在线,都能正常接收推送或消息。

应用场景

超级群专为 Discord、Telegram 等实时社群运营模式设计,适用于技术开发社区、兴趣社群、私域流量、粉丝管理、出海运营等业务。

以技术开发社区举例

场景示例:

超级群:前端开发者社区(另有服务端开发者社区等超级群,用户可按需加入)
├── 📢 公有频道:公告通知(官方发布重要信息)
├── 💬 公有频道:新人报到(新成员自我介绍)
├── 🔧 公有频道:技术交流(日常技术讨论)
├── 📚 公有频道:资源分享(学习资料、工具推荐)
├── 🎯 公有频道:求职招聘(工作机会分享)
├── 💧 公有频道:闲聊水吧(轻松聊天)
└── 👑 私有频道:VIP 专区(付费会员专属内容)

功能应用:

  • 频道分类:按话题划分不同频道,避免信息混杂
  • @ 提及:管理员使用 @全员 发布重要通知
  • 私有频道:VIP 会员付费后加入私有频道,享受独家内容和深度交流
  • 禁言管理:对发广告、违规内容的用户进行禁言处理
  • 消息撤回:管理员删除不当言论,维护社区氛围
  • 免打扰:用户可屏蔽“闲聊水吧”等高频频道,只关注核心内容

准备工作

在开始之前,请确保已创建应用并完成客户端 SDK 集成

  1. 需先按控制台内嵌指南嵌入到管理后台的 IM 服务功能配置页面(page_code: im_service_config)中,进入超级群开通(仅 IM 尊享版支持开通超级群服务)。
  2. 超级群的会话类型为 ULTRA_GROUP,与普通群 GROUP 不同。
  3. 超级群会话没有离线消息,如果想获取用户离线时候的消息需要您根据超级群会话最后一条消息去获取远端的历史消息。

群管理

创建超级群

使用场景: 类似 Discord 中创建一个"服务器"(Server),作为整个社区的容器。例如创建"前端开发者社区""游戏公会""粉丝后援会"等。

功能目的: 超级群是整个社区的基础架构,所有成员、频道、消息都基于超级群进行组织。一个超级群可以容纳百万级用户,支持在其下创建多个频道进行话题分类。

超级群仅支持通过服务端 API 创建超级群创建,客户端不支持直接创建。创建时需指定创建者用户 ID、超级群 ID 和超级群名称。超级群 ID 须由 App 服务器自行生成并维护。

Java
public Result createUltraGroup() throws Exception {
RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret, CenterEnum.BJ);
UltraGroup ultraGroup = rongCloud.ultraGroup;

UltraGroupModel ultraGroupModel = new UltraGroupModel()
.setId("ultragroup001")
.setUserId("user001")
.setName("ultragroupName");

Result result = ultraGroup.create(ultraGroupModel);
System.out.println("ultragroup create result: " + result);
return result;
}

解散超级群

使用场景: 当社区不再运营、项目结束或需要彻底关闭社群时(类似 Discord 删除服务器)。

功能目的: 彻底清理超级群相关数据,包括所有频道、成员关系。解散后,原成员无法再接收该群的任何消息。

超级群解散需通过服务端 API 解散超级群完成。解散后,所有用户无法再接收该群消息,群成员关系不复存在。

Java
public Result dismissUltraGroup() throws Exception {
RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret, CenterEnum.BJ);
UltraGroup ultraGroup = rongCloud.ultraGroup;

String groupId = "ultragroup001";

Result result = ultraGroup.dis(groupId);
System.out.println("ultragroup dismiss result: " + result);
return result;
}

加入超级群

使用场景: 用户点击邀请链接、搜索发现社区后加入(类似 Discord 点击邀请链接加入服务器),或由管理员批量导入成员。

功能目的: 将用户添加为超级群成员,加入后可以看到所有公有频道的消息,参与社区讨论。适用于开放式社区招募、内部团队成员管理、粉丝群运营等场景。

将用户加入指定超级群需通过服务端 API 加入超级群完成。加入后,用户将可以收到该群的消息。

Java
public Result joinUltraGroup() throws Exception {
RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret, CenterEnum.BJ);
UltraGroup ultraGroup = rongCloud.ultraGroup;

UltraGroupModel ultraGroupModel = new UltraGroupModel()
.setId("ultragroup001")
.setUserId("user001");

Result result = ultraGroup.join(ultraGroupModel);
System.out.println("ultragroup join result: " + result);
return result;
}

退出超级群

使用场景: 用户主动退出社区,或管理员踢出违规用户(类似 Discord 的离开服务器或被封禁)。

功能目的: 将用户从超级群中移除,退出后不再接收该群的任何消息和通知,无法访问任何频道内容。适用于用户主动离开、管理员清理不活跃成员、封禁违规用户等场景。

将用户从指定超级群中移除需通过服务端 API 退出超级群完成。退出后,用户不再接收该群组的消息。

Java
public Result quitUltraGroup() throws Exception {
RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret, CenterEnum.BJ);
UltraGroup ultraGroup = rongCloud.ultraGroup;

UltraGroupModel ultraGroupModel = new UltraGroupModel()
.setId("ultragroup001")
.setUserId("user001");

Result result = ultraGroup.quit(ultraGroupModel);
System.out.println("ultragroup quit result: " + result);
return result;
}

频道管理

概述

频道是超级群内的话题分区,通过 channelId(客户端)或 busChannel(服务端)区分。超级群支持创建多个频道,按话题、场景划分不同的讨论区。

提示

2022.10.13 日后开通的超级群服务,创建时会自动创建一个 RCDefault 默认频道。

频道类型:

类型说明适用场景
公有频道所有超级群成员自动接收该频道下的消息公告、通用话题讨论
私有频道仅频道成员可收发消息,无频道人数限制VIP 频道、管理员频道、付费内容区
默认频道ID 为 RCDefault,超级群创建时自动创建,不可转为私有频道新人引导、欢迎频道

频道特性:

  • 单个超级群可创建多个频道,具体数量限制请参考超级群频道文档
  • 频道类型支持动态切换(公有 ↔ 私有)。

创建频道

使用场景: 在社区内按话题创建不同的讨论区,例如"技术交流""求职招聘""闲聊水吧"等(类似 Discord 的 #general、#tech-talk 等文字频道)。

功能目的: 将不同主题的讨论分隔开来,避免信息混杂。用户可以只关注感兴趣的频道,减少信息过载。支持创建公有频道(所有成员可见)和私有频道(仅特定成员可见)。 频道创建需通过服务端 API 创建频道完成。创建时需指定超级群 ID、频道 ID、频道名称和频道类型。

Java
public Result createUltraGroupChannel() throws Exception {
RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret, CenterEnum.BJ);
UltraGroup ultraGroup = rongCloud.ultraGroup;

UltraGroupModel ultraGroupModel = new UltraGroupModel()
.setId("ultragroup001")
.setBusChannel("channel001");

Result result = ultraGroup.busChannel.add(ultraGroupModel);
System.out.println("ultragroup channel create result: " + result);
return result;
}

说明:

  • 创建后,公有频道消息会自动推送给所有超级群成员。
  • 私有频道需单独添加成员才能收发消息。

删除频道

使用场景: 话题讨论结束、活动结束后清理临时频道,或合并重复频道优化社区结构(类似 Discord 删除不再需要的频道)。

功能目的: 清理不再使用的频道,保持社区结构清晰。删除后该频道的所有消息和成员关系被清理,用户无法再在该频道发送或查看消息。

频道删除需通过服务端 API 删除频道完成。删除后,该频道下的消息、成员关系将被清理。

Java
public Result deleteUltraGroupChannel() throws Exception {
RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret, CenterEnum.BJ);
UltraGroup ultraGroup = rongCloud.ultraGroup;

UltraGroupModel ultraGroupModel = new UltraGroupModel()
.setId("ultragroup001")
.setBusChannel("channel001");

Result result = ultraGroup.busChannel.remove(ultraGroupModel);
System.out.println("ultragroup channel delete result: " + result);
return result;
}

说明:

  • 删除操作不可逆,请谨慎操作。
  • 删除后无法在该频道中发送消息。

变更频道类型

使用场景: 将原本开放的公告频道转为管理员专属,或将 VIP 专属频道开放给所有成员(类似 Discord 锁定/解锁频道,或调整频道权限)。

功能目的: 灵活控制频道的访问权限。公有频道所有成员都能看到消息,私有频道仅特定成员可见。通过切换频道类型,可以实现权益升级、内容分级、临时限制访问等业务场景。

支持将公有频道切换为私有频道,或将私有频道切换为公有频道,需通过服务端 API 变更频道类型完成。

Java
public Result changeUltraGroupChannelType() throws Exception {
RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret, CenterEnum.BJ);
UltraGroup ultraGroup = rongCloud.ultraGroup;

UltraGroupModel ultraGroupModel = new UltraGroupModel()
.setId("ultragroup001")
.setBusChannel("channel001")
.setType(1);

Result result = ultraGroup.busChannel.change(ultraGroupModel);
System.out.println("ultragroup channel type change result: " + result);
return result;
}

说明:

  • 公有→私有:非频道成员将无法收到该频道消息。
  • 私有→公有:所有超级群成员自动接收消息,但私有频道成员列表不会被删除。

添加私有频道成员

使用场景: 将付费会员加入 VIP 专属频道,将管理员加入管理频道,或为特定用户开通专属内容访问权限(类似 Discord 为角色分配频道查看权限)。

功能目的: 精细化控制私有频道的成员列表,实现分层运营。只有被添加的成员才能看到并参与私有频道的讨论,适用于付费内容、内部管理、小范围讨论等场景。

私有频道成员添加需通过服务端 API 添加私有频道成员完成。

Java
public Result addPrivateChannelMembers() throws Exception {
RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret, CenterEnum.BJ);
UltraGroup ultraGroup = rongCloud.ultraGroup;

UltraGroupMember[] members = {
new UltraGroupMember().setId("user001"),
new UltraGroupMember().setId("user002")
};

UltraGroupModel ultraGroupModel = new UltraGroupModel()
.setId("ultragroup001")
.setBusChannel("channel001")
.setMembers(members);

Result result = ultraGroup.busChannel.privateUserAdd(ultraGroupModel);
System.out.println("ultragroup private channel member add result: " + result);
return result;
}

说明:

  • 支持批量添加,添加后成员立即获得该频道的收发权限。

移除私有频道成员

使用场景: 会员到期后移出 VIP 频道,撤销管理员权限时移出管理频道,或清理不活跃的私有频道成员(类似 Discord 移除成员的频道访问权限)。

功能目的: 动态管理私有频道的成员访问权限。移除后,成员将无法再看到该频道的消息和参与讨论,适用于权益到期、权限变更、违规处理等场景。

私有频道成员移除需通过服务端 API 删除私有频道成员完成。

Java
public Result removePrivateChannelMembers() throws Exception {
RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret, CenterEnum.BJ);
UltraGroup ultraGroup = rongCloud.ultraGroup;

UltraGroupMember[] members = {
new UltraGroupMember().setId("user001"),
new UltraGroupMember().setId("user002")
};

UltraGroupModel ultraGroupModel = new UltraGroupModel()
.setId("ultragroup001")
.setBusChannel("channel001")
.setMembers(members);

Result result = ultraGroup.busChannel.privateUserRemove(ultraGroupModel);
System.out.println("ultragroup private channel member remove result: " + result);
return result;
}

说明:

  • 移除后成员将不再接收该频道消息。

消息相关

发送超级群消息

使用场景: 用户在频道内发送文字、图片、表情、文件等内容进行交流(类似 Discord 在频道内发消息)。

功能目的: 实现社区成员之间的实时沟通。支持多种消息类型(文本、图片、语音、视频、文件),支持 @ 提及特定成员,支持自定义离线推送内容。消息发送到指定频道,只有该频道的成员能看到。

客户端发送超级群消息时,需设置 conversationType = ULTRA_GROUP,并指定 targetId(超级群 ID)+ channelId(频道 ID)。

发送普通消息:

Java

String targetId = "ultragroup001"; // 超级群 ID
ConversationType conversationType = Conversation.ConversationType.ULTRA_GROUP;
String channelId = "channel_tech"; // 频道 ID

TextMessage messageContent = TextMessage.obtain("这是一条超级群消息");
Message message = Message.obtain(targetId, conversationType, channelId, messageContent);

RongCoreClient.getInstance().sendMessage(message, null, null, new IRongCoreCallback.ISendMessageCallback() {
@Override
public void onAttached(Message message) {
// 消息已存入本地数据库
}

@Override
public void onSuccess(Message message) {
// 消息发送成功
}

@Override
public void onError(Message message, IRongCoreEnum.CoreErrorCode errorCode) {
// 消息发送失败
}
});

说明:

  • 支持发送文本、图片、语音、视频、文件等多种消息类型。
  • 客户端 SDK 发送消息存在频率限制,每秒最多只能发送 5 条消息。
  • 服务端也可通过 API 代发超级群消息(系统通知、运营消息等)。

接收超级群消息

使用场景: 用户打开 App 查看频道消息,滚动查看历史聊天记录(类似 Discord 进入频道查看消息历史)。

功能目的: 让用户能够接收和查看频道内的实时消息及历史记录。超级群消息存储在云端,支持按需拉取历史消息,避免本地存储压力。用户可以随时回溯查看之前的讨论内容。

客户端通过监听消息接收回调获取超级群消息,接收方式与单群聊消息一致。

设置消息接收监听:

Java

// 接收消息示例:设置接收消息监听器,接收消息时会自动回调
RongCoreClient.addOnReceiveMessageListener(
new io.rong.imlib.listener.OnReceiveMessageWrapperListener() {
@Override
public boolean onReceivedMessage(Message message, ReceivedProfile profile) {
// 接收到消息
if (message.getConversationType() == Conversation.ConversationType.ULTRA_GROUP) {
String targetId = message.getTargetId(); // 超级群 ID
String channelId = message.getChannelId(); // 频道 ID
MessageContent content = message.getContent();
// 处理超级群消息
}
}
});

拉取历史消息

超级群消息默认存储在云端,用户进入会话后需主动拉取远端历史消息。

Java
Conversation.ConversationType conversationType= Conversation.ConversationType.ULTRA_GROUP;//会话类型
String targetId="会话 Id";
String channelId="频道 Id";
HistoryMessageOption historyMessageOption=new HistoryMessageOption();
historyMessageOption.setDataTime(1662542712112L);//2022-09-07 17:25:12:112
historyMessageOption.setOrder(HistoryMessageOption.PullOrder.DESCEND);
historyMessageOption.setCount(20);

ChannelClient.getInstance().getMessages(conversationType, targetId, channelId, historyMessageOption, new IRongCoreCallback.IGetMessageCallbackEx() {
@Override
public void onComplete(List<Message> messageList, long syncTimestamp, boolean hasMoreMsg, IRongCoreEnum.CoreErrorCode errorCode) {

}

@Override
public void onFail(IRongCoreEnum.CoreErrorCode errorCode) {

}
});

说明:

  • 超级群没有离线消息推送机制(除非配置了离线推送)。
  • 用户上线后根据会话最后一条消息拉取增量消息。

超级群消息变更同步

使用场景: 用户 A 修改了消息内容、撤回了消息、或给消息添加了表情回复,其他在线用户 B、C 需要实时看到这些变化(类似 Discord 中看到消息被编辑、被删除、或表情数量更新)。

功能目的: 保持所有用户看到的消息状态一致。当消息发生修改、撤回、扩展更新等变更时,融云服务端会自动推送变更通知给所有相关用户,客户端监听变更事件并刷新 UI,确保用户看到的都是最新状态。适用于消息编辑、消息撤回、表情回复、投票结果更新、订单状态变更等场景。

您可以通过设置消息变更监听器,来监听远端用户对消息的修改操作。

Java
//设置超级群消息变化监听
ChannelClient.getInstance().setUltraGroupMessageChangeListener(new IRongCoreListener.UltraGroupMessageChangeListener() {
@Override
public void onUltraGroupMessageModified(List<Message> messages) {
//消息内容发生变更
for (Message message : messages) {
if (message.isHasChanged()) {
// 刷新 UI
}
}
}

@Override
public void onUltraGroupMessageExpansionUpdated(List<Message> messages) {
//消息扩展更新,删除
}

@Override
public void onUltraGroupMessageRecalled(List<Message> messages) {
// 消息被撤回
}
});

修改超级群消息

使用场景: 用户发现消息内容有错别字或需要更新信息时编辑消息(类似 Discord 和 Telegram 的消息编辑功能,显示"已编辑"标记)。

功能目的: 允许用户修正错误或更新消息内容,而不是撤回重发。修改后所有成员会看到最新内容,保持消息的连贯性。适用于纠正错误、补充信息、更新公告等场景。

超级群消息发出后支持二次或多次修改,修改后群成员自动收到变更通知。

修改消息内容:

Java
String msgUid = "消息 UID"; // 待修改消息的 UID
TextMessage newContent = TextMessage.obtain("修改后的消息内容");

ChannelClient.getInstance().modifyUltraGroupMessage(msgUid, newContent,
new IRongCoreCallback.OperationCallback() {
@Override
public void onSuccess() {
// 修改成功
}

@Override
public void onError(IRongCoreEnum.CoreErrorCode errorCode) {
// 修改失败
}
}
);

说明:

  • 修改消息后,融云会自动完成群成员消息变更通知,监听消息修改通知,参考超级群消息变更同步。
  • 消息类型无法修改,如改前为文本消息,新消息内容必须为 TextMessage 类型。
  • 无法修改他人发送的消息。
  • 支持正常消息修改,同时支持被引用的消息修改。

撤回超级群消息

使用场景: 用户发错消息或发送不当内容后及时撤回,管理员删除违规、垃圾消息维护社区秩序(类似 Discord 和 Telegram 的消息删除功能)。

功能目的: 提供消息的"后悔药"机制。普通用户可以撤回自己的消息,管理员可以撤回任何人的消息来管理社区内容。撤回后可选择显示"消息已撤回"提示或完全删除记录。

支持消息发送者撤回自己发送的消息,或管理员撤回他人发送的消息。

撤回指定消息:

Java
Message message = ...; // 要撤回的消息对象
boolean isDelete = true; // 是否删除原始消息记录

ChannelClient.getInstance().recallUltraGroupMessage(message, isDelete,
new IRongCoreCallback.ResultCallback<RecallNotificationMessage>() {
@Override
public void onSuccess(RecallNotificationMessage recallNotificationMessage) {
// 撤回成功
}

@Override
public void onError(IRongCoreEnum.CoreErrorCode errorCode) {
// 撤回失败
}
}
);

说明:

  • 撤回消息后,融云会自动完成群成员消息变更通知,监听消息撤回通知,参考超级群消息变更同步。
  • 只有已发送成功的消息可被撤回。
  • isDeletetrue 时,移动端会删除原始消息记录,不显示撤回提示。
  • isDeletefalse 时,会将消息内容替换为撤回提示(小灰条通知)。

消息扩展

使用场景: 用户对消息添加表情回复(👍❤️😂),显示消息被点赞数,红包被领取状态,投票结果等动态信息(类似 Discord 的 Reactions 和 Slack 的表情回应)。

功能目的: 在不修改原消息内容的情况下,为消息附加动态的元数据。通过 KV 结构存储扩展信息,实现表情回复、互动统计、业务状态更新等功能。扩展信息变更会自动通知所有成员,实现实时更新。

融云开放消息扩展字段(KV 结构),可用于实现表情回复、红包消息、礼物领取、订单变化等场景。详情参考消息扩展,iOS / Web / 其他端请查看对应平台文档中的「消息扩展」章节)

说明:

  • 设置消息扩展后,融云会自动完成群成员消息变更通知。监听消息扩展通知,参考超级群消息变更同步。
  • 客户端通过监听消息扩展变更回调刷新 UI。

参考文档

文档说明
超级群 Server API服务端创建、管理超级群
超级群频道管理频道创建、切换、权限
超级群用户组用户组创建、绑定频道
超级群消息管理Android 客户端消息发送、撤回、修改,iOS / Web / 其他端请查看对应平台文档中的「超级群消息收发」章节
IMLib SDK 超级群接口Android 客户端 SDK 接口参考,iOS / Web / 其他端请查看对应平台文档中的「超级群」章节
普通群场景实践与普通群场景对比参考