Flutter

超大群管理

更新时间: 2024/03/07 11:11:47

超大群概述

超大群是针对大规模群聊场景的功能。目前支持不超过10000人的群聊。由于超大群场景较为特殊,并不能支持所有高级群提供的管理功能。

Web 暂不支持超大群功能。

目前超大群支持群主、管理员与普通成员三种身份。

SuperTeam 函数:

属性 类型 说明
announcement String 获取群组公告
createTime long 获取群组的创建时间
creator String 获取创建群组的用户帐号
extension String 获取群组扩展配置。
extServer String 获取服务器设置的扩展配置。
icon String 获取群头像
id String 获取群组ID
introduce String 获取群组简介
memberCount int 获取群组的总成员数
memberLimit int 获取群组的成员人数上限
muteMode NIMTeamAllMuteModeEnum 获取群禁言模式
name String 获取群组名称
teamBeInviteMode NIMTeamBeInviteModeEnum 获取群被邀请模式:被邀请人的同意方式
teamExtensionUpdateMode NIMTeamExtensionUpdateModeEnum 获取群资料扩展字段修改模式:谁可以修改群自定义属性(扩展字段)
teamInviteMode NIMTeamInviteModeEnum 获取群邀请模式:谁可以邀请他人入群
teamUpdateMode NIMTeamUpdateModeEnum 获取群资料修改模式:谁可以修改群资料
type TeamTypeEnum 获取群组类型
verifyType NIMVerifyTypeEnum 获取申请加入群组时的验证类型
isAllMute boolean 是否群全员禁言
muteMode NIMTeamAllMuteModeEnum 获取全员禁言模式
isMyTeam boolean 获取自己是否在这个群里
messageNotifyType NIMTeamMessageNotifyTypeEnum 获取当前账号在此群收到消息之后提醒的类型

消息收发

消息收发概述

超大群聊消息收发和单聊群聊基本相同,仅在 NIMSessionTypeEnum 上做了区分,同时消息发送服务变成了SuperTeamService

消息撤回

SuperTeamService 支持超大群消息的撤回:

dart /// 消息撤回,并允许触发推送。
 /// [message] 待撤回的消息
 /// [customApnsText] 推送文案 不填则不推送
 /// [pushPayload]  推送payload, 限制json,长度2048
Future<NIMResult<void>> revokeMessage(NIMMessage message,String customApnsText,Map<String,dynamic> pushPayload) async

创建群组

超大群需要通过服务端API创建,客户端暂时不提供接口创建。

获取群组

从本地获取所有群组

SDK 提供了获取自己加入的所有群的列表的接口

  • API 原型
dart /// 获取自己加入的群的列表
 /// 返回参数为自己加入的群的列表
Future<NIMResult<List<NIMSuperTeam>>> queryTeamList() async
  • 示例

异步请求示例:

dartawait NimCore.instance.superTeamService.queryTeamList();

从本地获取指定群组

  • API 原型
dart ///查询群资料,如果本地没有群组资料,则去服务器查询。
 /// 如果自己不在这个群中,该接口返回的可能是过期资料,如需最新的,请调用searchTeam(String teamId)接口
 ///  [param] teamId 群id
Future<NIMResult<NIMSuperTeam>> queryTeam(String teamId) async

批量获取指定群组

dart ///  根据群id列表批量查询群信息
 ///  [param] tidList 群id列表
Future<NIMResult<List<NIMSuperTeam>>> queryTeamListById(List<String> idList) async

从云端获取指定群组

dart///
 ///  从服务器上查询群资料信息
 ///  @param teamId 群id
Future<NIMResult<NIMSuperTeam>> searchTeam(String teamId) async

解散群组

超大群需要通过服务端API解散,客户端暂时不提供接口解散。

群成员管理

入群操作

申请加入群组

申请加入一个群,直接加入或者进入等待验证状态时,返回群信息

  • API原型
dart /// 用户申请加入群。
 /// [tid] 申请加入的群ID
 /// [postscript] 附言,长度不得超过5000
