即时通讯
  • iOS
  • Android : Java
  • macOS
  • Windows
  • Web
  • 小程序
  • Flutter
  • Unity3D
  • uni-app
  • React Native
  • 产品简介
  • 下载
  • 快速开始
    • 跑通示例源码
    • 实现基本消息收发
  • 用户相关
  • 房间相关
  • 群组相关
  • 消息相关
  • 呼叫邀请
  • 会话管理
  • 缓存管理
  • 离线推送
  • 语音组件
  • 客户端 API
  • 服务端 API
  • 迁移方案
  • SDK 错误码
  • 常见问题
  • 文档中心
  • 即时通讯
  • 群组相关
  • 群成员管理

群成员管理

更新时间:2024-03-29 23:07

功能简介

ZIM SDK 提供了群成员管理功能,支持查询群组成员列表、查询群组成员基本信息以及转让群主等功能。

前提条件

在实现“群成员管理”功能之前,请确保:

实现流程

用户使用“群成员管理”功能之前,请先加入某个群组,否则无法使用相关功能,详情请参考 加入群组

查询群成员列表

用户登录 ZIM SDK、并加入某个群组后,如果想要了解自己所在群组都有哪些成员,可以通过调用 queryGroupMemberList 接口,分页查询该群组的成员列表。单次调用接口最多可获取 100 名成员,传入 count 超过 100 按照 100 处理。

查询成功后,用户可以通过 ZIMGroupMemberListQueriedCallback 收到查询结果。

截至当前版本,首次调用此接口拉取群成员列表时,可以获取群成员头像。再次调用此接口后,可以获取新增用户的头像信息,但存量用户的头像信息不会更新。

如需获取群成员最新头像,请调用接口 queryGroupMemberInfo 查询群成员信息

queryGroupMemberList 说明

public abstract void queryGroupMemberList(String groupID, ZIMGroupMemberQueryConfig config, ZIMGroupMemberListQueriedCallback callback);
参数 类型 是否必填 说明
groupID String 查询群成员列表的群组 ID。
config ZIMGroupMemberQueryConfig 查询群成员列表的高级属性配置。
callback ZIMGroupMemberListQueriedCallback 查询群成员列表操作的结果回调通知。

示例代码

// 群内成员查询群组的成员列表
ZIMGroupMemberQueryConfig config = new ZIMGroupMemberQueryConfig();
// count 超过 100 按照 100 处理
config.count = 100;
config.nextFlag = 0;
zim.queryGroupMemberList(group_id, config, new ZIMGroupMemberListQueriedCallback() {
    @Override
    public void onGroupMemberListQueried(ArrayList<ZIMGroupMemberInfo> userList, int nextFlag, ZIMError errorInfo) {
        // 通过 errorInfo.code 获取查询群组成员列表的结果     
    }
});

查询群成员信息

用户登录 ZIM SDK、并加入某个群组后,如果想要了解自己所在群组的某个成员的信息,可以通过调用 queryGroupMemberInfo 接口,查询该成员的个人信息。

查询成功后,用户可以通过 ZIMGroupMemberInfoQueriedCallback 收到查询结果。

queryGroupMemberInfo 说明

public abstract void queryGroupMemberInfo(String userID, String groupID, ZIMGroupMemberInfoQueriedCallback callback);
参数 类型 是否必填 说明
userID String 需要获取信息的群成员 userID。
groupID String 获取群成员信息的群组 ID。
callback ZIMGroupMemberInfoQueriedCallback 获取群成员信息操作的结果回调通知。

示例代码

// 群内成员 查询群组内某个成员的信息
zim.queryGroupMemberInfo(user_id, group_id, new ZIMGroupMemberListQueriedCallback() {
    @Override
    public void onGroupMemberListQueried(ArrayList<ZIMGroupMemberInfo> userList, int nextFlag, ZIMError errorInfo) {
        // 通过 errorInfo.code 获取查询群组成员信息的结果     
    }
});

设置群成员昵称

用户登录 ZIM SDK、并加入某个群组后,如果想要设置自己在群组中的昵称,可以通过调用 setGroupMemberNickname 接口,设置昵称。

在群组中,群主可以设置自己和其他群内成员在该群中的昵称;其他群内成员仅可以设置自己在该群的昵称。

设置成功后,用户可以通过 ZIMGroupMemberNicknameUpdatedCallback 收到通知。

setGroupMemberNickname 说明

public abstract void setGroupMemberNickname(String nickname, String forUserID, String groupID, ZIMGroupMemberNicknameUpdatedCallback callback);
参数 类型 是否必填 说明
nickname String 设置的昵称。
forUserID String 设置昵称的群成员 ID。
groupID String 设置昵称的群组 ID。
callback ZIMGroupMemberNicknameUpdatedCallback 设置群成员昵称操作的结果回调通知。

示例代码

