超大群管理
更新时间: 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#getMuteMode
和 Team#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