群组功能(已废弃)

更新时间: 2023/07/21 06:56:02

本文已废弃,请前往群组概述群组功能文档查看相关说明。

群组功能概述

云信 SDK 提供高级群 (NIMTeamTypeEnum#Advanced) 形式的群聊功能。高级群拥有丰富的权限操作。

高级群拥有完善的成员权限体系及管理功能,群内所有用户根据权限分为群主、管理员、以及群成员。2.4.0 之前版本在添加成员的时候需要对方接受邀请;2.4.0 版本之后,可以设定被邀请模式(是否需要对方同意)。

Team 类型说明:

返回值 Team 类型 说明
String? announcement 获取群组公告
int createTime 获取群组的创建时间
String? creator 获取创建群组的用户帐号
String? extension 获取群组扩展配置。
String? extServer 获取服务器设置的扩展配置。
String? icon 获取群头像
String? id 获取群组 ID
String? introduce 获取群组简介
int memberCount 获取群组的总成员数
int memberLimit 获取群组的成员人数上限
NIMTeamMessageNotifyTypeEnum messageNotifyType 获取群消息免打扰模式 (windows 和 macOS 暂不支持)
NIMTeamAllMuteModeEnum getMuteMode() 获取群禁言模式
String? name 获取群组名称
TeamBeInvite
ModeEnum
getTeamBeInviteMode() 获取群被邀请模式:被邀请人的同意方式
TeamExtension
UpdateModeEnum
getTeamExtension
UpdateMode()
获取群资料扩展字段修改模式:谁可以修改群自定义属性(扩展字段)
NIMTeamInviteModeEnum 获取群邀请模式:谁可以邀请他人入群
NIMTeamUpdateModeEnum teamUpdateMode 获取群资料修改模式:谁可以修改群资料
NIMTeamTypeEnum type 获取群组类型
NIMVerifyTypeEnum verifyType 获取申请加入群组时的验证类型
bool? isAllMute 是否群全员禁言
NIMTeamAllMuteModeEnum muteMode 获取全员禁言模式
bool? isMyTeam 获取自己是否在这个群里 (windows 和 macOS 暂不支持)
String? extension 设置群组扩展配置。

兼容限制

Web 暂不支持群组相关功能。

创建群组

高级群拥有完善的成员权限体系及管理功能。

  • API 原型
dart  /// 创建一个群组
  /// [fields] ,[NIMTeamFieldEnum]	群组预设资料, key为数据字段,value对应的值,该值类型必须和field中定义的fieldType一致。
  /// [type] ,[NIMTeamTypeEnum]	要创建的群组类型
  /// [members]	邀请加入的成员帐号列表

  ///  可以设置回调函数,如果成功,参数为创建的群组资料
  Future<NIMResult<NIMCreateTeamResult>> createTeam(
      {required NIMCreateTeamOptions createTeamOptions,
      required List<String> members})
  • NIMCreateTeamOptions 参数说明
参数 类型 说明
teamType NIMTeamTypeEnum? 要创建的群组类型
avatarUrl String? 群头像
introduce String? 群简介
announcement String? 群公告
extension String? 群扩展字段
postscript String? 邀请入群的附言。如果是创建临时群,该参数无效
verifyType NIMVerifyTypeEnum? 申请加入群组的验证模式
inviteMode NIMTeamInviteModeEnum? 群邀请权限
beInviteMode NIMTeamBeInviteModeEnum? 被邀请模式, 只有高级群有效
updateInfoMode NIMTeamUpdateModeEnum? 群资料修改模式:谁可以修改群资料 ,只有高级群有效
extensionUpdateMode NIMTeamExtensionUpdateModeEnum? 群资料扩展字段修改模式:谁可以修改群自定义属性(扩展字段) , 只有高级群有效
参数 类型 说明
:------ :------------------- :---------------------
options NIMCreateTeamOptions 创建会议的参数
members List 邀请加入的成员帐号列表

创建群时,会使用到的NIMTeamFieldEnum枚举常量说明:

枚举 说明
announcement 群公告
beInviteMode 群被邀请模式:被邀请人的同意方式
extension 群扩展字段(客户端自定义信息)
icon 群头像
introduce 群简介
inviteMode 群邀请模式:谁可以邀请他人入群
maxMemberCount 指定创建群组的最大群成员数量 ,MaxMemberCount 不能超过应用级配置的最大人数
name 群名
NIMTeamExtensionUpdateMode 群资料扩展字段修改模式:谁可以修改群自定义属性(扩展字段)
teamUpdateMode 群资料修改模式:谁可以修改群资料
verifyType 申请加入群组的验证模式

NIMCreateTeamResult 说明:

参数 说明
team 创建成功后返回的 team 对象
failedInviteAccounts 被邀请成员中群组数量已达上限的成员列表
  • 示例
dart// 群组类型
NIMTeamTypeEnum type = NIMTeamTypeEnum.Advanced;
// 创建时可以预设群组的一些相关属性。
// fields 中,key 为数据字段,value 对对应的值,该值类型必须和 field 中定义的 fieldType 一致
 Map<String, dynamic>  options= jsonDecode(params![0]);
        final result = await NimCore.instance.teamService.createTeam(
            createTeamOptions: NIMCreateTeamOptions.fromMap(options),
            members: jsonDecode(params![1])['members']);

获取群组

从本地获取所有群组

获取我加入的所有群组

  • API 原型

异步版本:

dart /// 从本地获取所有群组
  /// 获取自己加入的群的列表
  /// 可以设置回调函数,如果成功,参数为自己加入的群的列表
  ///
  Future<NIMResult<List<NIMTeam>>> queryTeamList()
  • 示例

异步请求示例:

dart  final result = await NimCore.instance.teamService.queryTeamList();
        handleCaseResult = ResultBean(
            code: result.code, message: methodName, data: result.data);

注意:这里获取的是所有我加入的群列表(退群、被移除群后,将不在返回列表中)。

获取指定群组

如果本地没有群组资料,则去服务器查询。如果自己不在这个群中,该接口返回的可能是过期资料,如需最新的,请调用 searchTeam 接口去服务器查询。 此外 queryTeam 接口也有同步版本: queryTeamBlock 。

  • API 原型

异步版本:

dart  /// 查询群资料,如果本地没有群组资料,则去服务器查询。
  /// 如果自己不在这个群中,该接口返回的可能是过期资料,如需最新的,请调用{@link #searchTeam(String)}接口
  /// [teamId] 群ID
  Future<NIMResult<NIMTeam>> queryTeam(String teamId)

注意: 同步版本的查询群资料,仅查询本地,不会去服务器请求。

  • 示例

异步接口示例:

dart  final result = await NimCore.instance.teamService.queryTeamList();
        handleCaseResult = ResultBean(
            code: result.code, message: methodName, data: result.data);

群资料 SDK 本地存储说明:

  • 解散群、退群或者被移出群时,本地数据库会继续保留这个群资料,只是设置了无效标记,此时依然可以通过 queryTeam 查出来该群资料,只是 isMyTeam 返回 false 。 如果用户手动清空全部本地数据,下次登录同步时,服务器不会将无效的群资料同步过来,将无法取得已退出群的群资料。

  • 群解散后,通过 searchTeam 接口从服务器查询将返回 null 。

从云端获取指定群组

用户可以直接从服务器上获取群组信息:

单个获取接口

  • API 原型
dart  /// 查询群资料,如果本地没有群组资料,则去服务器查询。
  /// 如果自己不在这个群中,该接口返回的可能是过期资料,如需最新的,请调用{@link #searchTeam(String)}接口
  /// [teamId] 群ID
  Future<NIMResult<NIMTeam>> queryTeam(String teamId)
  • 示例
dart// teamId为想要查询的群组ID
    final result = await NimCore.instance.teamService
            .queryTeam(jsonDecode(params![0])['teamId']);


解散群组

仅群主有这个权限。

  • API 原型
dart/// 解散群,只有群主有此权限
  /// 可以设置回调函数,监听操作结果
  Future<NIMResult<void>> dismissTeam(String teamId)
  • 示例
dart  final result = await NimCore.instance.teamService
            .dismissTeam(jsonDecode(params![0])['teamId']);
        handleCaseResult = ResultBean(code: result.code, message: methodName, data: result);

群成员管理

入群操作

申请加入群组

  • API 原型
dart /// 用户申请加入群。
  /// teamId 申请加入的群ID
  ///postscript 申请附言
  /// 可以设置回调函数,如果成功,参数为群资料
  Future<NIMResult<NIMTeam>> applyJoinTeam(String teamId, String postscript)
  • 参数说明
参数 说明
teamId 申请加入的群 ID
postscript 申请附言
  • 示例
dart final result = await NimCore.instance.teamService.applyJoinTeam(
          jsonDecode(params![0])['teamId'],
          jsonDecode(params![1])['postscript'],
        );


  • 特殊错误码说明
错误码 说明
808 申请已发出
809 已经在群里

验证入群申请

用户发出申请后,所有管理员都会收到一条系统通知,类型为 SystemMessageType#TeamApply,具体参数解释请参考系统通知章节。

  • 同意入群申请

仅管理员和群主有此权限。如果同意入群申请,群内所有成员(包括申请者)都会收到一条群通知消息。

  • API 原型
dart  /// 通过用户的入群申请
  /// 仅管理员和群主有此权限
  Future<NIMResult<void>> passApply(String teamId, String account);
  • 参数说明
参数 说明
teamId 群 ID
account 申请入群的用户 ID
  • 示例
dart// teamId为申请加入的群组id, account为申请入群的用户id
  final result = await NimCore.instance.teamService.passApply(
          jsonDecode(params![0])['teamId'],
          jsonDecode(params![1])['account'],
        );

邀请加入群组

高级群在创建时可以设置群邀请模式,支持仅管理员或者所有人均可拉人入群。如果在被邀请成员中存在成员的群组数量已达上限,则会返回这部分失败成员的账号。

  • API 原型
dart/// 添加成员并设置自定义字段
  /// teamId	群组ID
  /// accounts	待加入的群成员帐号列表
  /// msg	邀请附言 ,不需要的话设置为空
  /// customInfo	自定义扩展字段,不需要的话设置为空 (Windows和macOS暂不支持)
  Future<NIMResult<List<String>>> addMembersEx(
      {required String teamId,
      required List<String> accounts,
      required String msg,
      required String customInfo});
  • 参数说明
参数 说明
teamId 群组 ID
accounts 待加入的群成员帐号列表
msg 邀请附言 ,不需要的话设置为空
customInfo 自定义扩展字段,不需要的话设置为空
  • 示例
dart  final result = await NimCore.instance.teamService.addMembersEx(
          teamId: jsonDecode(params![0])['teamId'],
          accounts: jsonDecode(params![1])['accounts'],
          msg: jsonDecode(params![2])['msg'],
          customInfo: jsonDecode(params![3])['customInfo'],
        );
        ResultBean handleCaseResult =
            ResultBean(code: result.code, message: methodName, data: result);

验证入群邀请

被邀请的人会收到一条系统通知 SystemMessage,类型为 SystemMessageType#TeamInvite。用户接受该邀请后,才真正入群。

收到入群邀请后,可以选择接受或拒绝。接受邀请后,用户真正入群。如果拒绝邀请,对方会收到一条系统通知,类型为 SystemMessageType#DeclineTeamInvite

  • 接受入群邀请

  • API 原型

dart/// 接受别人的入群邀请
  Future<NIMResult<void>> acceptInvite(String teamId, String inviter);
  • 参数说明
参数 说明
teamId 群 ID
inviter 邀请我的用户帐号
  • 示例
dart  final result = await NimCore.instance.teamService.acceptInvite(
          jsonDecode(params![0])['teamId'],
          jsonDecode(params![1])['inviter'],
        );
       ResultBean handleCaseResult =
            ResultBean(code: result.code, message: methodName, data: result);

查询群成员入群邀请人

  • API 原型
dart/// 获取群成员入群邀请人(为空表示主动入群,没有邀请人)
  /// teamId
  /// accids 查询用户accid列表,最多两百
  ///  返回用户的对应关系,key为accid value是inviteAccid
  Future<NIMResult<Map<String, String>>> getMemberInvitor(
      String teamId, List<String> accids) ;
  • 示例
dart// accids表示查询的成员列表
   final result = await NimCore.instance.teamService.getMemberInvitor(
          jsonDecode(params![0])['teamId'],
          jsonDecode(params![1])['accids'],
        );
        ResultBean handleCaseResult =
            ResultBean(code: result.code, message: methodName, data: result);

踢人出群

高级群群主和管理员可以踢人,且管理员不能踢群主和其他管理员。踢人后,群内所有成员(包括被踢者)会收到一条消息类型为 notification 的 IMMessage,类型为 NIMNotificationType#KickMember, 附件类型为 NIMMemberChangeAttachment

  • API 原型
dart final result = await NimCore.instance.teamService.removeMembers(
          jsonDecode(params![0])['teamId'],
          jsonDecode(params![1])['accids'],
        );


  • 参数说明
参数 说明
teamId 群 ID
members 被踢出的成员帐号列表
  • 示例
dart// teamId表示群ID,account表示被踢出的成员帐号
  final result = await NimCore.instance.teamService.removeMembers(
          jsonDecode(params![0])['teamId'],
          jsonDecode(params![1])['accids'],
        );
  ResultBean handleCaseResult =
            ResultBean(code: result.code, message: methodName, data: result);

主动退群

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

  • API 原型
dart/// 退出群
  /// teamId 群ID
  Future<NIMResult<void>> quitTeam(String teamId);
  • 示例
dart  final result = await NimCore.instance.teamService.quitTeam(
          jsonDecode(params![0])['teamId'],
        );
  ResultBean handleCaseResult =
            ResultBean(code: result.code, message: methodName, data: result);

获取群组成员

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

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

NIMTeamMember 说明:

返回值 TeamMember 属性 说明
String? account 群成员帐号
Map<String, dynamic>? extension 获取扩展字段
String? getInvitorAccid() 获取入群邀请人,为空表示主动加入群
int joinTime 获取群成员入群时间
String? teamNick 获取该用户在这个群内的群昵称
String? id 获取所在群 ID
NIMTeamMemberType type 群成员类型
bool? isInTeam 该用户是否在这个群中
bool? isMute 是否被禁言

获取群组成员列表

  • 获取群组所有成员
dart  /// 获取指定群的成员信息列表. <br>
  /// 该操作有可能只是从本地数据库读取缓存数据,也有可能会从服务器同步新的数据, 因此耗时可能会比较长。
  /// teamId 群ID
  /// 可以设置回调函数,如果成功,参数为群的成员信息列表
  Future<NIMResult<List<NIMTeamMember>>> queryMemberList(String teamId);
  • 示例
dart final result = await NimCore.instance.teamService.queryMemberList(
          jsonDecode(params![0])['teamId'],
        );
 ResultBean handleCaseResult = ResultBean(code: result.code, message: methodName, data: result);

获取指定群组成员

  • 根据群 ID 和成员帐号获取群成员

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

  • API 原型

异步版本:

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

异步版本示例:

dart final result = await NimCore.instance.teamService.queryTeamMember(
          jsonDecode(params![0])['teamId'],
          jsonDecode(params![1])['account'],
        );
 ResultBean handleCaseResult =
            ResultBean(code: result.code, message: methodName, data: result);
        ;

修改群成员资料

修改其他群成员资料

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

  • API 原型
dart /// 群组管理员修改群内其他成员的群昵称。
  /// 仅群管理员和群主有此权限
  /// [teamId]  所在群组ID
  /// [account] 要修改的群成员帐号
  /// [nick]    新的群昵称
  Future<NIMResult<void>> updateMemberNick(
      String teamId, String account, String nick);
  • 示例
dart  final result = await NimCore.instance.teamService.updateMemberNick(
          jsonDecode(params![0])['teamId'],
          jsonDecode(params![1])['account'],
          jsonDecode(params![2])['nick'],
        );

修改自身扩展字段

  • API 原型
dart  ///修改自己的群成员扩展字段(自定义属性)
  /// teamId    所在群组ID
  /// extension 新的扩展字段(自定义属性)
  Future<NIMResult<void>> updateMyMemberExtension(
      String teamId, Map<String, Object> extension);
  • 示例
dart  final result = await NimCore.instance.teamService.updateMyMemberExtension(
          jsonDecode(params![0])['teamId'],
          jsonDecode(params![1])['extension'],
        );

群主转让

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

  • API 原型
dart  /// 群主将群的群主权限转给另外一个人,转移后,另外一个人成为群主。
  /// 原群主变成普通成员。若参数quit为true,原群主直接退出该群。
  /// Future 可以设置回调函数,如果成功,视参数quit值:
  /// quit为false:参数仅包含原群主和当前群主的(即操作者和account),权限已被更新。
  /// quit为true: 参数为空。
  Future<NIMResult<List<NIMTeamMember>>> transferTeam(
      String teamId, String account, bool quit);
  • 参数说明
参数 说明
teamId 群 ID
account 新任群主的用户帐号
quit 转移时是否要同时退出该群
  • 示例
dart// false表示群主转让后不退群
 final result = await NimCore.instance.teamService.transferTeam(
          jsonDecode(params![0])['teamId'],
          jsonDecode(params![1])['account'],
          jsonDecode(params![2])['quit'],
        );
 ResultBean handleCaseResult =
            ResultBean(code: result.code, message: methodName, data: result);
        ;

添加管理员

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

  • API 原型
dart/// 群主添加管理员
  /// 仅群主有此权限
  /// teamId   群ID
  /// accounts 待提升为管理员的用户帐号列表
  /// Future 可以设置回调函数,如果成功,参数为新增的群管理员列表
  Future<NIMResult<List<NIMTeamMember>>> addManagers(
      String teamId, List<String> accounts);
  • 参数说明
参数 说明
teamId 群 ID
accounts 待提升为管理员的用户帐号列表
Future 可以设置回调函数,如果成功,参数为被提升的群成员列表
(权限已被升为 Manager)。
  • 示例
dart// teamId 操作的群id, accountList为待提升为管理员的用户帐号列表
   final result = await NimCore.instance.teamService.addManagers(
          jsonDecode(params![0])['teamId'],
          jsonDecode(params![1])['accounts'],
        );

移除管理员

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

  • API 原型
dart  /// 群主撤销管理员权限
  /// 仅群主有此权限
  /// teamId   群ID
  /// managers 待撤销的管理员的帐号列表
  /// 可以设置回调函数,如果成功,参数为被撤销的群成员列表(权限已被降为Normal)。
  Future<NIMResult<List<NIMTeamMember>>> removeManagers(
      String teamId, List<String> managers);
  • 参数说明
参数 说明
teamId 群 ID
managers 待撤销的管理员的帐号列表
Future 可以设置回调函数,如果成功,参数为被撤销的群成员列表
(权限已被降为 Normal)。
  • 示例
dart  final result = await NimCore.instance.teamService.removeManagers(
          jsonDecode(params![0])['teamId'],
          jsonDecode(params![1])['managers'],
        );

禁言

禁言指定成员

  • API 原型
dartfinal result = await NimCore.instance.teamService.muteTeamMember(
          jsonDecode(params![0])['teamId'],
          jsonDecode(params![1])['manager'],
          jsonDecode(params![2])['mute'],
        );
  • 参数说明
参数 说明
teamId 群组 ID
account 被禁言、被解除禁言的账号
mute true 表示禁言,false 表示解除禁言
  • 示例
dart// 以禁言为例
final result = await NimCore.instance.teamService.muteTeamMember(
          jsonDecode(params![0])['teamId'],
          jsonDecode(params![1])['manager'],
          jsonDecode(params![2])['mute'],
        );

群整体禁言

将整个群禁言,该操作仅群主或者管理员有权限。禁言操作成功之后,会回调群更新接口。

  • API 原型
dart
  /// 对整个群禁言、解除禁言,对普通成员生效,只有群组、管理员有权限
  /// teamId 群组 ID
  /// mute   true表示禁言,false表示解除禁言
  Future<NIMResult<void>> muteAllTeamMember(String teamId, bool mute);
  • 参数说明
参数 说明
teamId 群组 ID
mute true 表示禁言,false 表示解除禁言
  • 示例
dartfinal result = await NimCore.instance.teamService.muteAllTeamMember(
          jsonDecode(params![0])['teamId'],
          jsonDecode(params![1])['mute'],
        );

查询被禁言情况

  • 该接口只返回被 禁言指定成员 muteTeamMember 方法禁言的群成员列表。
dart /// 查询被禁言群成员列表
  /// 该操作,只返回调用TeamService#muteTeamMember(String, String, boolean) 禁言的用户。
  /// teamId    群ID
  /// 群成员信息列表
  Future<NIMResult<List<NIMTeamMember>>> queryMutedTeamMembers(String teamId);
  • 示例
dart// members表示被禁言的成员列表
 final result = await NimCore.instance.teamService.queryMutedTeamMembers(
          jsonDecode(params![0])['teamId'],
        );
  • 查询群整体禁言情况

可以通过 NIMTeam#muteModeNIMTeam#isAllMute 获取对应的情况。

  • 查询某用户是否被 禁言指定成员 方法禁言过

可以通过 NIMTeamMember - isMute获取。

注意:当被整体禁言后,但未被 禁言指定成员 muteTeamMember 方法禁言过,则 NIMTeamMember - isMute 仍为 false。

群资料管理

编辑群组资料

可修改的属性详见下方 NIMTeamUpdateFieldRequest

NIMTeamUpdateFieldRequest 接口 数据类型 说明
setAnnouncement String? 设置群公告
setBeInviteMode NIMTeamBeInviteModeEnum 设置被邀请方入群模式:是否需要被邀请人同意
setExtension String? 设置群扩展字段(客户端自定义信息)
setIcon String? 群扩展字段(仅服务端能够修改)
setIntroduce String? 设置群简介
setInviteMode NIMTeamInviteModeEnum 设置邀请模式:谁可以邀请他人入群
setMaxMemberCount int 设置群最大人数
setName String? 设置群名称
setTeamExtensionUpdateMode NIMTeamExtensionUpdateModeEnum 设置群资料扩展字段修改模式:谁可以修改群自定义属性(扩展字段)
setTeamUpdateMode NIMTeamUpdateModeEnum 设置群资料修改模式:谁可以修改群资料
setVerifyType NIMVerifyTypeEnum 设置申请加入群组的验证模式
  • 群组头像若要上传到云信服务器上,则需要使用头像资源处理

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

编辑多个资料

  • API 原型
dart /// 批量更新群组资料,可一次性更新多个字段的值。
  Future<NIMResult<void>> updateTeamFields(
      String teamId, NIMTeamUpdateFieldRequest request);
  • 参数说明
参数 说明
teamId 群 ID
request 待更新的所有字段的新的资料
  • 示例
dart// 以名字,介绍,公告为例
 NIMTeamUpdateFieldRequest request = NIMTeamUpdateFieldRequest();
 request.setName('更新群名');
 request.setIntroduce('更新群简介');
 request.setAnnouncement('更新群公告');
 final result = await NimCore.instance.teamService.updateTeamFields(
          teamId,
          request,
        );

监听群组变化

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

监听群组更新

  • API 原型
dart  /// 群资料变动观察者通知。新建群和群更新的通知都通过该接口传递
  /// observer 观察者, 参数为有更新的群资料列表
  Stream<List<NIMTeam>> get onTeamListUpdate =>
      TeamServicePlatform.instance.onTeamListUpdate.stream;
  • 示例
dart  final result = await NimCore.instance.teamService.onTeamListUpdate.listen((event) {
          print('=======onTeamListUpdate event : $event');
        });

监听群组移除

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

  • API 原型
dart /// 移除群的观察者通知。自己退群,群被解散,自己被踢出群时,会收到该通知
 /// observer 观察者, 参数为被移除的群资料,此时群的isMyTeam接口返回false
  • 示例
dart   final result = await NimCore.instance.teamService.onTeamListRemove.listen((event) {
          print('=======onTeamListRemove event : $event');
        });

群组通知消息

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

目前支持触发群通知消息的事件有:

NIMNotificationType 枚举 附件类 事件说明
acceptInvite NIMMemberChangeAttachment 接受邀请后入群(需要被邀请人同意的模式)
inviteMember NIMMemberChangeAttachment 邀请成员入群(无需被邀请人同意的模式)
addTeamManager NIMMemberChangeAttachment 添加管理员
kickMember NIMMemberChangeAttachment 被踢出群
transferOwner NIMMemberChangeAttachment 转让群主
passTeamApply NIMMemberChangeAttachment 申请加入群成功
removeTeamManager NIMMemberChangeAttachment 移除管理员
dismissTeam NIMDismissAttachment 解散群
leaveTeam NIMLeaveTeamAttachment 退出群
muteTeamMember NIMMuteMemberAttachment 群内禁言/解禁
updateTeam NIMUpdateTeamAttachment 群信息资料更新

群组通知解析步骤:

  • 通过 IMMessage.msgType 获取 消息类型,若为 NIMMsgTypeEnum.notification ,则为通知消息。
  • 将 IMMessage.attachment 获取的附件对象强类型转换为 NIMNotificationAttachment。
  • 通过 NIMNotificationAttachment.getType() 获取具体的 NIMNotificationType 。
  • 根据对应的 NIMNotificationType 将 IMMessage.attachment 得到的附件对象强转为对应的 附件类(见上方表格)。

值得注意的是:

  • 针对 NIMMemberChangeAttachment,通过 targets 可以获取该事件的承受者。如 B 被踢出群,则通过 targets 可以获取到 B 的账号。
  • 针对 NIMMuteMemberAttachment,其为 NIMMemberChangeAttachment 的子类,可通过 targets 可以获取该事件的承受者,可通过 isMute 判断是禁言还是被解禁。
  • 针对 NIMUpdateTeamAttachment,需要解析到具体是哪个群信息被更新。群整体禁言属于此类型。可参见 Demo 示例代码:
dart    NimCore.instance.messageService.onMessage.listen((event) {
      print('Test_Observer onMessage ${event.toString()}');
      for (NIMMessage m in event) {
        if(message.messageType = NIMMessageType.notification){
         if (type >= NIMTeamNotificationTypes.inviteMember &&
            type <= NIMTeamNotificationTypes.muteTeamMember) {
               ///TODO  参考支持触发群通知消息的事件
          }
        }
      }
    });

群消息免打扰

可以对某个群设置消息通知提醒模式,群消息通知提醒分为:

  • 全部提醒(默认)
  • 仅群主/管理员消息提醒
  • 全部不提醒

以上通知提醒指的是云信体系内的推送与消息提醒

设置免打扰

  • API 原型
dart/// 设置指定群消息通知类型,支持多端同步
/// notifyType   通知类型枚举
Future<NIMResult<void>> muteTeam(
    String teamId, NIMTeamMessageNotifyTypeEnum notifyType) {
  return _platform.muteTeam(teamId, notifyType);
}
  • 参数说明
参数 说明
teamId 群组 ID
NIMTeamMessageNotifyTypeEnum 消息提醒类型枚举,分别为全部提醒、仅管理员消息提醒、全部不提醒
  • 示例
dartvar result = await NimCore.instance.teamService.muteTeam(
    teamId,
    NIMTeamMessageNotifyTypeEnum.mute);

查询免打扰状态

可通过从本地获取到的 TeamgetMessageNotifyType 接口获取对应群的消息通知提醒模式。

群组检索

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

  • API 原型
dart  /// 通过群名称反查群组ID(Windows和macOS暂不支持)
  /// name 群组名称
  /// 群ID列表
  Future<NIMResult<List<String>>> searchTeamIdByName(String name) ;
  • 示例
dart final result = await NimCore.instance.teamService.searchTeamIdByName(
          jsonDecode(params![0])['name'],
        );

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

dart /// 用户在客户端本地可以搜索与关键字匹配的所有群:
  /// 通过群名称反查群组ID
  /// name 群组名称
  /// 群ID列表
  Future<NIMResult<List<NIMTeam>>> searchTeamsByKeyword(String keyword) ;
  • 示例
dartfinal result = await NimCore.instance.teamService.searchTeamsByKeyword(
          jsonDecode(params![0])['name'],
        );
此文档是否对你有帮助?
有帮助
去反馈
  • 群组功能概述
  • 兼容限制
  • 创建群组
  • 获取群组
  • 从本地获取所有群组
  • 获取指定群组
  • 从云端获取指定群组
  • 单个获取接口
  • 解散群组
  • 群成员管理
  • 入群操作
  • 申请加入群组
  • 验证入群申请
  • 邀请加入群组
  • 验证入群邀请
  • 查询群成员入群邀请人
  • 踢人出群
  • 主动退群
  • 获取群组成员
  • 获取群组成员列表
  • 获取指定群组成员
  • 修改群成员资料
  • 修改其他群成员资料
  • 修改自身扩展字段
  • 群主转让
  • 添加管理员
  • 移除管理员
  • 禁言
  • 禁言指定成员
  • 群整体禁言
  • 查询被禁言情况
  • 群资料管理
  • 编辑群组资料
  • 编辑多个资料
  • 监听群组变化
  • 监听群组更新
  • 监听群组移除
  • 群组通知消息
  • 群消息免打扰
  • 设置免打扰
  • 查询免打扰状态
  • 群组检索