// 群内成员设置昵称。
// 注意:群主可以设置自己和其他群内成员在该群的昵称;其他群内成员仅可以设置自己在该群的昵称。
zim.setGroupMemberNickname(member_new_nick_name, user_id, group_id, new ZIMGroupMemberNicknameUpdatedCallback() {
    @Override
    public void onGroupMemberNicknameUpdated(ZIMError errorInfo) {
        // 通过 errorInfo.code 获取设置昵称的结果
    }
});

设置群成员角色

群主登录 ZIM SDK 后,可以通过调用 setGroupMemberRole 接口,设置其他群内成员的角色,比如设置某个群成员为普通成员或者为管理员。

设置成功后,群主可以通过 ZIMGroupMemberRoleUpdatedCallback 类型收到设置结果。

群内成员可以通过 onGroupMemberInfoUpdated 收到用户角色变更的通知。

群成员角色与权限说明

ZIM SDK 默认支持将用户设置为群主、管理员、普通成员。在群组中,群主拥有所有客户端权限,可以实现所有群组功能。管理员拥有大部分客户端权限。普通成员拥有的客户端权限最少,具体如下表所示:

客户端权限 群主(对应枚举值为 1) 管理员(对应枚举值为 2) 普通成员(对应枚举值为 3)
修改群头像、群名称、群公告
支持
支持
支持
修改群属性
修改群成员昵称
支持,可对所有群角色用户使用此功能
支持,可对所有普通成员使用此功能
支持,仅可对自己使用此功能
撤回群成员消息
踢人
不支持。
对单独群成员禁言
对特定群角色禁言
设置群成员角色
不支持
转让群主
解散群组
全员禁言

setGroupMemberRole 说明

public abstract void setGroupMemberRole(int role, String userID, String groupID, ZIMGroupMemberRoleUpdatedCallback callback);
参数 类型 是否必填 说明
role int 设置群成员角色。
  • 1:群主。
  • 2:管理员。
  • 3:普通成员。
  • 其他值:如需自定义群角色,请取值 100 之后的数字,其权限与普通成员相同。
userID String 设置群成员角色的群成员 ID。
groupID String 设置群成员角色的群组 ID。
callback ZIMGroupMemberRoleUpdatedCallback 设置群成员角色操作的结果回调通知。

示例代码

// 群主将普通成员用户设置为管理员
zim.setGroupMemberRole(2, user_id, group_id, new ZIMGroupMemberRoleUpdatedCallback() {
    @Override
    public void onGroupMemberRoleUpdated(ZIMError errorInfo) {
        // 通过 errorInfo.code 获取设置群内成员的角色的结果
    }
});

转让群主

用户登录 ZIM SDK、并加入某个群组后,如果自己是某个群组中的群主,可以通过调用 transferGroupOwner 接口,传入 toUserID(被转让群主的群成员 ID),将自己的群主角色,转让给其他群内成员。

  • 群组中,只有群主向其他群内成员转让群主的角色。
  • 群主转让时,toUserID(被转让群主的用户 ID) 必须是本群组内的成员,否则会操作失败。

转让成功后,群内成员可以通过 onGroupMemberInfoUpdated 收到群主变更的通知。

transferGroupOwner 说明

public abstract void transferGroupOwner(String toUserID, String groupID, ZIMGroupOwnerTransferredCallback callback);
参数 类型 是否必填 说明
toUserID String 被转让群主的群成员 ID。
groupID String 转让群主的群组 ID。
callback ZIMGroupOwnerTransferredCallback 群主转让操作的结果回调通知。

示例代码

// 转让群主身份给其他群内成员
zim.transferGroupOwner(new_group_owner_id, group_id, new ZIMGroupOwnerTransferredCallback() {
    @Override
    public void onGroupOwnerTransferred(ZIMError errorInfo) {
        // 通过 errorInfo.code 获取转让群主身份的结果     
    }
});

查询群内成员数量

用户登录 ZIM SDK、并加入某个群组后,如果想要了解自己所在群组的成员数量,可以通过调用 queryGroupMemberCount 接口,查询该群成员的数量。

查询成功后,用户可以通过 ZIMGroupMemberCountQueriedCallback 收到查询结果。

queryGroupMemberCount 说明

public abstract void queryGroupMemberCount(String groupID,
                                           ZIMGroupMemberCountQueriedCallback callback);
参数 类型 是否必填 说明
groupID String 需要查询的群组 ID。
callback ZIMGroupMemberCountQueriedCallback 获取群成员数量操作的结果回调通知。

示例代码

// 群内成员 查询群组内成员的数量
zim.queryGroupMemberCount("GROUP_ID", new ZIMGroupMemberCountQueriedCallback() {
            @Override
            public void onGroupMemberCountQueried(String groupID, int count, ZIMError errorInfo) {
                // 获取群人数
            }
        });

搜索群成员

用户登录 ZIM SDK、并加入群组后,如果想要根据条件在群成员中搜索用户,可以通过调用 searchLocalGroupMembers 接口,传入 groupID、config、callback 搜索符合条件的群成员。

搜索结果将通过 ZIMGroupMembersSearchedCallback 回调接口返回。

searchLocalGroupMembers 说明