Future<NIMResult<NIMSuperTeam>> applyJoinTeam(
      String teamId, String postscript) async 
  • 参数说明
参数 参数 说明
tid String 群组ID
postcript String 附言,长度不能超过5000
  • 示例
dartawait NimCore.instance.superTeamService.searchTeam(teamId);
  • 特殊错误码说明
错误码 说明
808 申请已发出
809 已经在群里

验证入群申请

用户发出申请后,所有管理员都会收到一条系统通知,类型为 SystemMessageType#SuperTeamApply,具体参数解释请参考系统通知章节。管理员可选择同意或拒绝。

  • 同意入群申请

仅管理员和拥有者有此权限。如果同意入群申请,群内所有成员(包括申请者)都会收到一条消息类型为 notification 的通知消息,附件类型为 NIMMemberChangeAttachment。具体参数说明见消息收发章节。

  • API 原型
dart /// 通过用户的入群申请<br>
 /// 仅管理员和拥有者有此权限
 /// [teamId]  群ID
 /// [account] 申请入群的用户ID
Future<NIMResult<void>> passApply(String teamId, String account) async
  • 拒绝入群申请

仅管理员和拥有者有此权限。如果拒绝入群申请,申请者会收到一条系统通知,类型为 SystemMessageType#rejectTeamApply。具体参数说明见系统通知章节。

  • API 原型
dart /// 拒绝用户的入群申请 <br>
 /// 仅管理员和拥有者有此权限
 /// [teamId]  群ID
 /// [account] 申请入群的用户ID
 /// [reason]  拒绝理由,长度不得超过5000
Future<NIMResult<void>> rejectApply(String teamId, String account,String reason) async
  • 参数说明
参数 类型 说明
teamId String 群ID
account String 申请入群的用户ID
reason String 拒绝理由,选填,长度不能超过5000

说明:任意一管理员操作后,其他管理员再操作都会失败。

邀请加入群组

所有人都可以拉人入群,如果在被邀请成员中存在成员的群组数量已达上限,则会返回这部分失败成员的账号。

  • API 原型
dart /// 邀请成员
 /// [teamId]   群组ID
 /// [accounts] 待加入的群成员帐号列表
 /// [postscript] 附言,长度不得超过5000
Future<NIMResult<List<String>>> addMembers(String teamId,
      List<String> accountList, String msg) async
  • 参数说明
参数 类型 说明
teamId String 群组ID
accounts List 待加入的群成员帐号列表
postcript String 附言,长度不能超过5000

用户入群后,在收到之后的第一条消息时,群内所有成员(包括入群者)会收到一条入群消息,附件类型为 NIMMemberChangeAttachment。若通知类型为NotificationType#SUPER_TEAM_INVITE,可以通过 NIMMemberChangeAttachment#extension` 获取服务器设置的扩展字段。

验证入群邀请

收到入群邀请后,用户可在系统通知中看到该邀请,并选择接受或拒绝。接受邀请后,用户真正入群。如果拒绝邀请,邀请该用户的管理员会收到一条系统通知,类型为 SystemMessageType#superTeamApplyReject

  • 接受入群邀请
dart /// 接受别人的入群邀请
 /// [teamId]  群ID
 /// [inviter] 邀请我的用户帐号
Future<NIMResult<void>> acceptInvite(String teamId, String inviter) async
  • 参数说明
参数 类型 说明
teamId String 群ID
inviter String 邀请我的用户帐号
  • 拒绝入群邀请
dart /// 拒绝别人的入群邀请通知
 /// teamId  群ID
 /// inviter 邀请我的用户帐号
 /// reason  拒绝理由,长度不得超过5000
Future<NIMResult<void>> declineInvite(String teamId, String inviter,String reaseon) async

  • 参数说明
参数 类型 说明
teamId String 群ID
inviter String 邀请我的用户帐号
reason String 拒绝理由,选填,长度不能超过5000

踢人出群

仅拥有者可以踢人,群内所有成员(包括被踢者)会收到一条消息类型为 notification 的 IMMessage,类型为 NotificationType#SUPER_TEAM_KICK, 附件类型为 NIMMemberChangeAttachment。可以通过 NIMMemberChangeAttachment#extension 获取服务器设置的扩展字段。

  • API 原型
