logo
即时通讯
客户端 SDK
当前页

群成员管理


功能简介

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

实现流程

注意

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

查询群成员列表

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

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

说明

假设群组内有两名用户 A 和 B,用户 A 已获取了群成员列表。此时,用户 B 修改了用户名和头像,若再次调用 queryGroupMemberList 接口后,是否可以获取最新的用户 B 的群成员信息呢?

您需要根据 ZIM SDK 版本实现不同的操作:

// 群内成员查询群组的成员列表
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 收到查询结果。

// 群内成员 查询群组内某个成员的信息
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 收到通知。

// 群内成员设置昵称。
// 注意:群主可以设置自己和其他群内成员在该群的昵称;其他群内成员仅可以设置自己在该群的昵称。
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)
修改群头像、群名称、群公告支持支持支持
修改群属性
修改群成员昵称支持,可对所有群角色用户使用此功能支持,可对所有普通成员使用此功能支持,仅可对自己使用此功能
撤回群成员消息
踢人不支持。
对单独群成员禁言
对特定群角色禁言
设置群成员角色不支持
转让群主
解散群组
全员禁言
// 群主将普通成员用户设置为管理员
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 收到群主变更的通知。

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

查询群内成员数量

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

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

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

搜索群成员

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

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

// 在某个群组中搜索名称中包含 “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 名群成员的禁言状态。禁言期限可为永久(ZIMGroupMemberMuteConfig > duration 为 -1)或最长为 7 天(ZIMGroupMemberMuteConfig > duration 为 604800)。当 ZIMGroupMemberMuteConfig > duration 为 0 时,表示取消禁言。

说明
  • 群主可以禁止所有群成员发言,包括自己。
  • 如需上调单次操作数量或最长禁言期限,请联系 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 值以“群禁言时间”与“单独被禁言时间”中的最大值为准。

上一篇

群属性管理

下一篇

收发消息