群组功能(已废弃)
更新时间: 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#muteMode
和 NIMTeam#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);
查询免打扰状态
可通过从本地获取到的 Team
的 getMessageNotifyType
接口获取对应群的消息通知提醒模式。
群组检索
用户可以查询到具有指定群名称的群 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'],
);