即时通信 IM Flutter(群成员管理)

群成员管理指的是对成员进行列表拉取、禁言、踢人、授权、转让群主等操作。相关方法在核心类 TencentImSDKPlugin.v2TIMManager.getGroupManager() 中。

相关产品
即时通信 IM 产品页,含版本规格、价格与购买入口。

一、获取群成员列表

你可以调用 getGroupMemberList(点击查看详情)获取指定群的群成员列表。

调用成功后,返回列表中的 V2TimGroupMemberFullInfo 包含了各个群成员的资料信息,例如用户 ID(userID)、群名片(nameCard)、头像(faceUrl)、昵称(nickName)、进群时间(joinTime)、在线状态(isOnline)等信息。

注意:说明:

注意:在线状态(isOnline)信息需要开通旗舰版支持。

直播群由于人数众多,不提供拉取全量成员列表的功能。旗舰版客户可拉取最近进群的 1000 位群成员。群成员列表后台数据更新间隔是 40s。

此功能需要在 IM 控制台开启开关,登录 即时通信 IM 控制台 修改相关配置,配置页面如下:

二、过滤器(filter)

在调用 getGroupMemberList(点击查看详情)接口时,你可以指定 filter 确定是否仅拉取特定角色的信息列表。

过滤器 过滤类型
GroupMemberFilterTypeEnum.V2TIM_GROUP_MEMBER_FILTER_ALL 拉取所有群成员的信息列表
GroupMemberFilterTypeEnum.V2TIM_GROUP_MEMBER_FILTER_OWNER 仅拉取群主的信息列表
GroupMemberFilterTypeEnum.V2TIM_GROUP_MEMBER_FILTER_ADMIN 仅拉取群管理员的信息列表
GroupMemberFilterTypeEnum.V2TIM_GROUP_MEMBER_FILTER_COMMON 仅拉取普通群成员的信息列表

三、分页拉取(nextSeq)

很多情况下,用户界面上并不需要展示全部的群成员信息,只需展示群成员列表的第一页即可。等用户单击“下一页”或在列表页上拉刷新时,才需要拉取更多的群成员。针对此类场景,你可以使用分页拉取。

分页拉取的步骤为:

1. 首次调用 getGroupMemberList 时,指定参数 nextSeq 为 0(表示从头开始拉取群成员列表),一次最多拉取 500 个群成员对象。

2. 首次拉取群成员列表成功后,getGroupMemberList 的回调结果 V2TIMGroupMemberInfoResult 中会包含 nextSeq(下次分页拉取的字段):

·如果 nextSeq 等于 0,表示已经拉取了全部的群成员。

·如果 nextSeq 大于 0,表示还有更多的群成员可以拉取。此时并不意味着要立刻开始拉取 “下一页” 的成员列表。在常见的通信软件中,分页拉取通常由用户的滑动操作触发,用户通过上拉触发一次分页拉取。

3. 当用户继续上拉群成员列表时,如果还有更多的群成员可以拉取,可以继续调用 getGroupMemberList 接口,并传入新一轮的 nextSeq 参数(nextSeq 数值来自上一次拉取返回的 V2TIMGroupMemberInfoResult 对象)。

4. 重复执行【步骤 3】直至 nextSeq 等于 0,拉取结束。

示例代码如下:

{ … String nextSeq = '0'; await getGroupMemberList(nextSeq); …}Future<void> getGroupMemberList(String nextSeq) async { // 通过 filter 参数指定只拉取群主的资料 final result = await TencentImSDKPlugin.v2TIMManager.getGroupManager().getGroupMemberList( filter: GroupMemberFilterTypeEnum.V2TIM_GROUP_MEMBER_FILTER_ADMIN, nextSeq: currentNextSeq, groupID: 'your_group_id' ); if (result.data?.nextSeq != '0') { // 继续分页拉取 await getGroupMemberList(result.data?.nextSeq); }}

四、禁言指定群成员

群主或管理员可以调用 muteGroupMember(点击查看详情) ,设置 muteTime(单位为秒)禁言某一个群成员。例如设置 muteTime 为 120,表示禁言该成员持续 120 秒。

某群成员被禁言后,发送消息会失败,并接收到相应的错误码。如果想取消该成员的禁言,可以将 muteTime 设置为 0。

禁言时间戳存储于群成员信息的 muteUntil(点击查看详情)字段中。注意 muteUntil 的含义是禁言该成员直到某个时刻为止。

群成员被禁言后,全员(包括被禁言的群成员)都会收到 onMemberInfoChanged(点击查看详情)事件回调。

注意:说明:

注意:群主可以禁言/取消禁言管理员和普通群成员。管理员可以禁言/取消禁言普通群成员。

五、禁言整个群

群主或管理员也可以通过 muteAllGroupMembers(点击查看详情)接口对整个群进行禁言,将 isMute 字段设置为 true 即可,解除禁言则将其设置为 false。全群禁言没有时间限制。

全员禁言后触发 onAllGroupMembersMuted(点击查看详情)事件回调。

该通知默认是关闭的,如需开启此通知,你可以登录 即时通信 IM 控制台 修改相关配置,配置页面路径为:控制台 > 功能配置 > 群组配置 > 群系统通知配置 > 群资料变更通知 > 群禁言变更通知。

注意:说明:

注意:只有群主能将管理员禁言。

示例代码如下:

// 禁言群成员 userB 1分钟final result = await TencentImSDKPlugin.v2TIMManager.getGroupManager().muteGroupMember( groupID: 'your_group_id', userID: 'userB', seconds: 60);// 全员禁言final result = await TencentImSDKPlugin.v2TIMManager.getGroupManager().muteAllGroupMembers( groupID: 'your_group_id', isMute: true);TencentImSDKPlugin.v2TIMManager.addGroupListener(listener: V2TimGroupListener( onMemberInfoChanged: (String groupID, List<V2TimGroupMemberChangeInfo> v2TIMGroupMemberChangeInfoList) { // 禁言群成员监听 for (var memberChangeInfo in v2TIMGroupMemberChangeInfoList) { // 被禁言用户 ID String userID = memberChangeInfo.userID ?? ''; // 禁言时间 int muteTime = memberChangeInfo.muteTime ?? 0; } }, onAllGroupMembersMuted: (String groupID, bool isMute) { // 全员禁言监听 }));

六、踢人

群主或管理员调用 kickGroupMember(点击查看详情)接口可以将指定的普通群成员踢出群组。

普通群成员被踢后,全员(包括被踢人)会收到 onMemberKicked(点击查看详情)回调。

由于直播群(AVChatRoom)对进群没有限制,因此直播群(AVChatRoom)没有支持踢人的接口,你可以使用 muteGroupMember (点击查看详情)禁言指定成员达到类似的成员管控的目的。

注意:说明:

注意:只有群主能将管理员踢出群组。

示例代码如下:

final result = await TencentImSDKPlugin.v2TIMManager.getGroupManager().kickGroupMember( groupID: 'your_group_id', memberList: ['target_user_id']);

七、设置管理员

群主调用 setGroupMemberRole(点击查看详情)可以对陌生人社交群(Public)或临时会议群(Meeting)中的群成员进行管理员授权。

普通成员被授权后,拥有跟管理员同样的权限,例如支持以下操作:

·修改群组基本资料

·将普通群成员踢出群

·将普通群成员禁言(即禁止其在一段时间内发言)

·审批其他用户的入群申请

更多详情可参考 群成员角色介绍。

普通成员被授权为管理员后,全员(包括被设置的成员)会收到 onGrantAdministrator(点击查看详情)回调。

普通成员被取消管理员授权后,全员(包括被设置的成员)会收到 onRevokeAdministrator(点击查看详情)回调。

示例代码如下:

final result = await TencentImSDKPlugin.v2TIMManager.getGroupManager().setGroupMemberRole( groupID: 'your_group_id', userID: 'target_user_id', role: GroupMemberRoleTypeEnum.V2TIM_GROUP_MEMBER_ROLE_ADMIN);// 监听角色更改TencentImSDKPlugin.v2TIMManager.addGroupListener(listener: V2TimGroupListener( onGrantAdministrator: (String groupID, V2TimGroupMemberInfo info, List<V2TimGroupMemberInfo> infolist){}, onRevokeAdministrator: (String groupID, V2TimGroupMemberInfo info, List<V2TimGroupMemberInfo> infolist){},));

八、转让群主

群主可以调用 transferGroupOwner 把群主转让给其他群成员。

群主转让后,全员会收到 onGroupInfoChanged 回调,其中 V2TIMGroupChangeInfo 的 type 为 V2TIMGroupChangeInfo.V2TIM_GROUP_INFO_CHANGE_TYPE_OWNER,value 值为新群主的 UserID。

示例代码如下:

final result = await TencentImSDKPlugin.v2TIMManager.getGroupManager().transferGroupOwner( groupID: 'your_group_id', userID: 'target_user_id');

九、获取群在线人数

调用 getGroupOnlineMemberCount(点击查看详情)可以获取群在线人数。

注意:说明:

代码示例如下:

final result = await TencentImSDKPlugin.v2TIMManager.getGroupManager().getGroupOnlineMemberCount( groupID: 'your_group_id');

赞 (0)
上一篇 4天前
下一篇 4天前