dart /// 批量移出群成员,只有群主有权限
 /// teamId  群ID
 /// members 被踢出的成员帐号列表
 Future<NIMResult<void>> removeMembers(
      String teamId, List<String> members) async
  • 参数说明
参数 类型 说明
teamId String 群ID
member List 被踢出的成员帐号

主动退群

除群主(需先转让群主)外,其他用户均可以直接主动退群。退群后,群内所有成员(包括退出者)会收到一条消息类型为 notification 的 NIMMessage,类型为 NotificationType#SUPER_TEAM_LEAVE,附件类型为 NIMMemberChangeAttachment

  • API 原型
dart /// 退出群
 /// [teamId] 群ID
Future<NIMResult<void>> quitTeam(String teamId) async

获取群组成员

获取群组成员列表

由于群组成员数据比较大,且除了进入群组成员列表界面外,其他地方均不需要群组成员列表的数据,因此 SDK 不会在登录时同步群组成员数据,而是按照按需获取的原则,当上层主动调用获取指定群的群组成员列表时,才判断是否需要同步。

群成员资料 SDK 本地存储说明: 当自己退群、或者被移出群时,本地数据库会继续保留这个群成员资料,只是设置了无效标记,此时依然可以通过 queryTeamMember 查出来该群成员资料,只是 isMyTeam 将返回 false 。

  • API 原型
dart /// 获取指定群的成员信息列表. <br>
 /// 该操作有可能只是从本地数据库读取缓存数据,也有可能会从服务器同步新的数据, 因此耗时可能会比较长。
 /// [teamId] 群ID
 Future<NIMResult<List<NIMSuperTeamMember>>> queryMemberList(String teamId) async

获取指定群组成员

如果本地群成员资料已过期, SDK 会去服务器获取最新的。

  • API 原型

异步版本:

dart ///查询群成员资料。如果本地群成员资料已过期会去服务器获取最新的。
 /// [teamId]  群ID
 /// [account] 群成员帐号
Future<NIMResult<NIMSuperTeamMember>> queryTeamMember(
      String teamId, String account) async 

分页获取群组成员

dart /// 分页获取指定群的成员信息列表. <br>
 /// 该操作有可能只是从本地数据库读取缓存数据,也有可能会从服务器同步新的数据, 因此耗时可能会比较长。
 /// [teamId] 群ID
 /// [offset] 偏移位置
 /// [limit]  获取条数,每次最多200
 /// Windows & macoS暂不支持
Future<NIMResult<List<NIMSuperTeamMember>>> queryMemberListByPage(
      String teamId, int offset,int limit) async

修改群成员资料

修改其他成员资料

仅群主和管理员拥有权限修改群内其他成员的群昵称,。

群主可以修改所有人的群昵称。管理员只能修改普通成员的群昵称。

  • API 原型
dart /// 群组管理员修改群内其他成员的群昵称。<br>
 /// 仅群管理员和拥有者有此权限
 /// [teamId]  所在群组ID
 /// [account] 要修改的群成员帐号
 /// [nick]    新的群昵称
Future<NIMResult<void>> updateMemberNick(
      String teamId, String account, String nick) async

修改自己资料

修改自己的群昵称:

  • API 原型
dart /// 修改自己的群昵称
 /// [teamId] 所在群组ID
 /// [nick]   新的群昵称
Future<NIMResult<void>> updateMyTeamNick(
      String teamId, String nick) async

修改自己的群成员扩展字段:

  • API 原型
dart /// 修改自己的群成员扩展字段(自定义属性, 最长32个字符)
 /// teamId    所在群组ID
 /// extension 新的扩展字段(自定义属性)
Future<NIMResult<void>> updateMyMemberExtension(
      String teamId, Map<String, Object> extension) async

监听群成员变化

