功能描述
群成员管理指的是对成员进行列表拉取、禁言、踢人、授权、转让群主等操作。相关方法在核心类 TencentImSDKPlugin.v2TIMManager.getGroupManager()
中。
获取群成员列表
您可以调用 getGroupMemberList
获取指定群的群成员列表。该列表中包含了各个群成员的资料信息,例如用户ID(userID
)、群名片(nameCard
)、头像(faceUrl
)、昵称(nickName
)、进群时间(joinTime
)等信息。
一个群中的成员人数可能很多(例如 5000+),群成员列表的拉取接口支持过滤器(filter
)和分页拉取(nextSeq
)两个高级特性。
过滤器(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 | 仅拉取普通群成员的信息列表 |
示例代码如下:
// 通过 filter 参数指定只拉取群主的资料
groupManager.getGroupMemberList(count: 10,filter: GroupMemberFilterTypeEnum.V2TIM_GROUP_MEMBER_FILTER_ADMIN,nextSeq: '0',offset: 0,groupID: "",);
分页拉取(nextSeq)
很多情况下,用户界面上并不需要展示全部的群成员信息,只需展示群成员列表的第一页即可。等用户单击“下一页”或在列表页上拉刷新时,才需要拉取更多的群成员。针对此类场景,您可以使用分页拉取。
分页拉取的步骤为:
首次调用
getGroupMemberList
时,指定参数nextSeq
为 0(表示从头开始拉取会话列表),一次最多拉取 50 个群成员对象。首次拉取群成员列表成功后,
getGroupMemberList
的回调结果V2TIMGroupMemberInfoResult
中会包含nextSeq
(下次分页拉取的字段):- 如果
nextSeq
等于 0,表示已经拉取了全部的群成员。 - 如果
nextSeq
大于 0,表示还有更多的群成员可以拉取。此时并不意味着要立刻开始拉取 “下一页” 的成员列表。在常见的通信软件中,分页拉取通常由用户的滑动操作触发的,用户通过上拉触发一次分页拉取。
- 如果
当用户继续上拉群成员列表时,如果还有更多的群成员可以拉取,可以继续调用
getGroupMemberList
接口,并传入新一轮的nextSeq
参数(nextSeq
数值来自上一次拉取返回的V2TIMGroupMemberInfoResult
对象)。重复执行【步骤 3】直至
nextSeq
等于 0,拉取结束。
示例代码如下:
// 通过 filter 参数指定只拉取群主的资料
groupManager.getGroupMemberList(count: 10,filter: GroupMemberFilterTypeEnum.V2TIM_GROUP_MEMBER_FILTER_ADMIN,nextSeq: '0',offset: 0,groupID: "",);
禁言
禁言指定群成员
群主或管理员可以通过 muteGroupMember
禁言某一个群成员并设置禁言时间。禁言时间单位为秒,禁言信息存储于群成员的 muteUtil
属性字段中。
群成员被禁言后,全员(包括被禁言的群成员)都会收到 onMemberInfoChanged
事件回调。
禁言整个群
群主或管理员也可以通过 setGroupInfo
接口对整个群进行禁言,将 allMuted
属性字段设置为 true
即可。全群禁言没有时间限制,需通过将群资料 setAllMuted(false)
解除禁言。
说明:
全员禁言后触发 onGroupInfoChanged
事件回调,该功能默认是关闭的,可在控制台内自行开通。
方式: 进入即时通信IM控制台群组配置模块,选择群系统通知配置,为各种类型群,单击操作中编辑,修改“群禁言变更通知”,即可。
说明:
只有群主能将管理员禁言。
示例代码如下:
// 禁言群成员 userB 10分钟
groupManager.muteGroupMember(groupID: '',userID: 'userB',seconds: 10);
// 全员禁言
groupManager.setGroupInfo(info: V2TimGroupInfo(isAllMuted: true,groupID: '',groupType: 'Public'));
TencentImSDKPlugin.v2TIMManager.addGroupListener(listener: V2TimGroupListener(onMemberInfoChanged: (groupID, v2TIMGroupMemberChangeInfoList) {
//群成员信息更改
},
onGroupInfoChanged: (groupID,info){
// 群信息修改
}
));
踢人
群主或管理员调用 kickGroupMember
接口可以将指定的普通群成员踢出群组。
普通群成员被踢后,全员(包括被踢人)会收到 onMemberKicked
回调。
由于直播群(AVChatRoom)对进群没有限制,因此直播群(AVChatRoom)没有支持踢人的接口,您可以使用 muteGroupMember
禁言指定成员达到类似的成员管控的目的。禁言操作参考 禁言。
说明:
只有群主能将管理员踢出群组。
示例代码如下:
groupManager.kickGroupMember(groupID: '',memberList: []);
设置管理员
群主调用 setGroupMemberRole
可以对陌生人社交群(Public)或临时会议群(Meeting)中的群成员进行管理员授权。
普通成员被授权后,拥有跟管理员同样的权限,例如支持以下操作:
- 修改群组基本资料
- 将普通群成员踢出群
- 将普通群成员禁言(即禁止其在一段时间内发言)
- 审批其他用户的入群申请
更多详情可参考 群成员角色介绍。
普通成员被授权为管理员后,全员(包括被设置的成员)会收到 onGrantAdministrator
回调。
普通成员被取消管理员授权后,全员(包括被设置的成员)会收到 onRevokeAdministrator
回调。
示例代码如下:
groupManager.setGroupMemberRole(groupID: '',userID: '',role: GroupMemberRoleTypeEnum.V2TIM_GROUP_MEMBER_ROLE_ADMIN);
// 监听角色更改
TencentImSDKPlugin.v2TIMManager.addGroupListener(listener: V2TimGroupListener(onMemberInfoChanged: (groupID, v2TIMGroupMemberChangeInfoList) {
},
onGroupInfoChanged: (groupID,info){
},
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。
示例代码如下:
groupManager.transferGroupOwner(groupID: "", userID: "userID");
获取群在线人数
调用 getGroupOnlineMemberCount
可以获取群在线人数。
说明:
- 目前仅直播群(AVChatRoom)支持获取群在线人数。
- SDK 调用频率限制为 60 秒 1 次。
代码示例如下:
groupManager.getGroupOnlineMemberCount(groupID: '');
交流与反馈
欢迎加入 QQ 群进行技术交流和反馈问题,QQ 群:788910197。