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

群成员管理

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

功能简介

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

前提条件

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

实现流程

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

查询群成员列表

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

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

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

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

queryGroupMemberList 说明

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

示例代码

// 群内成员查询群组的成员列表
int myNextFlag = 0;
ZIMGroupMemberQueryConfig *config = [[ZIMGroupMemberQueryConfig alloc] init];
// count 超过 100 按照 100 处理
config.count = 20;
config.nextFlag = myNextFlag;
[zim queryGroupMemberListByGroupID:groupID config:config callback:^(NSArray<ZIMGroupMemberInfo *> * _Nonnull userList, unsigned int nextFlag, ZIMError * _Nonnull errorInfo) {
    //保存群成员的锚点,用于下次分页查询
    myNextFlag = nextFlag;
    //这里写调用查询群成员接口后的业务代码
}];

查询群成员信息

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

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

queryGroupMemberInfoByUserID 说明

- (void)queryGroupMemberInfoByUserID:(NSString *)userID
                             groupID:(NSString *)groupID
                            callback:(ZIMGroupMemberInfoQueriedCallback)callback;
参数 类型 是否必填 说明
userID NSString * 需要获取信息的群成员 userID。
groupID NSString * 获取群成员信息的群组 ID。
callback ZIMGroupMemberInfoQueriedCallback 获取群成员信息操作的结果回调通知。

示例代码

// 群内成员 查询群组内某个成员的信息
[zim queryGroupMemberInfo:userID groupID:groupID callback:^(NSString * _Nonnull groupID, ZIMGroupMemberInfo * _Nonnull userInfo, ZIMError * _Nonnull errorInfo) {
    //这里写调用查询群组内某个成员的信息接口后的业务代码
}];

设置群成员昵称

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

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

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

setGroupMemberNickname 说明

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

示例代码

// 群内成员设置昵称。
// 注意:群主可以设置自己和其他群内成员在该群中的昵称;其他群内成员仅可以设置自己在该群中的昵称。
[zim setGroupMemberNickname:nickName forUserID:userID groupID:groupID callback:^(ZIMError * _Nonnull errorInfo) {
        //此处写调用设置群成员的别名接口后的业务代码
}];

设置群成员角色

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

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

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

群成员角色与权限说明

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

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

setGroupMemberRole 说明

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

示例代码

// 群主设置普通成员为管理员
[zim setGroupMemberRole:2 forUserID:userID groupID:groupID callback:^(ZIMError * _Nonnull errorInfo) {
        //此处写设置角色后的业务代码
}];

转让群主

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

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

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

transferGroupOwnerToUserID 说明

- (void)transferGroupOwnerToUserID:(NSString *)toUserID
                           groupID:(NSString *)groupID
                          callback:(ZIMGroupOwnerTransferredCallback)callback;
参数 类型 是否必填 说明
toUserID NSString * 被转让群主的群成员 ID。
groupID NSString * 转让群主的群组 ID。
callback ZIMGroupOwnerTransferredCallback 群主转让操作的结果回调通知。

示例代码

// 转让群主身份给其他群内成员
[zim transferGroupOwnerToUserID:userID groupID:groupID callback:^(ZIMError * _Nonnull errorInfo) {
        //此处写调用转让群主身份给其他群内成员的接口后的业务代码
}];

查询群内成员数量

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

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

queryGroupMemberCountByGroupID 说明

- (void)queryGroupMemberCountByGroupID:(NSString *)groupID
                              callback:(ZIMGroupMemberCountQueriedCallback)callback;
参数 类型 是否必填 说明
groupID NSString * 需要查询的群组 ID。
callback ZIMGroupMemberCountQueriedCallback 获取群成员数量操作的结果回调通知。

示例代码

// 群内成员 查询群组内成员的数量
[zim queryGroupMemberCountByGroupID:self.toGroupID callback:^(NSString * _Nonnull groupID, unsigned int count, ZIMError * _Nonnull errorInfo) {

}];

搜索群成员

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

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

searchLocalGroupMembersByGroupID 说明

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

ZIMGroupMemberSearchConfig 参数说明

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

示例代码

// 在某个群组中搜索名称中包含 “zego” 的群成员
ZIMGroupMemberSearchConfig *config = [[ZIMGroupMemberSearchConfig alloc] init];
config.count = 10;
config.isAlsoMatchGroupMemberNickname = true; // 如果群成员昵称包含 zego,搜索结果将包含该成员
config.keywords = @[@"zego"];
[[ZIM getInstance] searchLocalGroupMembersByGroupID:@"groupID" config:config callback:^(NSString * _Nonnull groupID, NSArray<ZIMGroupMemberInfo *> * _Nonnull userList, unsigned int nextFlag, ZIMError * _Nonnull errorInfo) {
    // 开发者可从 userList 中获取到群成员信息
}];

设置群成员禁言状态

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

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

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

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

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

ZIMGroupMemberMuteConfig *muteConfig = [[ZIMGroupMemberMuteConfig alloc] init];
// 禁言时长 30 秒
muteConfig.duration = 30;
[[ZIM getInstance] muteGroupMembers:YES userIDs:@[@"user_1",@"user_2",@"user_3"] groupID:@"group_id" config:muteConfig callback:^(NSString * _Nonnull groupID, BOOL isMute, int duration, NSArray<NSString *> * _Nonnull mutedMemberIDs, NSArray<ZIMErrorUserInfo *> * _Nonnull errorUserList, ZIMError * _Nonnull errorInfo) {
    // 开发者可从回调各参数中获取到禁言结果相关信息
}];

查询群内禁言成员列表

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

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

// 群内成员查询群组的成员列表
ZIMGroupMemberMutedListQueryConfig *config = [[ZIMGroupMemberMutedListQueryConfig alloc] init];
// 单次获取成员数量为 100
config.count = 100;
config.nextFlag = 0;

[[ZIM getInstance] queryGroupMemberMutedListByGroupID:@"groupID" config:config callback:^(NSString * _Nonnull groupID, unsigned long long nextFlag, NSArray<ZIMGroupMemberInfo *> * _Nonnull userList, ZIMError * _Nonnull errorInfo) {
    // 开发者可以从 info 中拿到被禁言群成员信息
}];

获取当前群成员禁言状态

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

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

mutedExpiredTime 值说明如下:

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

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

本篇目录