public abstract void searchLocalGroupMembers(String groupID, ZIMGroupMemberSearchConfig config,
                                             ZIMGroupMembersSearchedCallback callback);
参数 类型 是否必填 说明
groupID String 需要搜索的群组 ID(必须为已加入的群)。
config ZIMGroupMemberSearchConfig 群成员搜索配置。
callback ZIMGroupMembersSearchedCallback 可通过该回调获取搜索到的群成员信息。

ZIMGroupMemberSearchConfig 参数说明

参数 类型 是否必填 说明
nextFlag int 查询的 flag ,第一次调用接口时填 0。后续再次调用接口时填从 callback 里返回的 nextFlag,以便获取剩余数据。
count int 搜索一次,可获取的群成员信息,上限为 30。建议小于 20,以降低性能开销。
keywords ArrayList<String> 搜索关键字,最多支持 5 个,否则会报错。例如:传入 "1" 和 "2",则搜索结果只会展示名称同时包含 "1" 和 "2" 这两个关键字的群成员。
isAlsoMatchGroupMemberNickname boolean 搜索范围是否包括群成员昵称,搜索范围是否包括群成员昵称,默认为 false。

示例代码

// 在某个群组中搜索名称中包含 “zego” 的群成员
ZIM zim = getZIM();
ZIMGroupMemberSearchConfig config = new ZIMGroupMemberSearchConfig();
config.count = 10;
config.nextFlag = nextFlag;
config.isAlsoMatchGroupMemberNickname = true; // 如果群成员昵称包含 zego,搜索结果将包含该成员
config.keywords.add("zego");
zim.searchLocalGroupMembers(conversationID, config, new ZIMGroupMembersSearchedCallback() {
    @Override
    public void onGroupMembersSearched(String groupID, ArrayList<ZIMGroupMemberInfo> userList, int nextFlag, ZIMError errorInfo) {
        // 开发者可从 userList 中获取到群成员信息
}});

设置群成员禁言状态

登录 ZIM SDK 后,用户可以禁言或解禁自己管理的群组内的特定成员。调用 muteGroupMembers 接口,批量修改 100 名群成员的禁言状态。禁言期限可为永久或最长 604800 秒(7 天)。

  • 群主可以禁止所有群成员发言,包括自己。
  • 如需上调单次操作数量或最长禁言期限,请联系 ZEGO 技术支持。

设置成功后,操作用户可以通过 ZIMGroupMembersMutedCallback 收到通知。

禁言或解禁成功后,全体群成员会收到 onGroupMemberInfoUpdated,得知哪些群成员无法在该群组发言或解除禁言状态。

如果您希望禁止特定群成员角色发言,请参考 群组管理 - 禁言或解禁群组

boolean isMute = true;

ArrayList<String> userIDList;
userIDList.add("user_1");
userIDList.add("user_3");
userIDList.add("user_2");

String groupID = "group_id";

ZIMGroupMemberMuteConfig config = new ZIMGroupMemberMuteConfig();
// 禁言时长 30 秒
config.duration = 30;

zim.muteGroupMembers(isMute, userIDList, groupID, config,new ZIMGroupMembersMutedCallback() {
    @Override
    public void onGroupMembersMuted(String groupID, boolean isMute, int duration, ArrayList<String> mutedMemberIDs, ArrayList<ZIMErrorUserInfo> errorUserList, ZIMError errorInfo) {
        // 开发者可从回调各参数中获取到禁言结果相关信息
});

查询群内禁言成员列表

登录 ZIM SDK 后,群成员如需了解所在群组的被禁言成员列表,可调用 queryGroupMemberMutedList 接口进行查询。

查询成功后,操作用户可通过 ZIMGroupMemberMutedListQueriedCallback 获取具体信息。

// 群内成员查询群组的成员列表
ZIMGroupMemberMutedListQueryConfig config = new ZIMGroupMemberMutedListQueryConfig();
// 单次获取成员数量为 100
config.count = 100;
config.nextFlag = 0;
zim.queryGroupMemberMutedList(
    group_id, config, new ZIMGroupMemberMutedListQueriedCallback() {
    @Override
    public void onGroupMemberListQueried(String groupID, long nextFlag, ArrayList<ZIMGroupMemberInfo> userList, ZIMError errorInfo) {

    }
});

获取当前群成员禁言状态

如需主动获取当前用户在群组的禁言状态,请通过以下任意方法:

当会话类型是群类型时,从返回结果中的 ZIMGroupConversation 获取 mutedExpiredTime,即群禁言时间,单位为秒。

mutedExpiredTime 值说明如下:

  • 为 -1 时,表示当前用户永久无法在该群组发言。
  • 为 0 时,表示当前用户可以在该群组发言。
  • 为其他值时,表示当前用户于该数值时间内无法在该群组发言。

如果当前用户既因群角色被禁言(详见 群组管理 - 禁言或解禁群组,又被单独禁言(详见本文 设置群成员禁言状态),则 mutedExpiredTime 值以“群禁言时间”与“单独被禁言时间”中的最大值为准。

本篇目录