由于获取群成员资料需要跨进程异步调用,开发者最好能在第三方 APP 中做好群成员资料缓存,查询群成员资料时都从本地缓存中访问。在群成员资料有变化时,SDK 会告诉注册的观察者,此时,第三方 APP 可更新缓存,并刷新界面。

监听群成员资料变化

  • API 原型
dart /// 群成员资料变化观察者通知。
 /// 上层APP如果管理了群成员资料的缓存,可通过此接口更新缓存。
Stream<List<NIMSuperTeamMember>> get onMemberUpdate

监听移除群成员的变化

  • API 原型
dart /// 移除群成员的观察者通知。
Stream<List<NIMSuperTeamMember>> onMemberRemove

群主转让

超大群拥有者可以将群的拥有者权限转给群内的其他成员,转移后,被转让者变为新的拥有者,原拥有者变为普通成员。原拥有者还可以选择在转让的同时,直接退出该群。

  • API 原型
dart /// 拥有者将群的拥有者权限转给另外一个人,转移后,另外一个人成为拥有者。<br>
 /// 原拥有者变成普通成员。若参数quit为true,原拥有者直接退出该群。
 /// [tid]     群ID
 /// [account] 新任拥有者的用户帐号
 /// [quit]    转移时是否要同时退出该群
Future<NIMResult<List<NIMSuperTeamMember>>> transferTeam(
      String teamId, String account, bool quit) async
  • 参数说明
参数 类型 说明
tid String 群ID
account String 新任拥有者的用户帐号
quit bool 转移时是否要同时退出该群

增加管理员

超大群中,群主可以增加管理员。操作完成后,群内所有成员都会收到一条消息类型为 notification 的 IMMessage,附件类型为 MemberChangeAttachment

  • API 原型
dart /// 拥有者添加管理员 <br>
 /// 仅拥有者有此权限
 /// [teamId]   群ID
 /// [accounts] 待提升为管理员的用户帐号列表
Future<NIMResult<List<NIMSuperTeamMember>>> addManagers(
      String teamId, List<String> accountList) async
  • 参数说明
参数 类型 说明
teamId String 群ID
accounts List 待提升为管理员的用户帐号列表

移除管理员

超大群中,群主可以移除管理员。操作完成后,群内所有成员都会收到一条消息类型为 notification 的 IMMessage,附件类型为 MemberChangeAttachment

  • API 原型
dart /// 拥有者撤销管理员权限 <br>
 /// 仅拥有者有此权限
 /// [teamId]   群ID
 /// [managers] 待撤销的管理员的帐号列表
Future<NIMResult<List<NIMSuperTeamMember>>> removeManagers(
      String teamId, List<String> accountList) async
  • 参数说明
参数 类型 说明
teamId String 群ID
managers List 待撤销的管理员的帐号列表

禁言

禁言指定成员

支持管理员和群主对普通成员的禁言、解除禁言操作。

  • API 原型
dart /// 禁言、解除禁言
 /// [teamId]      群组ID
 /// [accountList] 被禁言、被解除禁言的账号列表
 /// [mute]        true表示禁言,false表示解除禁言
Future<NIMResult<void>> muteTeamMember(
      String teamId, List<String> accountList, bool mute) async
  • 参数说明
参数 类型 说明
teamId String 群组ID
accountList List 被禁言、被解除禁言的账号列表
mute bool true表示禁言,false表示解除禁言

禁言群全体成员

将整个群禁言,该操作仅群主或者管理员有权限。禁言操作成功之后,会回调群更新接口,影响方法 Team#getMuteMode 和 Team#isAllMute

  • API 原型
dart /// 对整个群禁言、解除禁言,对普通成员生效,只有群组、管理员有权限
 /// teamId 群组 ID
 /// mute   true表示禁言,false表示解除禁言
Future<NIMResult<void>> muteAllTeamMember(String teamId, bool mute) async
  • 参数说明
参数 类型 说明
teamId String 群组ID
mute bool true表示禁言,false表示解除禁言

查询被禁言群成员

该操作只返回被禁言的用户,群整体禁言情况请通过 Team#getMuteModeTeam#isAllMute 查询。

  • API 原型
dart /// 查询被禁言群成员列表
 /// 该操作,只返回调用{@link SuperTeamService#muteTeamMembers(String, ArrayList, boolean)} 禁言的用户。
 /// teamId 群ID
Future<NIMResult<List<NIMSuperTeamMember>>> queryMutedTeamMembers(
      String teamId) async

群资料管理

编辑群资料

可修改的属性查看 NIMTeamFieldEnum ,注意: 其中的 serverExtension 群服务器扩展字段,仅限服务端修改。

修改后,群内所有成员会收到一条消息类型为 notification 的 NIMMessage,带有一个消息附件,类型为 SUPER_TEAM_UPDATE_T_INFO。如果注册了群组资料变化观察者,观察者也会收到通知,见监听群组变化。

监听群组变化

由于获取群组资料需要跨进程异步调用,开发者最好能在第三方 APP 中做好群组资料缓存,查询群组资料时都从本地缓存中访问。在群组资料有变化时,SDK 会告诉注册的观察者,此时,第三方 APP 可更新缓存,并刷新界面。

监听群资料变化

  • API 原型
dart /// 群资料变动观察者通知。新建群和群更新的通知都通过该接口传递
Stream<List<NIMSuperTeam>> get onSuperTeamUpdate

监听移除群的变化

移除成功后,NIMSuperTeam#isMyTeam 返回 false。

  • API 原型
dart///  移除群的观察者通知。自己退群,群被解散,自己被踢出群时,会收到该通知
Stream<NIMSuperTeam> get onSuperTeamRemove

群组通知

群组通知的消息类型是 NIMMessageType.notification ,用户入群成功之后,任何关于群的变动(含自己入群的动作),云信服务器都会下发一条群通知消息。

群消息免打扰

可以对某个群设置消息通知提醒类型,群消息提醒分为全部提醒和全部不提醒两种,默认为全部提醒,不支持设置仅管理员消息提醒。

  • API 原型
dart /// 设置指定群消息通知类型
 /// teamId     群组ID
 /// notifyType 通知类型枚举
Future<NIMResult<void>> muteTeam(
      String teamId, NIMTeamMessageNotifyTypeEnum notifyType) async 
  • 参数说明
参数 类型 说明
teamId String 群组ID
notifyType TeamMessageNotifyTypeEnum 通知类型枚举,只有全部提醒和全部不提醒为有效参数

群组检索

用户可以查询到具有指定群名称的群ID的列表

  • API原型
dart/// 通过群名称反查群组ID
/// name 群组名称
/// Windows & macoS暂不支持
Future<NIMResult<List<String>>> searchTeamIdByName(String name) async

用户在客户端本地可以搜索与关键字匹配的所有群:

dart /// 通过群名称反查群组ID
 /// [s] 群组名称
Future<NIMResult<List<NIMSuperTeam>>> searchTeamsByKeyword(String keyword) async
此文档是否对你有帮助?
有帮助
去反馈
  • 超大群概述
  • 消息收发
  • 消息收发概述
  • 消息撤回
  • 创建群组
  • 获取群组
  • 从本地获取所有群组
  • 从本地获取指定群组
  • 批量获取指定群组
  • 从云端获取指定群组
  • 解散群组
  • 群成员管理
  • 入群操作
  • 申请加入群组
  • 验证入群申请
  • 邀请加入群组
  • 验证入群邀请
  • 踢人出群
  • 主动退群
  • 获取群组成员
  • 获取群组成员列表
  • 获取指定群组成员
  • 分页获取群组成员
  • 修改群成员资料
  • 修改其他成员资料
  • 修改自己资料
  • 监听群成员变化
  • 监听群成员资料变化
  • 监听移除群成员的变化
  • 群主转让
  • 增加管理员
  • 移除管理员
  • 禁言
  • 禁言指定成员
  • 禁言群全体成员
  • 查询被禁言群成员
  • 群资料管理
  • 编辑群资料
  • 监听群组变化
  • 监听群资料变化
  • 监听移除群的变化
  • 群组通知
  • 群消息免打扰
  • 群组检索