群组管理
功能简介
本文档适用于开发以下平台的应用:iOS、Android、macOS、Windows、Web。
ZIM SDK 提供了群组管理功能,支持用户创建/解散群组、加入/退出群组,持久化维系群组关系。
群组管理功能可应用于办公群、社交群、兴趣群以及粉丝群等场景中,群组成员数量上限请参考 计费说明。
创建群组
客户端 A 登录 ZIM SDK 后,调用 createGroup 接口,设置高级配置,创建一个群组,此时 A 就是 群主;其他客户端可以根据 A 创建的群组 groupID 加入群组。
开发者可以通过 ZIMGroupCreatedCallback ,判断群组是否创建成功。相关错误码请查看 常见错误码。
- “groupID” 支持开发者自定义规则生成,仅支持数字,英文字符和 '!'、'#'、'$'、'%'、'&'、'('、')'、'+'、'-'、':'、';'、'<'、'='、'.'、'>'、'?'、'@'、'['、']'、'^'、'_'、'{'、'}'、'|'、'~',且不能以 ’#‘ 开头;若该字段为空,ZIM 服务器会自动生成。建议开发者将 “groupID” 设置为一个有意义的值,可将其与自己的业务账号系统进行关联。
 - 调用 createGroup 接口创建群组后,会直接加入群组,无需再调用 joinGroup 接口加入群组。
 - 用户创建群组时,该用户即是该群组的“群主”。如果想要转让身份,请参考 转让群主。
 - 如需规定群组人数上限,以及入群模式(包括验证模式、邀请模式和被邀请人是否需要同意),请集成 2.15.0 或以上版本的 SDK。
 
// 创建一个群组
// groupID 最大 32 字节的字符串。仅支持数字,英文字符 和 '!', '#', '$', '%', '&', '(', ')', '+', '-', ':', ';', '<', '=', '.', '>', '?', '@', '[', ']', '^', '_', '{', '}', '|', '~',且不能以 ’#‘ 开头。
// groupName 最大 50 字节的字符串,无特殊字符限制。
ZIMGroupInfo groupInfo = new ZIMGroupInfo();
groupInfo.groupID = "group_id";
groupInfo.groupName = "groupName";
groupInfo.groupAvatarUrl = "groupAvatarUrl";
ZIMGroupAdvancedConfig config = new ZIMGroupAdvancedConfig();
HashMap<String, String> attributes = new HashMap<>();
attributes.put("key_0", "value_0");
attributes.put("key_1", "value_1");
attributes.put("key_2", "value_2");
config.groupAttributes = attributes;
// 主动加群验证模式
config.joinMode = ZIMGroupJoinMode.ANY;
// 邀请进群验证模式
config.inviteMode = ZIMGroupInviteMode.ANY;
// 被邀请入群验证模式
config.beInviteMode = ZIMGroupBeInviteMode.NONE;
// 成员数量限制
config.maxMemberCount = 300;
ArrayList<String> userList = new ArrayList<>();
userList.add("user_1");
userList.add("user_2");
zim.createGroup(groupInfo, userList, config, new ZIMGroupCreatedCallback() {
    @Override
    public void onGroupCreated(ZIMGroupFullInfo groupInfo, ArrayList<ZIMGroupMemberInfo> userIDs, ArrayList<ZIMErrorUserInfo> errorUserList, ZIMError errorInfo) {
        // 通过 errorInfo.code 获取创建群的结果
    }
});// 创建一个群组
// groupID 最大 32 字节的字符串。仅支持数字,英文字符 和 '!', '#', '$', '%', '&', '(', ')', '+', '-', ':', ';', '<', '=', '.', '>', '?', '@', '[', ']', '^', '_', '{', '}', '|', '~',且不能以 ’#‘ 开头。
// groupName 最大 50 字节的字符串,无特殊字符限制。
ZIMGroupInfo groupInfo = new ZIMGroupInfo();
groupInfo.groupID = "group_id";
groupInfo.groupName = "groupName";
groupInfo.groupAvatarUrl = "groupAvatarUrl";
ZIMGroupAdvancedConfig config = new ZIMGroupAdvancedConfig();
HashMap<String, String> attributes = new HashMap<>();
attributes.put("key_0", "value_0");
attributes.put("key_1", "value_1");
attributes.put("key_2", "value_2");
config.groupAttributes = attributes;
// 主动加群验证模式
config.joinMode = ZIMGroupJoinMode.ANY;
// 邀请进群验证模式
config.inviteMode = ZIMGroupInviteMode.ANY;
// 被邀请入群验证模式
config.beInviteMode = ZIMGroupBeInviteMode.NONE;
// 成员数量限制
config.maxMemberCount = 300;
ArrayList<String> userList = new ArrayList<>();
userList.add("user_1");
userList.add("user_2");
zim.createGroup(groupInfo, userList, config, new ZIMGroupCreatedCallback() {
    @Override
    public void onGroupCreated(ZIMGroupFullInfo groupInfo, ArrayList<ZIMGroupMemberInfo> userIDs, ArrayList<ZIMErrorUserInfo> errorUserList, ZIMError errorInfo) {
        // 通过 errorInfo.code 获取创建群的结果
    }
});// 创建一个群组
// groupID 最大 32 字节的字符串。仅支持数字,英文字符 和 '!', '#', '$', '%', '&', '(', ')', '+', '-', ':', ';', '<', '=', '.', '>', '?', '@', '[', ']', '^', '_', '{', '}', '|', '~',且不能以 ’#‘ 开头。
// groupName 最大 50 字节的字符串,无特殊字符限制
ZIMGroupInfo groupInfo = ZIMGroupInfo();
groupInfo.groupID = 'groupID';
groupInfo.groupName = 'groupName';
List<String> inviteUserIDs = ['userID1', 'userID2'];
ZIMGroupAdvancedConfig advancedConfig = ZIMGroupAdvancedConfig();
// 主动加群模式
// 
advancedConfig.joinMode = ZIMGroupJoinMode.any;
// 邀请进群验证模式
advancedConfig.inviteMode = ZIMGroupInviteMode.any;
// 被邀请入群验证模式
advancedConfig.beInviteMode = ZIMGroupBeInviteMode.none;
//成员数量限制
advancedConfig.maxMemberCount = 300;
try{
    await ZIM.getInstance()!.createGroup(groupInfo, inviteUserIDs,advancedConfig);
    //这里写创建群组后的业务逻辑
    } on PlatformException catch(onError){
    onError.code;
    onError.message;
}// 创建一个群组
// groupID 最大 32 字节的字符串。仅支持数字,英文字符 和 '!', '#', '$', '%', '&', '(', ')', '+', '-', ':', ';', '<', '=', '.', '>', '?', '@', '[', ']', '^', '_', '{', '}', '|', '~',且不能以 ’#‘ 开头。
// groupName 最大 50 字节的字符串,无特殊字符限制
ZIMGroupInfo groupInfo = ZIMGroupInfo();
groupInfo.groupID = 'groupID';
groupInfo.groupName = 'groupName';
List<String> inviteUserIDs = ['userID1', 'userID2'];
ZIMGroupAdvancedConfig advancedConfig = ZIMGroupAdvancedConfig();
// 主动加群模式
// 
advancedConfig.joinMode = ZIMGroupJoinMode.any;
// 邀请进群验证模式
advancedConfig.inviteMode = ZIMGroupInviteMode.any;
// 被邀请入群验证模式
advancedConfig.beInviteMode = ZIMGroupBeInviteMode.none;
//成员数量限制
advancedConfig.maxMemberCount = 300;
try{
    await ZIM.getInstance()!.createGroup(groupInfo, inviteUserIDs,advancedConfig);
    //这里写创建群组后的业务逻辑
    } on PlatformException catch(onError){
    onError.code;
    onError.message;
}// 创建一个群组
// groupID 最大 32 字节的字符串。仅支持数字,英文字符 和 '!', '#', '$', '%', '&', '(', ')', '+', '-', ':', ';', '<', '=', '.', '>', '?', '@', '[', ']', '^', '_', '{', '}', '|', '~',且不能以 ’#‘ 开头。
// groupName 最大 50 字节的字符串,无特殊字符限制。
zim::ZIMGroupInfo group_info;
group_info.groupID = "group_id";
group_info.groupName = "groupName";
group_info.groupAvatarUrl = "groupAvatarUrl";
zim::ZIMGroupAdvancedConfig config;
config.groupAttributes.emplace("key_0", "value_0");
config.groupAttributes.emplace("key_1", "value_1");
config.groupAttributes.emplace("key_2", "value_2");
/**
 * 入群验证模式,仅支持 2.15.0 及以上版本的 ZIM SDK
 * ZIM_GROUP_JOIN_MODE_ANY:0,默认值,任何人可直接加群。
 * ZIM_GROUP_JOIN_MODE_AUTH:1,需要群主或管理员审批才能入群。
 * ZIM_GROUP_JOIN_MODE_FORBID:2,禁止其他用户入群。
 */
config.joinMode = zim::ZIMGroupJoinMode::ZIM_GROUP_JOIN_MODE_AUTH;
/**
 * 邀请模式,仅支持 2.15.0 及以上版本的 ZIM SDK
 * ZIM_GROUP_INVITE_MODE_ANY:0,默认值,任何群成员都可以邀请外部成员入群。
 * ZIM_GROUP_INVITE_MODE_ADMIN:1,仅限群主或管理员可以邀请外部成员入群
 */
config.inviteMode = zim::ZIMGroupInviteMode::ZIM_GROUP_INVITE_MODE_ADMIN;
/**
 * 邀请目标用户验证模式,仅支持 2.15.0 及以上版本的 ZIM SDK
 * ZIM_GROUP_BEINVITE_MODE_NONE:0,默认值,无需被邀请人同意,该用户自动成为群成员。
 * ZIM_GROUP_BEINVITE_MODE_AUTH:1,被邀请人同意后成为群成员。
 */
config.beInviteMode = zim::ZIMGroupBeInviteMode::ZIM_GROUP_BE_INVITE_MODE_AUTH;
/**
 * 群组人数上限,仅支持 2.15.0 及以上版本的 ZIM SDK
 * 取值范围: [0, 套餐默认的最大群成员数量]。
 */ 
config.maxMemberCount = 100;
std::vector<std::string> user_list;
user_list.push_back("user_1");
user_list.push_back("user_2");
zim_->createGroup(group_info, user_list, config, 
    [=](const zim::ZIMGroupFullInfo &groupInfo,
        const std::vector<zim::ZIMGroupMemberInfo> &userList,
        const std::vector<zim::ZIMErrorUser> &errorUserList,
        zim::ZIMError errorInfo {
        int error_code = errorInfo.code;
    });// 创建一个群组
// groupID 最大 32 字节的字符串。仅支持数字,英文字符 和 '!', '#', '$', '%', '&', '(', ')', '+', '-', ':', ';', '<', '=', '.', '>', '?', '@', '[', ']', '^', '_', '{', '}', '|', '~',且不能以 ’#‘ 开头。
// groupName 最大 50 字节的字符串,无特殊字符限制。
zim::ZIMGroupInfo group_info;
group_info.groupID = "group_id";
group_info.groupName = "groupName";
group_info.groupAvatarUrl = "groupAvatarUrl";
zim::ZIMGroupAdvancedConfig config;
config.groupAttributes.emplace("key_0", "value_0");
config.groupAttributes.emplace("key_1", "value_1");
config.groupAttributes.emplace("key_2", "value_2");
/**
 * 入群验证模式,仅支持 2.15.0 及以上版本的 ZIM SDK
 * ZIM_GROUP_JOIN_MODE_ANY:0,默认值,任何人可直接加群。
 * ZIM_GROUP_JOIN_MODE_AUTH:1,需要群主或管理员审批才能入群。
 * ZIM_GROUP_JOIN_MODE_FORBID:2,禁止其他用户入群。
 */
config.joinMode = zim::ZIMGroupJoinMode::ZIM_GROUP_JOIN_MODE_AUTH;
/**
 * 邀请模式,仅支持 2.15.0 及以上版本的 ZIM SDK
 * ZIM_GROUP_INVITE_MODE_ANY:0,默认值,任何群成员都可以邀请外部成员入群。
 * ZIM_GROUP_INVITE_MODE_ADMIN:1,仅限群主或管理员可以邀请外部成员入群
 */
config.inviteMode = zim::ZIMGroupInviteMode::ZIM_GROUP_INVITE_MODE_ADMIN;
/**
 * 邀请目标用户验证模式,仅支持 2.15.0 及以上版本的 ZIM SDK
 * ZIM_GROUP_BEINVITE_MODE_NONE:0,默认值,无需被邀请人同意,该用户自动成为群成员。
 * ZIM_GROUP_BEINVITE_MODE_AUTH:1,被邀请人同意后成为群成员。
 */
config.beInviteMode = zim::ZIMGroupBeInviteMode::ZIM_GROUP_BE_INVITE_MODE_AUTH;
/**
 * 群组人数上限,仅支持 2.15.0 及以上版本的 ZIM SDK
 * 取值范围: [0, 套餐默认的最大群成员数量]。
 */ 
config.maxMemberCount = 100;
std::vector<std::string> user_list;
user_list.push_back("user_1");
user_list.push_back("user_2");
zim_->createGroup(group_info, user_list, config, 
    [=](const zim::ZIMGroupFullInfo &groupInfo,
        const std::vector<zim::ZIMGroupMemberInfo> &userList,
        const std::vector<zim::ZIMErrorUser> &errorUserList,
        zim::ZIMError errorInfo {
        int error_code = errorInfo.code;
    });// groupID 最大 32 字节的字符串。仅支持数字,英文字符 和 '!', '#', '$', '%', '&', '(', ')', '+', '-', ':', ';', '<', '=', '.', '>', '?', '@', '[', ']', '^', '_', '{', '}', '|', '~',且不能以 ’#‘ 开头。
// groupName 最大 50 字节的字符串,无特殊字符限制。
const groupInfo: ZIMGroupInfo = { groupID: '', groupName: '', groupAvatarUrl: '' };
const userIDs = [];
// 设置入群模式和群组人数上限
const config: ZIMGroupAdvancedConfig = {
    /**
     * 入群验证模式,仅支持 2.15.0 及以上版本的 ZIM SDK
     * 0:(默认)任何人可直接加群。
     * 1:需要群主或管理员审批才能入群。
     * 2:禁止其他用户入群。
     */
    joinMode: 1, 
    /**
     * 邀请模式,仅支持 2.15.0 及以上版本的 ZIM SDK
     * 0:(默认)任何群成员都可以邀请外部成员入群。
     * 1:仅限群主或管理员可以邀请外部成员入群。
     */
    inviteMode: 1,
    /**
     * 邀请目标用户验证模式,仅支持 2.15.0 及以上版本的 ZIM SDK
     * 0:(默认)无需被邀请人同意,该用户自动成为群成员。
     * 1:被邀请人同意后成为群成员。
     */
    beInviteMode: 1,
    /**
     * 群组人数上限,仅支持 2.15.0 及以上版本的 ZIM SDK
     * 取值范围: [0, 套餐默认的最大群成员数量]。
     */    
    maxMemberCount: 100 // 限制群成员总人数 100
};
zim.createGroup(groupInfo, userIDs, config)
    .then((res: ZIMGroupCreatedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// groupID 最大 32 字节的字符串。仅支持数字,英文字符 和 '!', '#', '$', '%', '&', '(', ')', '+', '-', ':', ';', '<', '=', '.', '>', '?', '@', '[', ']', '^', '_', '{', '}', '|', '~',且不能以 ’#‘ 开头。
// groupName 最大 50 字节的字符串,无特殊字符限制。
const groupInfo: ZIMGroupInfo = { groupID: '', groupName: '', groupAvatarUrl: '' };
const userIDs = [];
// 设置入群模式和群组人数上限
const config: ZIMGroupAdvancedConfig = {
    /**
     * 入群验证模式,仅支持 2.15.0 及以上版本的 ZIM SDK
     * 0:(默认)任何人可直接加群。
     * 1:需要群主或管理员审批才能入群。
     * 2:禁止其他用户入群。
     */
    joinMode: 1, 
    /**
     * 邀请模式,仅支持 2.15.0 及以上版本的 ZIM SDK
     * 0:(默认)任何群成员都可以邀请外部成员入群。
     * 1:仅限群主或管理员可以邀请外部成员入群。
     */
    inviteMode: 1,
    /**
     * 邀请目标用户验证模式,仅支持 2.15.0 及以上版本的 ZIM SDK
     * 0:(默认)无需被邀请人同意,该用户自动成为群成员。
     * 1:被邀请人同意后成为群成员。
     */
    beInviteMode: 1,
    /**
     * 群组人数上限,仅支持 2.15.0 及以上版本的 ZIM SDK
     * 取值范围: [0, 套餐默认的最大群成员数量]。
     */    
    maxMemberCount: 100 // 限制群成员总人数 100
};
zim.createGroup(groupInfo, userIDs, config)
    .then((res: ZIMGroupCreatedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// 创建一个群组
// groupID 最大 32 字节的字符串。仅支持数字,英文字符 和 '!', '#', '$', '%', '&', '(', ')', '+', '-', ':', ';', '<', '=', '.', '>', '?', '@', '[', ']', '^', '_', '{', '}', '|', '~',且不能以 ’#‘ 开头。
// groupName 最大 50 字节的字符串,无特殊字符限制。
ZIMGroupInfo *groupInfo = [[ZIMGroupInfo alloc] init];
groupInfo.groupID = @"groupID";
groupInfo.groupName = @"groupName";
groupInfo.groupAvatarUrl = @"groupAvatarUrl";
ZIMGroupAdvancedConfig *advancedConfig = [[ZIMGroupAdvancedConfig alloc] init];
// 主动加群验证模式
advancedConfig.joinMode = ZIMGroupJoinModeAny;
// 邀请进群验证模式
advancedConfig.inviteMode = ZIMGroupInviteModeAny;
// 被邀请入群验证模式
advancedConfig.beInviteMode = ZIMGroupBeInviteModeNone;
//成员数量限制
advancedConfig.maxMemberCount = 300;
[[ZIM getInstance] createGroup:groupInfo userIDs:@[@"userID1",@"userID2"] config:advancedConfig callback:^(ZIMGroupFullInfo * _Nonnull groupInfo, NSArray<ZIMGroupMemberInfo *> * _Nonnull userList, NSArray<ZIMErrorUserInfo *> * _Nonnull errorUserList, ZIMError * _Nonnull errorInfo) {
    //这里写创建群组后的业务逻辑
}];// 创建一个群组
// groupID 最大 32 字节的字符串。仅支持数字,英文字符 和 '!', '#', '$', '%', '&', '(', ')', '+', '-', ':', ';', '<', '=', '.', '>', '?', '@', '[', ']', '^', '_', '{', '}', '|', '~',且不能以 ’#‘ 开头。
// groupName 最大 50 字节的字符串,无特殊字符限制。
ZIMGroupInfo *groupInfo = [[ZIMGroupInfo alloc] init];
groupInfo.groupID = @"groupID";
groupInfo.groupName = @"groupName";
groupInfo.groupAvatarUrl = @"groupAvatarUrl";
ZIMGroupAdvancedConfig *advancedConfig = [[ZIMGroupAdvancedConfig alloc] init];
// 主动加群验证模式
advancedConfig.joinMode = ZIMGroupJoinModeAny;
// 邀请进群验证模式
advancedConfig.inviteMode = ZIMGroupInviteModeAny;
// 被邀请入群验证模式
advancedConfig.beInviteMode = ZIMGroupBeInviteModeNone;
//成员数量限制
advancedConfig.maxMemberCount = 300;
[[ZIM getInstance] createGroup:groupInfo userIDs:@[@"userID1",@"userID2"] config:advancedConfig callback:^(ZIMGroupFullInfo * _Nonnull groupInfo, NSArray<ZIMGroupMemberInfo *> * _Nonnull userList, NSArray<ZIMErrorUserInfo *> * _Nonnull errorUserList, ZIMError * _Nonnull errorInfo) {
    //这里写创建群组后的业务逻辑
}];加入群组
如需用户加入群组后自动获取群历史消息,请联系 ZEGO 技术支持进行配置。
其他用户登录 ZIM SDK 后,可以通过主动加入或被邀请加入由 A 创建的群组。
如果用户加入成功后,全体群成员(包括该新成员)都会收到 groupMemberStateChanged 和 groupStateChanged 的回调通知:
// 监听 onGroupMemberStateChanged 和 onGroupStateChanged
zim.setEventHandler(new ZIMEventHandler(){
    public void onGroupMemberStateChanged(ZIM zim, ZIMGroupMemberState state, ZIMGroupMemberEvent event, ArrayList<ZIMGroupMemberInfo> userList, ZIMGroupOperatedInfo operatedInfo, String groupID) {
          // 群成员状态变化回调通知
    }
    public void onGroupStateChanged(ZIM zim, ZIMGroupState state, ZIMGroupEvent event, ZIMGroupOperatedInfo operatedInfo, ZIMGroupFullInfo groupInfo) {
          // 群状态变化回调通知
    }
});// 监听 onGroupMemberStateChanged 和 onGroupStateChanged
zim.setEventHandler(new ZIMEventHandler(){
    public void onGroupMemberStateChanged(ZIM zim, ZIMGroupMemberState state, ZIMGroupMemberEvent event, ArrayList<ZIMGroupMemberInfo> userList, ZIMGroupOperatedInfo operatedInfo, String groupID) {
          // 群成员状态变化回调通知
    }
    public void onGroupStateChanged(ZIM zim, ZIMGroupState state, ZIMGroupEvent event, ZIMGroupOperatedInfo operatedInfo, ZIMGroupFullInfo groupInfo) {
          // 群状态变化回调通知
    }
});//群成员状态变更通知
ZIMEventHandler.onGroupMemberStateChanged = (
    ZIM zim,
    ZIMGroupMemberState state,
    ZIMGroupMemberEvent event,
    List<ZIMGroupMemberInfo> userList,
    ZIMGroupOperatedInfo operatedInfo,
    String groupID
){};
//群状态变更通知
ZIMEventHandler.onGroupStateChanged = (
    ZIM zim,
    ZIMGroupState state,
    ZIMGroupEvent event,
    ZIMGroupOperatedInfo operatedInfo,
    ZIMGroupFullInfo groupInfo
){};//群成员状态变更通知
ZIMEventHandler.onGroupMemberStateChanged = (
    ZIM zim,
    ZIMGroupMemberState state,
    ZIMGroupMemberEvent event,
    List<ZIMGroupMemberInfo> userList,
    ZIMGroupOperatedInfo operatedInfo,
    String groupID
){};
//群状态变更通知
ZIMEventHandler.onGroupStateChanged = (
    ZIM zim,
    ZIMGroupState state,
    ZIMGroupEvent event,
    ZIMGroupOperatedInfo operatedInfo,
    ZIMGroupFullInfo groupInfo
){};void onGroupMemberStateChanged(zim::ZIM *zim, zim::ZIMGroupMemberState state,
                                        zim::ZIMGroupMemberEvent event,
                                        const std::vector<zim::ZIMGroupMemberInfo> &userList,
                                        const zim::ZIMGroupOperatedInfo &operatedInfo,
                                        const std::string &groupID) override {
    ......
}
void onGroupStateChanged(zim::ZIM *zim, zim::ZIMGroupState state,
                                    zim::ZIMGroupEvent event,
                                    const zim::ZIMGroupOperatedInfo &operatedInfo,
                                    const zim::ZIMGroupFullInfo &groupInfo) override {
    ......
}void onGroupMemberStateChanged(zim::ZIM *zim, zim::ZIMGroupMemberState state,
                                        zim::ZIMGroupMemberEvent event,
                                        const std::vector<zim::ZIMGroupMemberInfo> &userList,
                                        const zim::ZIMGroupOperatedInfo &operatedInfo,
                                        const std::string &groupID) override {
    ......
}
void onGroupStateChanged(zim::ZIM *zim, zim::ZIMGroupState state,
                                    zim::ZIMGroupEvent event,
                                    const zim::ZIMGroupOperatedInfo &operatedInfo,
                                    const zim::ZIMGroupFullInfo &groupInfo) override {
    ......
}
// 注册监听“群成员状态变更”的回调
zim.on('groupMemberStateChanged', (zim: ZIM, data: ZIMEventOfGroupMemberStateChangedResult) => {
    console.log('groupMemberStateChanged', data);
});
// 注册监听“群状态变更”的回调
zim.on('groupStateChanged', (zim: ZIM, data: ZIMEventOfGroupStateChangedResult) => {
    console.log('groupStateChanged', data);
});
// 注册监听“群成员状态变更”的回调
zim.on('groupMemberStateChanged', (zim: ZIM, data: ZIMEventOfGroupMemberStateChangedResult) => {
    console.log('groupMemberStateChanged', data);
});
// 注册监听“群状态变更”的回调
zim.on('groupStateChanged', (zim: ZIM, data: ZIMEventOfGroupStateChangedResult) => {
    console.log('groupStateChanged', data);
});
// 注册监听“群成员状态变更”的回调
zim.onGroupMemberStateChanged((data) => {
    console.log('groupMemberStateChanged', data);
});
// 注册监听“群状态变更”的回调
zim.onGroupStateChanged((data) => {
    console.log('groupStateChanged', data);
});
// 注册监听“群成员状态变更”的回调
zim.onGroupMemberStateChanged((data) => {
    console.log('groupMemberStateChanged', data);
});
// 注册监听“群状态变更”的回调
zim.onGroupStateChanged((data) => {
    console.log('groupStateChanged', data);
});- (void)zim:(ZIM *)zim
    groupMemberStateChanged:(ZIMGroupMemberState)state
                      event:(ZIMGroupMemberEvent)event
                   userList:(NSArray<ZIMGroupMemberInfo *> *)userList
               operatedInfo:(ZIMGroupOperatedInfo *)operatedInfo
    groupID:(NSString *)groupID{
}
- (void)zim:(ZIM *)zim
    groupStateChanged:(ZIMGroupState)state
                event:(ZIMGroupEvent)event
         operatedInfo:(ZIMGroupOperatedInfo *)operatedInfo
  groupInfo:(ZIMGroupFullInfo *)groupInfo{
}- (void)zim:(ZIM *)zim
    groupMemberStateChanged:(ZIMGroupMemberState)state
                      event:(ZIMGroupMemberEvent)event
                   userList:(NSArray<ZIMGroupMemberInfo *> *)userList
               operatedInfo:(ZIMGroupOperatedInfo *)operatedInfo
    groupID:(NSString *)groupID{
}
- (void)zim:(ZIM *)zim
    groupStateChanged:(ZIMGroupState)state
                event:(ZIMGroupEvent)event
         operatedInfo:(ZIMGroupOperatedInfo *)operatedInfo
  groupInfo:(ZIMGroupFullInfo *)groupInfo{
}方式 1:主动加入群组
根据群组的 joinMode ,外部用户需要选择相应的接口加入群组。
- 当 
joinMode为 0(ANY),用户调用 joinGroup 接口,传入 groupID(groupID 必须已经存在,否则会操作失败),即可直接加入群组。 
开发者可以通过 ZIMGroupJoinedResult,判断用户加入群组是否成功。
// 其他客户端直接加入群组
zim.joinGroup("groupID", new ZIMGroupJoinedCallback() {
    @Override
    public void onGroupJoined(ZIMGroupFullInfo groupInfo, ZIMError errorInfo) {
        // 通过 errorInfo.code 获取加入群组的结果
    }
});// 其他客户端直接加入群组
zim.joinGroup("groupID", new ZIMGroupJoinedCallback() {
    @Override
    public void onGroupJoined(ZIMGroupFullInfo groupInfo, ZIMError errorInfo) {
        // 通过 errorInfo.code 获取加入群组的结果
    }
});// 其他客户端直接加入群组
ZIM.getInstance()
!.joinGroup('groupID')
.then((value){
    //成功触发此处
})
.catchError((onError) {
    //失败触发此处
});// 其他客户端直接加入群组
ZIM.getInstance()
!.joinGroup('groupID')
.then((value){
    //成功触发此处
})
.catchError((onError) {
    //失败触发此处
});// 其他客户端直接加入群组
zim_->joinGroup(group_id,
                [=](const zim::ZIMGroupFullInfo &groupInfo, zim::ZIMError errorInfo) {
        int error_code = errorInfo.code;
    });// 其他客户端直接加入群组
zim_->joinGroup(group_id,
                [=](const zim::ZIMGroupFullInfo &groupInfo, zim::ZIMError errorInfo) {
        int error_code = errorInfo.code;
    });const groupID = '';
// 其他客户端直接加入群组
zim.joinGroup(groupID)
    .then((res: ZIMGroupJoinedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });const groupID = '';
// 其他客户端直接加入群组
zim.joinGroup(groupID)
    .then((res: ZIMGroupJoinedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// 其他客户端直接加入群组
[zim joinGroup:GroupID callback:^(ZIMGroupFullInfo * _Nonnull groupInfo, ZIMError * _Nonnull errorInfo) {
    //这里写调用加入群组接口后的业务逻辑
}];// 其他客户端直接加入群组
[zim joinGroup:GroupID callback:^(ZIMGroupFullInfo * _Nonnull groupInfo, ZIMError * _Nonnull errorInfo) {
    //这里写调用加入群组接口后的业务逻辑
}];- 当 
joinMode为 1(AUTH)时:- 用户调用 sendGroupJoinApplicationToGroupID 接口发起申请。
 
 
ZIMGroupJoinApplicationSendConfig config = new ZIMGroupJoinApplicationSendConfig();
config.wording = "请让我进群";
zim.sendGroupJoinApplication("groupID", config, new ZIMGroupJoinApplicationSentCallback() {
    @Override
    public void onGroupJoinApplicationSent(String groupID, ZIMError errorInfo){
        // 发送群申请结果回调
    }
});ZIMGroupJoinApplicationSendConfig config = new ZIMGroupJoinApplicationSendConfig();
config.wording = "请让我进群";
zim.sendGroupJoinApplication("groupID", config, new ZIMGroupJoinApplicationSentCallback() {
    @Override
    public void onGroupJoinApplicationSent(String groupID, ZIMError errorInfo){
        // 发送群申请结果回调
    }
});ZIMGroupJoinApplicationSendConfig sendConfig = ZIMGroupJoinApplicationSendConfig();
sendConfig.wording = '请让我进群';
try{
    var result = await ZIM.getInstance()!.sendGroupJoinApplication('groupID', sendConfig);
} on PlatformException catch (onError){
    onError.code;
    onError.message;
}ZIMGroupJoinApplicationSendConfig sendConfig = ZIMGroupJoinApplicationSendConfig();
sendConfig.wording = '请让我进群';
try{
    var result = await ZIM.getInstance()!.sendGroupJoinApplication('groupID', sendConfig);
} on PlatformException catch (onError){
    onError.code;
    onError.message;
}zim::ZIMGroupJoinApplicationSendConfig config;
config.wording = "wording";
zim_->sendGroupJoinApplication(
    group_id, config,
    [=](const std::string &groupID, const zim::ZIMError &errorInfo) {
        int error_code = errorInfo.code;
    });zim::ZIMGroupJoinApplicationSendConfig config;
config.wording = "wording";
zim_->sendGroupJoinApplication(
    group_id, config,
    [=](const std::string &groupID, const zim::ZIMError &errorInfo) {
        int error_code = errorInfo.code;
    });// 申请加入群组
const groupID = '';
const config: ZIMGroupJoinApplicationSendConfig = {
    wording: 'XXXX 申请加入群组' // 申请附言
};
zim.sendGroupJoinApplication(groupID, config)
    .then((res: ZIMGroupJoinApplicationSentResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// 申请加入群组
const groupID = '';
const config: ZIMGroupJoinApplicationSendConfig = {
    wording: 'XXXX 申请加入群组' // 申请附言
};
zim.sendGroupJoinApplication(groupID, config)
    .then((res: ZIMGroupJoinApplicationSentResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });ZIMGroupJoinApplicationSendConfig *config = [[ZIMGroupJoinApplicationSendConfig alloc] init];
config.wording = @"请让我进群";
[zim sendGroupJoinApplicationToGroupID:groupID config:config callback:^(NSString * _Nonnull groupID, ZIMError *errorInfo) {        
      // 发送群申请结果回调     
}];ZIMGroupJoinApplicationSendConfig *config = [[ZIMGroupJoinApplicationSendConfig alloc] init];
config.wording = @"请让我进群";
[zim sendGroupJoinApplicationToGroupID:groupID config:config callback:^(NSString * _Nonnull groupID, ZIMError *errorInfo) {        
      // 发送群申请结果回调     
}];- 群主或管理员通过监听 groupApplicationListChanged 事件,得知新增申请待处理。
 
// 监听 ongGoupApplicationListChanged 事件
zim.setEventHandler(new ZIMEventHandler(){
    public void onGroupApplicationListChanged(ZIM zim, ArrayList<ZIMGroupApplicationInfo> applicationList, ZIMGroupApplicationListChangeAction action) {
    // 群申请列表更新回调通知
    }
});// 监听 ongGoupApplicationListChanged 事件
zim.setEventHandler(new ZIMEventHandler(){
    public void onGroupApplicationListChanged(ZIM zim, ArrayList<ZIMGroupApplicationInfo> applicationList, ZIMGroupApplicationListChangeAction action) {
    // 群申请列表更新回调通知
    }
});ZIMEventHandler.onGroupApplicationListChanged = (ZIM zim,
  List<ZIMGroupApplicationInfo> applicationList,
  ZIMGroupApplicationListChangeAction action){}; ZIMEventHandler.onGroupApplicationListChanged = (ZIM zim,
  List<ZIMGroupApplicationInfo> applicationList,
  ZIMGroupApplicationListChangeAction action){}; void onGroupApplicationListChanged(
    zim::ZIM * /*zim*/, const std::vector<zim::ZIMGroupApplicationInfo> & /*applicationList*/,
    zim::ZIMGroupApplicationListChangeAction /*action*/) override {
        ......
}void onGroupApplicationListChanged(
    zim::ZIM * /*zim*/, const std::vector<zim::ZIMGroupApplicationInfo> & /*applicationList*/,
    zim::ZIMGroupApplicationListChangeAction /*action*/) override {
        ......
}// 监听 groupApplicationListChanged 事件
zim.on('groupApplicationListChanged', (zim: ZIM, data: ZIMEventOfGroupApplicationListChangedResult) => {
    // 新增了入群申请,此时可更新入群申请列表 UI
});// 监听 groupApplicationListChanged 事件
zim.on('groupApplicationListChanged', (zim: ZIM, data: ZIMEventOfGroupApplicationListChangedResult) => {
    // 新增了入群申请,此时可更新入群申请列表 UI
});// 监听 onGroupApplicationListChanged 事件
zim.onGroupApplicationListChanged((data) => {
    // 新增了入群申请,此时可更新入群申请列表 UI
});// 监听 onGroupApplicationListChanged 事件
zim.onGroupApplicationListChanged((data) => {
    // 新增了入群申请,此时可更新入群申请列表 UI
});// 监听 groupApplicationListChanged 事件
- (void)zim:(ZIM *)zim
groupApplicationListChanged:(NSArray<ZIMGroupApplicationInfo * > *)applicationList
      action:(ZIMGroupApplicationListChangeAction)action{
}      // 监听 groupApplicationListChanged 事件
- (void)zim:(ZIM *)zim
groupApplicationListChanged:(NSArray<ZIMGroupApplicationInfo * > *)applicationList
      action:(ZIMGroupApplicationListChangeAction)action{
}      - 群主或管理员审批
- 群主或管理员调用 acceptGroupJoinApplicationFromUserID 接口,同意用户入群,用户成功入群。
 
 
// 同意申请
ZIMGroupJoinApplicationAcceptConfig config = new ZIMGroupJoinApplicationAcceptConfig();
zim.acceptGroupJoinApplication("userID", "groupID", config, new ZIMGroupJoinApplicationAcceptedCallback(){
    public void onGroupJoinApplicationAccepted(String groupID, String userID, ZIMError errorInfo){
        // 同意申请结果回调
    };
});// 同意申请
ZIMGroupJoinApplicationAcceptConfig config = new ZIMGroupJoinApplicationAcceptConfig();
zim.acceptGroupJoinApplication("userID", "groupID", config, new ZIMGroupJoinApplicationAcceptedCallback(){
    public void onGroupJoinApplicationAccepted(String groupID, String userID, ZIMError errorInfo){
        // 同意申请结果回调
    };
});// 同意申请
try{
    ZIMGroupJoinApplicationAcceptConfig acceptConfig = ZIMGroupJoinApplicationAcceptConfig();
    var result = await ZIM.getInstance()!.acceptGroupJoinApplication('userID', 'groupID', acceptConfig);    
} on PlatformException catch (onError){
    onError.code;
    onError.message;
}// 同意申请
try{
    ZIMGroupJoinApplicationAcceptConfig acceptConfig = ZIMGroupJoinApplicationAcceptConfig();
    var result = await ZIM.getInstance()!.acceptGroupJoinApplication('userID', 'groupID', acceptConfig);    
} on PlatformException catch (onError){
    onError.code;
    onError.message;
}// 同意申请
zim::ZIMGroupJoinApplicationAcceptConfig config;
zim_->acceptGroupJoinApplication(
    user_id, group_id, config,
    [=](const std::string &groupID, const std::string &userID,
        const zim::ZIMError &errorInfo) {
        int error_code = errorInfo.code;
    });// 同意申请
zim::ZIMGroupJoinApplicationAcceptConfig config;
zim_->acceptGroupJoinApplication(
    user_id, group_id, config,
    [=](const std::string &groupID, const std::string &userID,
        const zim::ZIMError &errorInfo) {
        int error_code = errorInfo.code;
    });const userID = '';
const groupID = '';
const config: ZIMGroupJoinApplicationAcceptConfig = {};
zim.acceptGroupJoinApplication(userID, groupID, config)
    .then((res: ZIMGroupJoinApplicationAcceptedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });const userID = '';
const groupID = '';
const config: ZIMGroupJoinApplicationAcceptConfig = {};
zim.acceptGroupJoinApplication(userID, groupID, config)
    .then((res: ZIMGroupJoinApplicationAcceptedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// 同意申请
[zim acceptGroupJoinApplicationFromUserID:userID groupID:groupID config:config callback:^(NSString * _Nonnull groupID, NSString * _Nonnull userID, ZIMError * _Nonnull errorInfo) {
        // 同意申请结果回调
}];// 同意申请
[zim acceptGroupJoinApplicationFromUserID:userID groupID:groupID config:config callback:^(NSString * _Nonnull groupID, NSString * _Nonnull userID, ZIMError * _Nonnull errorInfo) {
        // 同意申请结果回调
}];- 群主或管理员调用 rejectGroupJoinApplicationFromUserID 接口,拒绝用户入群。
 
// 否决申请
ZIMGroupJoinApplicationRejectConfig config = new ZIMGroupJoinApplicationRejectConfig();
zim.rejectGroupJoinApplication("userID", "groupID", config, new ZIMGroupJoinApplicationRejectedCallback(){
    public void onGroupJoinApplicationRejected(String groupID, String userID, ZIMError errorInfo) {
        // 拒绝用户入群结果回调  
    }
});// 否决申请
ZIMGroupJoinApplicationRejectConfig config = new ZIMGroupJoinApplicationRejectConfig();
zim.rejectGroupJoinApplication("userID", "groupID", config, new ZIMGroupJoinApplicationRejectedCallback(){
    public void onGroupJoinApplicationRejected(String groupID, String userID, ZIMError errorInfo) {
        // 拒绝用户入群结果回调  
    }
});// 拒绝申请
try{
    ZIMGroupJoinApplicationRejectConfig rejectConfig = ZIMGroupJoinApplicationRejectConfig();
    var result = await ZIM.getInstance()!.rejectGroupJoinApplication('userID', 'groupID', rejectConfig);
} on PlatformException catch (onError){
    onError.code;
    onError.message;
}// 拒绝申请
try{
    ZIMGroupJoinApplicationRejectConfig rejectConfig = ZIMGroupJoinApplicationRejectConfig();
    var result = await ZIM.getInstance()!.rejectGroupJoinApplication('userID', 'groupID', rejectConfig);
} on PlatformException catch (onError){
    onError.code;
    onError.message;
}// 否决申请
zim::ZIMGroupJoinApplicationRejectConfig config;
zim_->rejectGroupJoinApplication(
    user_id, group_id, config,
    [=](const std::string &groupID, const std::string &userID, const zim::ZIMError &errorInfo) {
        int error_code = errorInfo.code;
    });// 否决申请
zim::ZIMGroupJoinApplicationRejectConfig config;
zim_->rejectGroupJoinApplication(
    user_id, group_id, config,
    [=](const std::string &groupID, const std::string &userID, const zim::ZIMError &errorInfo) {
        int error_code = errorInfo.code;
    });const userID = '';
const groupID = '';
const config: ZIMGroupJoinApplicationRejectConfig = {};
zim.rejectGroupJoinApplication(userID, groupID, config)
    .then((res: ZIMGroupJoinApplicationRejectedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });const userID = '';
const groupID = '';
const config: ZIMGroupJoinApplicationRejectConfig = {};
zim.rejectGroupJoinApplication(userID, groupID, config)
    .then((res: ZIMGroupJoinApplicationRejectedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// 否决申请
[zim rejectGroupJoinApplicationFromUserID:userID groupID:groupID config:config callback:^(NSString * _Nonnull groupID, NSString * _Nonnull userID, ZIMError * _Nonnull errorInfo) {
    // 否决申请结果回调
}];// 否决申请
[zim rejectGroupJoinApplicationFromUserID:userID groupID:groupID config:config callback:^(NSString * _Nonnull groupID, NSString * _Nonnull userID, ZIMError * _Nonnull errorInfo) {
    // 否决申请结果回调
}];- 入群申请人、群主、管理员和接口调用者会收到 groupApplicationUpdated 回调通知。
 
// 监听 onGroupApplicationUpdated 事件
zim.setEventHandler(new ZIMEventHandler(){
        public void onGroupApplicationUpdated(ZIM zim, ArrayList<ZIMGroupApplicationInfo> applicationList){
        //  群申请信息更新回调
        }
});// 监听 onGroupApplicationUpdated 事件
zim.setEventHandler(new ZIMEventHandler(){
        public void onGroupApplicationUpdated(ZIM zim, ArrayList<ZIMGroupApplicationInfo> applicationList){
        //  群申请信息更新回调
        }
});// 监听 onGroupApplicationUpdated 事件
ZIMEventHandler.onGroupApplicationUpdated = (ZIM zim,
    List<ZIMGroupApplicationInfo> applicationList){
};// 监听 onGroupApplicationUpdated 事件
ZIMEventHandler.onGroupApplicationUpdated = (ZIM zim,
    List<ZIMGroupApplicationInfo> applicationList){
};void onGroupApplicationUpdated(
    zim::ZIM * /*zim*/,
    const std::vector<zim::ZIMGroupApplicationInfo> & /*applicationList*/) override {
    ......
}void onGroupApplicationUpdated(
    zim::ZIM * /*zim*/,
    const std::vector<zim::ZIMGroupApplicationInfo> & /*applicationList*/) override {
    ......
}// 监听 groupApplicationUpdated 事件
zim.on('groupApplicationUpdated', (zim: ZIM, data: ZIMEventOfGroupApplicationUpdatedResult) => {
    // 入群申请有变更,此时可更新入群申请列表 UI
});// 监听 groupApplicationUpdated 事件
zim.on('groupApplicationUpdated', (zim: ZIM, data: ZIMEventOfGroupApplicationUpdatedResult) => {
    // 入群申请有变更,此时可更新入群申请列表 UI
});// 监听 onGroupApplicationUpdated 事件
zim.onGroupApplicationUpdated((data) => {
    // 入群申请有变更,此时可更新入群申请列表 UI
});// 监听 onGroupApplicationUpdated 事件
zim.onGroupApplicationUpdated((data) => {
    // 入群申请有变更,此时可更新入群申请列表 UI
});// 监听 groupApplicationUpdated 事件
- (void)zim:(ZIM *)zim groupApplicationUpdated:(NSArray<ZIMGroupApplicationInfo *> *)applicationList{
}// 监听 groupApplicationUpdated 事件
- (void)zim:(ZIM *)zim groupApplicationUpdated:(NSArray<ZIMGroupApplicationInfo *> *)applicationList{
}方式 2:由群内成员添加入群组(邀请入群)
- 群内用户可通过以下任意接口邀请用户入群:
 
请确认被邀请用户(以下称为“目标用户”)已通过 loginWithUserID 接口登录注册过,否则会操作失败。
- inviteUsersIntoGroup :直接邀请用户入群,无需对方同意。
 
开发者可以通过 ZIMGroupUsersInvitedResult,判断用户是否被成功加入到群组中。
// 由群内成员添加入群组
ArrayList<String> userList = new ArrayList<>();
userList.add("user_1");
userList.add("user_2");
zim.inviteUsersIntoGroup(userList, "group_id", new ZIMGroupUsersInvitedCallback() {
    @Override
    public void onGroupUsersInvited(ArrayList<ZIMGroupMemberInfo> userList, ArrayList<ZIMErrorUserInfo> errorUserList, ZIMError errorInfo) {
        // 通过 errorInfo.code 获取添加入群组的结果    
    }
});// 由群内成员添加入群组
ArrayList<String> userList = new ArrayList<>();
userList.add("user_1");
userList.add("user_2");
zim.inviteUsersIntoGroup(userList, "group_id", new ZIMGroupUsersInvitedCallback() {
    @Override
    public void onGroupUsersInvited(ArrayList<ZIMGroupMemberInfo> userList, ArrayList<ZIMErrorUserInfo> errorUserList, ZIMError errorInfo) {
        // 通过 errorInfo.code 获取添加入群组的结果    
    }
});Developers can use ZIMGroupUsersInvitedResult to determine whether the user has been successfully added to the group.
// 由群内成员添加入群组
List<String> userIDs = ['userID1', 'userID2'];
ZIM.getInstance()
!.inviteUsersIntoGroup(userIDs, 'groupID')
.then((value) => {
    //成功调用此处
})
.catchError((onError) {
    //失败调用此处
});// 由群内成员添加入群组
List<String> userIDs = ['userID1', 'userID2'];
ZIM.getInstance()
!.inviteUsersIntoGroup(userIDs, 'groupID')
.then((value) => {
    //成功调用此处
})
.catchError((onError) {
    //失败调用此处
});// 由群内成员添加入群组
std::vector<std::string> user_list;
user_list.push_back("user_1");
user_list.push_back("user_2");
zim_->inviteUsersIntoGroup(user_list, group_id, callback);// 由群内成员添加入群组
std::vector<std::string> user_list;
user_list.push_back("user_1");
user_list.push_back("user_2");
zim_->inviteUsersIntoGroup(user_list, group_id, callback);const groupID = '';
// 由群内成员添加入群组
const userIDs = [];
zim.inviteUsersIntoGroup(userIDs, groupID)
  .then((res: ZIMGroupUsersInvitedResult) => {
      // 操作成功
  })
  .catch((err: ZIMError) => {
      // 操作失败
  });const groupID = '';
// 由群内成员添加入群组
const userIDs = [];
zim.inviteUsersIntoGroup(userIDs, groupID)
  .then((res: ZIMGroupUsersInvitedResult) => {
      // 操作成功
  })
  .catch((err: ZIMError) => {
      // 操作失败
  });// 由群内成员添加入群组
[zim inviteUsersIntoGroup:userIDs groupID:groupID callback:^(NSArray<ZIMGroupMemberInfo *> * _Nonnull userList, NSArray<ZIMErrorUserInfo *> * _Nonnull errorUserList, ZIMError * _Nonnull errorInfo) {
    //这里写调用邀请入群接口后的业务逻辑
}];// 由群内成员添加入群组
[zim inviteUsersIntoGroup:userIDs groupID:groupID callback:^(NSArray<ZIMGroupMemberInfo *> * _Nonnull userList, NSArray<ZIMErrorUserInfo *> * _Nonnull errorUserList, ZIMError * _Nonnull errorInfo) {
    //这里写调用邀请入群接口后的业务逻辑
}];- sendGroupJoinApplicationToGroupID :向用户发起入群邀请申请。
 
// 发送邀请入群申请
ZIMGroupInviteApplicationSendConfig config = new ZIMGroupInviteApplicationSendConfig();
config.wording = "请加入我的群吧";
List<String> userIDs = new ArrList<String>();
userIDs.add("user1");
userIDs.add("user2");
zim.sendGroupInviteApplications(userIDs, "groupID", config, new ZIMGroupInviteApplicationsSentCallback(){
    public void onGroupInviteApplicationsSent(String groupID, ArrayList<ZIMErrorUserInfo> errorUserList, ZIMError errorInfo){
        // 发起群邀请结果回调
    }
});// 发送邀请入群申请
ZIMGroupInviteApplicationSendConfig config = new ZIMGroupInviteApplicationSendConfig();
config.wording = "请加入我的群吧";
List<String> userIDs = new ArrList<String>();
userIDs.add("user1");
userIDs.add("user2");
zim.sendGroupInviteApplications(userIDs, "groupID", config, new ZIMGroupInviteApplicationsSentCallback(){
    public void onGroupInviteApplicationsSent(String groupID, ArrayList<ZIMErrorUserInfo> errorUserList, ZIMError errorInfo){
        // 发起群邀请结果回调
    }
});// 发送邀请入群申请
ZIMGroupInviteApplicationSendConfig config = ZIMGroupInviteApplicationSendConfig();
config.wording = 'xxx邀请你加入群聊';
ZIMGroupInviteApplicationSendConfig applicationSendConfig = ZIMGroupInviteApplicationSendConfig();
try{
    var result = await ZIM.getInstance()!.sendGroupInviteApplications(['userID1','userID2'], 'groupID', config);
} on PlatformException catch (onError) {
    onError.code;
    onError.message;
} // 发送邀请入群申请
ZIMGroupInviteApplicationSendConfig config = ZIMGroupInviteApplicationSendConfig();
config.wording = 'xxx邀请你加入群聊';
ZIMGroupInviteApplicationSendConfig applicationSendConfig = ZIMGroupInviteApplicationSendConfig();
try{
    var result = await ZIM.getInstance()!.sendGroupInviteApplications(['userID1','userID2'], 'groupID', config);
} on PlatformException catch (onError) {
    onError.code;
    onError.message;
} // 发送邀请入群申请
std::vector<std::string> user_list;
user_list.push_back("user_1");
user_list.push_back("user_2");
zim::ZIMGroupInviteApplicationSendConfig config;
config.wording = "wording";
zim_->sendGroupInviteApplications(
    user_list, group_id, config,
    [=](const std::string &groupID, const std::vector<zim::ZIMErrorUserInfo> &errorUserList,
        const zim::ZIMError &errorInfo) {
        int error_code = errorInfo.code;
    });// 发送邀请入群申请
std::vector<std::string> user_list;
user_list.push_back("user_1");
user_list.push_back("user_2");
zim::ZIMGroupInviteApplicationSendConfig config;
config.wording = "wording";
zim_->sendGroupInviteApplications(
    user_list, group_id, config,
    [=](const std::string &groupID, const std::vector<zim::ZIMErrorUserInfo> &errorUserList,
        const zim::ZIMError &errorInfo) {
        int error_code = errorInfo.code;
    });// 发送邀请入群申请
const userIDs = [];
const groupID = '';
const config: ZIMGroupInviteApplicationSendConfig = {
    wording: '邀请加入群组' // 申请附言
};
zim.sendGroupInviteApplications(userIDs, groupID, config)
    .then((res: ZIMGroupInviteApplicationsSentResult) => {
        // 操作成功,邀请失败的用户通过 errorUserList 获取 
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// 发送邀请入群申请
const userIDs = [];
const groupID = '';
const config: ZIMGroupInviteApplicationSendConfig = {
    wording: '邀请加入群组' // 申请附言
};
zim.sendGroupInviteApplications(userIDs, groupID, config)
    .then((res: ZIMGroupInviteApplicationsSentResult) => {
        // 操作成功,邀请失败的用户通过 errorUserList 获取 
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// 发送邀请入群申请
ZIMGroupInviteApplicationSendConfig *config = [[ZIMGroupInviteApplicationSendConfig alloc] init];
config.wording = @"xxx邀请你加入群聊";
[zim sendGroupInviteApplicationsToUserIDs:@[@"userID1",@"userID2"] groupID:@"groupID" config:config callback:^(NSString * _Nonnull groupID, NSArray<ZIMErrorUserInfo *> * _Nonnull errorUserList, ZIMError * _Nonnull errorInfo) {
}];   // 发送邀请入群申请
ZIMGroupInviteApplicationSendConfig *config = [[ZIMGroupInviteApplicationSendConfig alloc] init];
config.wording = @"xxx邀请你加入群聊";
[zim sendGroupInviteApplicationsToUserIDs:@[@"userID1",@"userID2"] groupID:@"groupID" config:config callback:^(NSString * _Nonnull groupID, NSArray<ZIMErrorUserInfo *> * _Nonnull errorUserList, ZIMError * _Nonnull errorInfo) {
}];   根据群组的 inviteMode 和 beInviteMode ,以及调用用户的群组角色,接口调用效果如下表所示:
| beInviteMode | inviteMode | 调用接口 | 调用角色 | 结果 | 
|---|---|---|---|---|
| 0:NONE | 0:ANY | inviteUsersIntoGroup | 所有群成员 | 被邀请人自动成为群成员。 | 
| sendGroupInviteApplications | 被邀请人自动成为群成员,且不产生邀请入群申请记录。 | |||
| 1:ADMIN | inviteUsersIntoGroup | 普通成员 | 失败。 | |
| 群主或管理员 | 被邀请人自动成为群成员。 | |||
| sendGroupInviteApplications | 普通成员 | 失败。 | ||
| 群主或管理员 | 被邀请人自动成为群成员,且不产生邀请入群申请记录。 | |||
| 1:AUTH | 0:ANY | inviteUsersIntoGroup | 所有群成员 | 产生邀请入群申请记录,等待目标用户做出反应。 | 
| sendGroupInviteApplications | 产生邀请入群申请记录,等待目标用户做出反应。此外,如果调用者为群主或管理员时,会收到 onGroupApplicationListChanged。 | |||
| 1:ADMIN | inviteUsersIntoGroup | 普通成员 | 失败。 | |
| 群主或管理员 | 产生邀请入群申请记录,等待目标用户做出反应。 | |||
| sendGroupInviteApplications | 普通成员 | 失败。 | ||
| 群主或管理员 | 产生邀请入群申请记录,等待目标用户做出反应。此外,如果调用者为群主或管理员时,会收到 onGroupApplicationListChanged。 | 
- beInviteMode 为 1(AUTH)时,目标用户和邀请人(仅当接口调用人为群主和群管理员时)会通过 groupApplicationListChanged 收到回调通知。目标用户需要审批该申请。
 
- 目标用户调用 acceptGroupJoinApplicationFromUserID 接口,同意入群,成为群成员。
 
// 同意邀请入群申请
ZIMGroupInviteApplicationAcceptConfig config = new ZIMGroupInviteApplicationAcceptConfig();
zim.acceptGroupInviteApplication("inviterUserID", "groupID", config, new ZIMGroupInviteApplicationAcceptedCallback(){
    public void onGroupInviteApplicationAccepted(ZIMGroupFullInfo groupInfo, String inviterUserID, ZIMError errorInfo){
        // 同意群邀请结果回调
    }
});// 同意邀请入群申请
ZIMGroupInviteApplicationAcceptConfig config = new ZIMGroupInviteApplicationAcceptConfig();
zim.acceptGroupInviteApplication("inviterUserID", "groupID", config, new ZIMGroupInviteApplicationAcceptedCallback(){
    public void onGroupInviteApplicationAccepted(ZIMGroupFullInfo groupInfo, String inviterUserID, ZIMError errorInfo){
        // 同意群邀请结果回调
    }
});try{
    ZIMGroupInviteApplicationAcceptConfig acceptConfig = ZIMGroupInviteApplicationAcceptConfig();
    var result = await ZIM.getInstance()!.acceptGroupInviteApplication('inviterUserID', 'groupID', acceptConfig); 
} on PlatformException catch(onError){
    onError.code;
    onError.message;
}try{
    ZIMGroupInviteApplicationAcceptConfig acceptConfig = ZIMGroupInviteApplicationAcceptConfig();
    var result = await ZIM.getInstance()!.acceptGroupInviteApplication('inviterUserID', 'groupID', acceptConfig); 
} on PlatformException catch(onError){
    onError.code;
    onError.message;
}// 同意邀请入群申请
zim::ZIMGroupInviteApplicationAcceptConfig config;
zim_->acceptGroupInviteApplication(
    user_id, group_id, config,
    [=](const zim::ZIMGroupFullInfo &group, const std::string &inviterUserID,
        const zim::ZIMError &errorInfo) {
        int error_code = errorInfo.code;
    });// 同意邀请入群申请
zim::ZIMGroupInviteApplicationAcceptConfig config;
zim_->acceptGroupInviteApplication(
    user_id, group_id, config,
    [=](const zim::ZIMGroupFullInfo &group, const std::string &inviterUserID,
        const zim::ZIMError &errorInfo) {
        int error_code = errorInfo.code;
    });const inviterUserID = '';
const groupID = '';
// 同意邀请入群申请
const config: ZIMGroupInviteApplicationAcceptConfig = {};
zim.acceptGroupInviteApplication(inviterUserID, groupID, config)
    .then((res: ZIMGroupInviteApplicationAcceptedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    }); const inviterUserID = '';
const groupID = '';
// 同意邀请入群申请
const config: ZIMGroupInviteApplicationAcceptConfig = {};
zim.acceptGroupInviteApplication(inviterUserID, groupID, config)
    .then((res: ZIMGroupInviteApplicationAcceptedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    }); [zim acceptGroupInviteApplicationFromInviterUserID:inviterUserID groupID:groupID config:config callback:^(ZIMGroupFullInfo * _Nonnull groupInfo, NSString * _Nonnull inviterUserID, ZIMError * _Nonnull errorInfo) {
}];[zim acceptGroupInviteApplicationFromInviterUserID:inviterUserID groupID:groupID config:config callback:^(ZIMGroupFullInfo * _Nonnull groupInfo, NSString * _Nonnull inviterUserID, ZIMError * _Nonnull errorInfo) {
}];- 目标用户调用 rejectGroupJoinApplicationFromUserID 接口,拒绝入群邀请。
 
// 拒绝邀请入群申请
ZIMGroupInviteApplicationRejectConfig config = new ZIMGroupInviteApplicationRejectConfig();
zim.rejectGroupInviteApplication("inviterUserID", "groupID", config, new ZIMGroupInviteApplicationRejectedCallback(){
    public void onGroupInviteApplicationRejected(String groupID, String inviterUserID, ZIMError errorInfo) {
            //  拒绝群邀请结果回调
    }
});// 拒绝邀请入群申请
ZIMGroupInviteApplicationRejectConfig config = new ZIMGroupInviteApplicationRejectConfig();
zim.rejectGroupInviteApplication("inviterUserID", "groupID", config, new ZIMGroupInviteApplicationRejectedCallback(){
    public void onGroupInviteApplicationRejected(String groupID, String inviterUserID, ZIMError errorInfo) {
            //  拒绝群邀请结果回调
    }
});try{
    ZIMGroupInviteApplicationRejectConfig rejectConfig = ZIMGroupInviteApplicationRejectConfig();
    var result = await ZIM.getInstance()!.rejectGroupInviteApplication('inviterUserID', 'groupID', rejectConfig);
} on PlatformException catch(onError){
    onError.code;
    onError.message;
}try{
    ZIMGroupInviteApplicationRejectConfig rejectConfig = ZIMGroupInviteApplicationRejectConfig();
    var result = await ZIM.getInstance()!.rejectGroupInviteApplication('inviterUserID', 'groupID', rejectConfig);
} on PlatformException catch(onError){
    onError.code;
    onError.message;
}// 拒绝邀请入群申请
zim::ZIMGroupInviteApplicationRejectConfig config;
zim_->rejectGroupInviteApplication(
      user_id, group_id, config,
    [=](const std::string &groupID, const std::string &inviterUserID,
        const zim::ZIMError &errorInfo) {
        int error_code = errorInfo.code;
    });// 拒绝邀请入群申请
zim::ZIMGroupInviteApplicationRejectConfig config;
zim_->rejectGroupInviteApplication(
      user_id, group_id, config,
    [=](const std::string &groupID, const std::string &inviterUserID,
        const zim::ZIMError &errorInfo) {
        int error_code = errorInfo.code;
    });const inviterUserID = '';
const groupID = '';
// 拒绝邀请入群申请
const config: ZIMGroupInviteApplicationRejectConfig = {};
zim.rejectGroupInviteApplication(inviterUserID, groupID, config)
    .then((res: ZIMGroupInviteApplicationRejectedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });const inviterUserID = '';
const groupID = '';
// 拒绝邀请入群申请
const config: ZIMGroupInviteApplicationRejectConfig = {};
zim.rejectGroupInviteApplication(inviterUserID, groupID, config)
    .then((res: ZIMGroupInviteApplicationRejectedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });[zim rejectGroupInviteApplicationFromInviterUserID:inviterUserID groupID:groupID config:config callback:^(NSString * _Nonnull groupID, NSString * _Nonnull inviterUserID, ZIMError * _Nonnull errorInfo) {
}];[zim rejectGroupInviteApplicationFromInviterUserID:inviterUserID groupID:groupID config:config callback:^(NSString * _Nonnull groupID, NSString * _Nonnull inviterUserID, ZIMError * _Nonnull errorInfo) {
}];- beInviteMode 为 1(AUTH)时,该用户和邀请人(仅当接口调用人为群主和群管理员时)会通过 groupApplicationUpdated 收到回调通知上述审批事件。
 
zim.setEventHandler(new ZIMEventHandler(){
    public void onGroupApplicationUpdated(ZIM zim,
                                        ArrayList<ZIMGroupApplicationInfo> applicationList) {
            // 群申请更新回调通知
      }
});zim.setEventHandler(new ZIMEventHandler(){
    public void onGroupApplicationUpdated(ZIM zim,
                                        ArrayList<ZIMGroupApplicationInfo> applicationList) {
            // 群申请更新回调通知
      }
});ZIMEventHandler.onGroupApplicationUpdated = (ZIM zim,
List<ZIMGroupApplicationInfo> applicationList){
};ZIMEventHandler.onGroupApplicationUpdated = (ZIM zim,
List<ZIMGroupApplicationInfo> applicationList){
};// 监听 onGroupApplicationUpdated
void onGroupApplicationUpdated(
    zim::ZIM * /*zim*/,
    const std::vector<zim::ZIMGroupApplicationInfo> & /*applicationList*/) override {
    ......
}// 监听 onGroupApplicationUpdated
void onGroupApplicationUpdated(
    zim::ZIM * /*zim*/,
    const std::vector<zim::ZIMGroupApplicationInfo> & /*applicationList*/) override {
    ......
}// 监听 groupApplicationUpdated 事件
zim.on('groupApplicationUpdated', (zim: ZIM, data: ZIMEventOfGroupApplicationUpdatedResult) => {
    // 入群申请有变更,此时可更新入群申请列表 UI
});// 监听 groupApplicationUpdated 事件
zim.on('groupApplicationUpdated', (zim: ZIM, data: ZIMEventOfGroupApplicationUpdatedResult) => {
    // 入群申请有变更,此时可更新入群申请列表 UI
});// 监听 onGroupApplicationUpdated 事件
zim.onGroupApplicationUpdated((data) => {
    // 入群申请有变更,此时可更新入群申请列表 UI
});// 监听 onGroupApplicationUpdated 事件
zim.onGroupApplicationUpdated((data) => {
    // 入群申请有变更,此时可更新入群申请列表 UI
});- (void)zim:(ZIM *)zim groupApplicationUpdated:(NSArray<ZIMGroupApplicationInfo *> *)applicationList{
        
}- (void)zim:(ZIM *)zim groupApplicationUpdated:(NSArray<ZIMGroupApplicationInfo *> *)applicationList{
        
}退出群组
成员退出群组也存在两种方式(二选一),主动退出和被提出群组。
用户退出群组后,不会清除本地的会话列表,还可以看到退出之前的群内聊天记录。
方式 1:主动退出群组
成员登录 ZIM SDK 后,直接调用 leaveGroup 接口,传入 groupID(groupID 必须已经存在,否则会操作失败),主动退出群组。退出成功后,全体群成员(包括自己)都会收到 groupMemberStateChanged 的回调通知。
群主退出群组时,群主身份将自动转让给加入本群组最早的那个成员;所有成员退出群组时,群组自动解散。
// 主动退出群组
zim.leaveGroup("groupID", new ZIMGroupLeftCallback() {
    @Override
    public void onGroupLeft(ZIMError errorInfo) {
        // 通过 errorInfo.code 获取主动退出群组的结果     
    }
});// 主动退出群组
zim.leaveGroup("groupID", new ZIMGroupLeftCallback() {
    @Override
    public void onGroupLeft(ZIMError errorInfo) {
        // 通过 errorInfo.code 获取主动退出群组的结果     
    }
});Developers can use ZIMGroupLeftResult to determine whether the member successfully left the group.
// 主动退出群组
ZIM.getInstance()
  !.leaveGroup('groupID')
   .then((value){
       //成功触发此处
   })
   .catchError((onError) {
       //失败触发此处
   });// 主动退出群组
ZIM.getInstance()
  !.leaveGroup('groupID')
   .then((value){
       //成功触发此处
   })
   .catchError((onError) {
       //失败触发此处
   });// 主动退出群组
zim_->leaveGroup(group_id, [=](const std::string &groupID, zim::ZIMError errorInfo){
    int error_code = errorInfo.code;
    
});// 主动退出群组
zim_->leaveGroup(group_id, [=](const std::string &groupID, zim::ZIMError errorInfo){
    int error_code = errorInfo.code;
    
});const groupID = '';
// 主动退出群组
zim.leaveGroup(groupID)
    .then((res: ZIMGroupLeftResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });const groupID = '';
// 主动退出群组
zim.leaveGroup(groupID)
    .then((res: ZIMGroupLeftResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// 主动退出群组
[zim leaveGroup:groupID callback:^(ZIMError * _Nonnull errorInfo) {
        //这里写调用离开群组接口后的业务逻辑
}];// 主动退出群组
[zim leaveGroup:groupID callback:^(ZIMError * _Nonnull errorInfo) {
        //这里写调用离开群组接口后的业务逻辑
}];方式 2:群主移除群内成员
群主调用 kickGroupMembers 接口,传入 groupID(groupID 必须已经存在,否则会操作失败)、userIDs(需要被移除的成员列表),移除这些成员。移除成功后,全体群成员(包括群主自己、被移除的成员)都会收到 groupMemberStateChanged 的回调通知。
开发者可以通过 ZIMGroupMemberKickedResult,判断用户是否被成功移除。
- 只有群主和管理员可以调用 kickGroupMembers 接口,移除群内成员;且移除成员时,该成员无需登录在线,也无需经过该成员同意,即可直接移除。
 - 被移除的用户 userID,必须是存在于本群组的成员列表内,否则会操作失败。
 
// 群主移除群内成员
ArrayList<String> user_list = new ArrayList<>();
user_list.add("user_1");
user_list.add("user_2");
zim.kickGroupMembers(user_list, "groupID", new ZIMGroupMemberKickedCallback() {
    @Override
    public void onGroupMemberKicked(ArrayList<String> kickedUserIDList, ArrayList<ZIMErrorUserInfo> errorUserList, ZIMError errorInfo) {
        // 通过 errorInfo.code 获取移除群成员的结果     
    }
});// 群主移除群内成员
ArrayList<String> user_list = new ArrayList<>();
user_list.add("user_1");
user_list.add("user_2");
zim.kickGroupMembers(user_list, "groupID", new ZIMGroupMemberKickedCallback() {
    @Override
    public void onGroupMemberKicked(ArrayList<String> kickedUserIDList, ArrayList<ZIMErrorUserInfo> errorUserList, ZIMError errorInfo) {
        // 通过 errorInfo.code 获取移除群成员的结果     
    }
});// 群主移除群内成员
ZIM.getInstance()
  !.kickGroupMembers(userIDs, 'groupID')
   .then((value){
       //成功触发此处
   })
   .catchError((onError) {
       //失败触发此处
   });// 群主移除群内成员
ZIM.getInstance()
  !.kickGroupMembers(userIDs, 'groupID')
   .then((value){
       //成功触发此处
   })
   .catchError((onError) {
       //失败触发此处
   });// 群主移除群内成员
std::vector<std::string> user_list;
user_list.push_back("user_1");
user_list.push_back("user_2");
zim_->kickGroupMembers(user_list, group_id, 
    [=](const std::string &groupID, const std::vector<std::string> &kickedMemberIDs,
    const std::vector<ZIMErrorUser> &errorUserList, zim::ZIMError errorInfo) {
        int error_code = errorInfo.code;
    });// 群主移除群内成员
std::vector<std::string> user_list;
user_list.push_back("user_1");
user_list.push_back("user_2");
zim_->kickGroupMembers(user_list, group_id, 
    [=](const std::string &groupID, const std::vector<std::string> &kickedMemberIDs,
    const std::vector<ZIMErrorUser> &errorUserList, zim::ZIMError errorInfo) {
        int error_code = errorInfo.code;
    });const groupID = '';
// 群主或管理员移除群内成员
const userIDs = [];
zim.kickGroupMembers(userIDs, groupID)
    .then((res: ZIMGroupMemberKickedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });const groupID = '';
// 群主或管理员移除群内成员
const userIDs = [];
zim.kickGroupMembers(userIDs, groupID)
    .then((res: ZIMGroupMemberKickedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// 群主移除群内成员
[zim kickGroupMembers:userIDs groupID:groupID callback:^(NSArray<NSString *> * _Nonnull kickedUserIDList, NSArray<ZIMErrorUserInfo *> * _Nonnull errorUserList, ZIMError * _Nonnull errorInfo) {
        //这里写调用群主移除群内成员接口后的业务逻辑 
}];// 群主移除群内成员
[zim kickGroupMembers:userIDs groupID:groupID callback:^(NSArray<NSString *> * _Nonnull kickedUserIDList, NSArray<ZIMErrorUserInfo *> * _Nonnull errorUserList, ZIMError * _Nonnull errorInfo) {
        //这里写调用群主移除群内成员接口后的业务逻辑 
}];解散群组
群主登录 ZIM SDK 后,如果想要解散群组,可以通过 dismissGroup 接口,解散群组。解散群组成功后,全体群成员都会收到 groupStateChanged 回调通知。
开发者可以通过 ZIMGroupDismissedResult,判断解散群组是否成功。
- 只有群主才能调用 dismissGroup 接口,解散群组。
 - 所有成员退出群组时,群组将自动解散。
 - 群组解散后,不会清除本地的会话列表,用户还可以看到退出之前的群内聊天记录。
 
// 群主解散群组
zim.dismissGroup("groupID", new ZIMGroupDismissedCallback() {
    @Override
    public void onGroupDismissed(ZIMError errorInfo) {
        // 通过 errorInfo.code 获取群主解散群组的结果
    }
});// 群主解散群组
zim.dismissGroup("groupID", new ZIMGroupDismissedCallback() {
    @Override
    public void onGroupDismissed(ZIMError errorInfo) {
        // 通过 errorInfo.code 获取群主解散群组的结果
    }
});// 群主解散群组
ZIM.getInstance()
  !.dismissGroup('groupID')
   .then((value){
       //成功触发此处
   })
   .catchError((onError) {
       //失败触发此处
   });// 群主解散群组
ZIM.getInstance()
  !.dismissGroup('groupID')
   .then((value){
       //成功触发此处
   })
   .catchError((onError) {
       //失败触发此处
   });// 群主解散群组
zim_->dismissGroup(group_id, [=](const std::string &groupID, zim::ZIMError errorInfo) {
    int error_code = errorInfo.code;
});// 群主解散群组
zim_->dismissGroup(group_id, [=](const std::string &groupID, zim::ZIMError errorInfo) {
    int error_code = errorInfo.code;
});const groupID = '';
zim.dismissGroup(groupID)
    .then((res: ZIMGroupDismissedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });
// 注册监听“群状态变更”的回调
zim.on('groupStateChanged', (zim: ZIM, data: ZIMEventOfGroupStateChangedResult) => {
    console.log('groupStateChanged', data);
});const groupID = '';
zim.dismissGroup(groupID)
    .then((res: ZIMGroupDismissedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });
// 注册监听“群状态变更”的回调
zim.on('groupStateChanged', (zim: ZIM, data: ZIMEventOfGroupStateChangedResult) => {
    console.log('groupStateChanged', data);
});const groupID = '';
zim.dismissGroup(groupID)
    .then((res: ZIMGroupDismissedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });
// 注册监听“群状态变更”的回调
zim.onGroupStateChanged((data) => {
    console.log('groupStateChanged', data);
});const groupID = '';
zim.dismissGroup(groupID)
    .then((res: ZIMGroupDismissedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });
// 注册监听“群状态变更”的回调
zim.onGroupStateChanged((data) => {
    console.log('groupStateChanged', data);
});// 群主解散群组
[zim dismissGroup:groupID callback:^(ZIMError * _Nonnull errorInfo) {
        // 这里写调用解散群接口后的业务代码
 }];// 群主解散群组
[zim dismissGroup:groupID callback:^(ZIMError * _Nonnull errorInfo) {
        // 这里写调用解散群接口后的业务代码
 }];更多功能
查询已加入群组列表
用户登录 ZIM SDK 后,如果想要了解自己加入了哪些群组,可以通过 queryGroupList 接口,获取自己已加入的群组列表。
// 用户查询自己加入了哪些群组
zim.queryGroupList(new ZIMGroupListQueriedCallback() {
    @Override
    public void onGroupListQueried(ArrayList<ZIMGroupInfo> groupList, ZIMError errorInfo) {
        // 通过 errorInfo.code 获取用户加入的群组结果
    }
});// 用户查询自己加入了哪些群组
zim.queryGroupList(new ZIMGroupListQueriedCallback() {
    @Override
    public void onGroupListQueried(ArrayList<ZIMGroupInfo> groupList, ZIMError errorInfo) {
        // 通过 errorInfo.code 获取用户加入的群组结果
    }
});开发者可以通过 ZIMGroupListQueriedResult,获取查询结果。
// 用户查询自己加入了哪些群组
ZIM.getInstance()
  !.queryGroupList()
   .then((value){
       //成功触发此处
   })
   .catchError((onError) {
       //失败触发此处
   });// 用户查询自己加入了哪些群组
ZIM.getInstance()
  !.queryGroupList()
   .then((value){
       //成功触发此处
   })
   .catchError((onError) {
       //失败触发此处
   });// 用户查询自己加入了哪些群组
zim_->queryGroupList(
    [=](const std::vector<ZIMGroupInfo> &groupList, zim::ZIMError errorInfo){
        int error_code = errorInfo.code;
    });// 用户查询自己加入了哪些群组
zim_->queryGroupList(
    [=](const std::vector<ZIMGroupInfo> &groupList, zim::ZIMError errorInfo){
        int error_code = errorInfo.code;
    });zim.queryGroupList()
    .then((res: ZIMGroupListQueriedResult) => {
        // 查询成功
    })
    .catch((err: ZIMError) => {
        // 查询失败
    });zim.queryGroupList()
    .then((res: ZIMGroupListQueriedResult) => {
        // 查询成功
    })
    .catch((err: ZIMError) => {
        // 查询失败
    });// 用户查询自己加入了哪些群组
[zim queryGroupListByGroupID:^(NSArray<ZIMGroupInfo *> * _Nonnull groupList, ZIMError * _Nonnull errorInfo) {
    //这里写调用查询群列表接口后的业务代码
}];// 用户查询自己加入了哪些群组
[zim queryGroupListByGroupID:^(NSArray<ZIMGroupInfo *> * _Nonnull groupList, ZIMError * _Nonnull errorInfo) {
    //这里写调用查询群列表接口后的业务代码
}];搜索已加入群组
用户登录 ZIM SDK 后,如果想要根据条件对已加入的群组进行搜索,可以调用 searchLocalGroupsWithConfig 接口,传入 config、callback 搜索群组。
搜索结果将通过 ZIMGroupsSearchedCallback 回调接口返回。
// 搜索名称中包含 “zego” 的已加入群组
ZIM zim = getZIM();
ZIMGroupMemberSearchConfig config = new ZIMGroupMemberSearchConfig();
config.count = 10;
config.nextFlag = 0;
config.isAlsoMatchGroupMemberNickname = true; // 如果群成员昵称包含 “zego”,搜索结果将包含该群组
config.isAlsoMatchGroupMemberUserName = true; // 如果群成员用户名称包含 ”zego“,搜索结果将包含该群组
config.keywords.add("zego");
zim.searchLocalGroups(config, new ZIMGroupsSearchedCallback() {
    @Override
    public void onGroupsSearched(ArrayList<ZIMGroupSearchInfo> groupSearchInfoList, int nextFlag, ZIMError errorInfo) {
          // 开发者可从 groupSearchInfoList 中获取到群组信息              
    }
});// 搜索名称中包含 “zego” 的已加入群组
ZIM zim = getZIM();
ZIMGroupMemberSearchConfig config = new ZIMGroupMemberSearchConfig();
config.count = 10;
config.nextFlag = 0;
config.isAlsoMatchGroupMemberNickname = true; // 如果群成员昵称包含 “zego”,搜索结果将包含该群组
config.isAlsoMatchGroupMemberUserName = true; // 如果群成员用户名称包含 ”zego“,搜索结果将包含该群组
config.keywords.add("zego");
zim.searchLocalGroups(config, new ZIMGroupsSearchedCallback() {
    @Override
    public void onGroupsSearched(ArrayList<ZIMGroupSearchInfo> groupSearchInfoList, int nextFlag, ZIMError errorInfo) {
          // 开发者可从 groupSearchInfoList 中获取到群组信息              
    }
});// 搜索名称中包含 “zego” 的已加入群组
ZIMGroupSearchConfig config =  ZIMGroupSearchConfig();
config.count = 10;
config.nextFlag = 0;
config.isAlsoMatchGroupMemberNickname = true; // 如果群成员昵称包含 “zego”,搜索结果将包含该群组。
config.isAlsoMatchGroupMemberUserName = true; // 如果群成员用户名称包含 “zego”,搜索结果将包含该群组。
config.keywords.add("zego");
ZIM.getInstance()!.searchLocalGroups(config).then((result){
    // 开发者可从 groupSearchInfoList 中获取到群组信息    
}).catchError((onError){
    // 根据官网错误码表处理
});// 搜索名称中包含 “zego” 的已加入群组
ZIMGroupSearchConfig config =  ZIMGroupSearchConfig();
config.count = 10;
config.nextFlag = 0;
config.isAlsoMatchGroupMemberNickname = true; // 如果群成员昵称包含 “zego”,搜索结果将包含该群组。
config.isAlsoMatchGroupMemberUserName = true; // 如果群成员用户名称包含 “zego”,搜索结果将包含该群组。
config.keywords.add("zego");
ZIM.getInstance()!.searchLocalGroups(config).then((result){
    // 开发者可从 groupSearchInfoList 中获取到群组信息    
}).catchError((onError){
    // 根据官网错误码表处理
});// 搜索名称中包含 “zego” 的已加入群组
auto searchConfig = zim::ZIMGroupSearchConfig();
searchConfig.count = 10;
searchConfig.nextFlag = 0;
// 如果群成员昵称包含 “zego” ,搜索结果将包含该群组
searchConfig.isAlsoMatchGroupMemberNickname = true;
// 如果群成员用户名称包含 “zego” ,搜索结果将包含该群组
searchConfig.isAlsoMatchGroupMemberUserName = true;
searchConfig.keywords.emplace_back("zego");
zim_->searchLocalGroups(searchConfig,
                        [=](const std::vector<zim::ZIMGroupSearchInfo> &groupSearchInfoList,
                            unsigned int nextFlag, const zim::ZIMError &errorInfo) {
                            // 开发者可从 groupSearchInfoList 中获取到群组信息
                        });// 搜索名称中包含 “zego” 的已加入群组
auto searchConfig = zim::ZIMGroupSearchConfig();
searchConfig.count = 10;
searchConfig.nextFlag = 0;
// 如果群成员昵称包含 “zego” ,搜索结果将包含该群组
searchConfig.isAlsoMatchGroupMemberNickname = true;
// 如果群成员用户名称包含 “zego” ,搜索结果将包含该群组
searchConfig.isAlsoMatchGroupMemberUserName = true;
searchConfig.keywords.emplace_back("zego");
zim_->searchLocalGroups(searchConfig,
                        [=](const std::vector<zim::ZIMGroupSearchInfo> &groupSearchInfoList,
                            unsigned int nextFlag, const zim::ZIMError &errorInfo) {
                            // 开发者可从 groupSearchInfoList 中获取到群组信息
                        });// 搜索名称中包含 “zego” 的已加入群组
const config: ZIMGroupSearchConfig = {
    count: 10, // 搜索结果数量
    nextFlag: 0,
    keywords: ['zego'], // 设置关键词为 “zego”,最多支持 5 个。当设置多个关键词后,搜索结果只展示同时包含所有关键词的本地消息
    isAlsoMatchGroupMemberUserName: true, // 如果群成员用户名称包含 “zego”,搜索结果将包含该群成员
    isAlsoMatchGroupMemberNickname: false,
};
zim.searchLocalGroups(config)
    .then((res: ZIMGroupsSearchedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// 搜索名称中包含 “zego” 的已加入群组
const config: ZIMGroupSearchConfig = {
    count: 10, // 搜索结果数量
    nextFlag: 0,
    keywords: ['zego'], // 设置关键词为 “zego”,最多支持 5 个。当设置多个关键词后,搜索结果只展示同时包含所有关键词的本地消息
    isAlsoMatchGroupMemberUserName: true, // 如果群成员用户名称包含 “zego”,搜索结果将包含该群成员
    isAlsoMatchGroupMemberNickname: false,
};
zim.searchLocalGroups(config)
    .then((res: ZIMGroupsSearchedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// 搜索名称中包含 “zego” 的已加入群组
ZIMGroupSearchConfig *config = [[ZIMGroupSearchConfig alloc] init];
config.count = 10;
config.nextFlag = 0;
config.isAlsoMatchGroupMemberNickname = true; // 如果群成员昵称包含 “zego”,搜索结果将包含该群组
config.isAlsoMatchGroupMemberUserName = true; // 如果群成员用户名称包含 “zego”,搜索结果将包含该群组
config.keywords = @[@"zego"];
[[ZIM getInstance] searchLocalGroupsWithConfig:config callback:^(NSArray<ZIMGroupSearchInfo *> * _Nonnull groupSearchInfoList, unsigned int nextFlag, ZIMError * _Nonnull errorInfo) {
    if(errorInfo.code == ZIMErrorCodeSuccess){
        // 开发者可从 groupSearchInfoList 中获取到群组信息
    }else{
        // 根据官网错误码表处理
    }
}];// 搜索名称中包含 “zego” 的已加入群组
ZIMGroupSearchConfig *config = [[ZIMGroupSearchConfig alloc] init];
config.count = 10;
config.nextFlag = 0;
config.isAlsoMatchGroupMemberNickname = true; // 如果群成员昵称包含 “zego”,搜索结果将包含该群组
config.isAlsoMatchGroupMemberUserName = true; // 如果群成员用户名称包含 “zego”,搜索结果将包含该群组
config.keywords = @[@"zego"];
[[ZIM getInstance] searchLocalGroupsWithConfig:config callback:^(NSArray<ZIMGroupSearchInfo *> * _Nonnull groupSearchInfoList, unsigned int nextFlag, ZIMError * _Nonnull errorInfo) {
    if(errorInfo.code == ZIMErrorCodeSuccess){
        // 开发者可从 groupSearchInfoList 中获取到群组信息
    }else{
        // 根据官网错误码表处理
    }
}];禁言或解禁群组
禁言,是指让群组会话内的用户不能发言。
在登录 ZIM SDK 后,用户可以禁言自己管理的群组。只需调用 muteGroup 接口,传入相应参数设置群组 ID、禁言模式、持续时长和目标角色,即可禁言或解禁群组。
ZIM 支持 3 种群组禁言模式:
- 所有群组成员不能发言;
 - 所有普通群组成员(
role为 3)不能发言,; - 指定角色的群成员不能发言。
 

禁言操作结果将通过 ZIMGroupMutedCallback 回调接口返回。
如果您希望禁止特定群组成员发言,请参考 群成员管理 - 设置群成员禁言状态。
// 设置群组禁言配置
ZIMGroupMuteConfig config = new ZIMGroupMuteConfig();
// 群组禁言模式为指定角色的群成员不能发言
config.mode = ZIMGroupMuteMode.Custom;
// 禁言时长为 30 秒
config.duration = 30;
// 角色为 3 和 5 的群成员被禁言
config.roles.add(3);
config.roles.add(5);
// 开启禁言
boolean isMute = true;
zim.muteGroup(isMute, "group_id", config, new ZIMGroupMutedCallback() {
     @Override
     public void onGroupMuted(String groupID, boolean isMute, ZIMGroupMuteInfo info, ZIMError errorInfo) {
                
     }
});// 设置群组禁言配置
ZIMGroupMuteConfig config = new ZIMGroupMuteConfig();
// 群组禁言模式为指定角色的群成员不能发言
config.mode = ZIMGroupMuteMode.Custom;
// 禁言时长为 30 秒
config.duration = 30;
// 角色为 3 和 5 的群成员被禁言
config.roles.add(3);
config.roles.add(5);
// 开启禁言
boolean isMute = true;
zim.muteGroup(isMute, "group_id", config, new ZIMGroupMutedCallback() {
     @Override
     public void onGroupMuted(String groupID, boolean isMute, ZIMGroupMuteInfo info, ZIMError errorInfo) {
                
     }
});// 设置群组禁言配置
try {
    // 设置群组禁言配置
    ZIMGroupMuteConfig config = ZIMGroupMuteConfig();
    // 群组禁言模式为指定角色的群成员不能发言
    config.mode = ZIMGroupMuteMode.custom;
    // 禁言时长为 30 秒
    config.duration = 30;
    // 角色为 3 和 5 的群成员被禁言
    config.roles = [3,5];
    // 开启禁言
    bool isMute = true;
    ZIMGroupMutedResult result = await ZIM.getInstance()!.muteGroup(isMute, 'group_id', config);
} on PlatformException catch (onError){
    onError.code;//根据错误码表处理
    onError.message;//错误信息
}// 设置群组禁言配置
try {
    // 设置群组禁言配置
    ZIMGroupMuteConfig config = ZIMGroupMuteConfig();
    // 群组禁言模式为指定角色的群成员不能发言
    config.mode = ZIMGroupMuteMode.custom;
    // 禁言时长为 30 秒
    config.duration = 30;
    // 角色为 3 和 5 的群成员被禁言
    config.roles = [3,5];
    // 开启禁言
    bool isMute = true;
    ZIMGroupMutedResult result = await ZIM.getInstance()!.muteGroup(isMute, 'group_id', config);
} on PlatformException catch (onError){
    onError.code;//根据错误码表处理
    onError.message;//错误信息
}// 设置群组禁言配置
zim::ZIMGroupMuteConfig config;
// 群组禁言模式为指定角色的群成员不能发言
config.mode = zim::ZIMGroupMuteMode::ZIM_GROUP_MUTE_MODE_CUSTOM;
// 禁言时长为 30 秒
config.duration = 30;
// 角色为 2 和 3 的群成员被禁言
config.roles.push_back(2);
config.roles.push_back(3);
// 开启禁言
bool is_mute = true;
zim_->muteGroup(is_mute, group_id, config,
                    [=](const std::string &groupID, bool is_muted,
                        const zim::ZIMGroupMuteInfo &info,
                        const zim::ZIMError &errorInfo) {
                            // 开发者可从 info 中获取到群组禁言信息
                        });// 设置群组禁言配置
zim::ZIMGroupMuteConfig config;
// 群组禁言模式为指定角色的群成员不能发言
config.mode = zim::ZIMGroupMuteMode::ZIM_GROUP_MUTE_MODE_CUSTOM;
// 禁言时长为 30 秒
config.duration = 30;
// 角色为 2 和 3 的群成员被禁言
config.roles.push_back(2);
config.roles.push_back(3);
// 开启禁言
bool is_mute = true;
zim_->muteGroup(is_mute, group_id, config,
                    [=](const std::string &groupID, bool is_muted,
                        const zim::ZIMGroupMuteInfo &info,
                        const zim::ZIMError &errorInfo) {
                            // 开发者可从 info 中获取到群组禁言信息
                        });// 设置群组禁言配置
const config: ZIMGroupMuteConfig = {
    mode: 3, //群组禁言模式为指定角色的群成员不能发言
    duration: 30, //禁言时长为 30 秒
    roles:[3, 5],//角色为 3 和 5 的群成员被禁言
};
// 开启禁言
const isMute = true;
const groupID = 'group';
zim.muteGroup(isMute, groupID, config)
    .then((res: ZIMGroupMutedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// 设置群组禁言配置
const config: ZIMGroupMuteConfig = {
    mode: 3, //群组禁言模式为指定角色的群成员不能发言
    duration: 30, //禁言时长为 30 秒
    roles:[3, 5],//角色为 3 和 5 的群成员被禁言
};
// 开启禁言
const isMute = true;
const groupID = 'group';
zim.muteGroup(isMute, groupID, config)
    .then((res: ZIMGroupMutedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// 设置群组禁言配置
ZIMGroupMuteConfig *muteConfig = [[ZIMGroupMuteConfig alloc] init];
// 群组禁言模式为指定角色的群成员不能发言
muteConfig.mode = ZIMGroupMuteModeCustom;
// 禁言时长为 30 秒
muteConfig.duration = 30;
// 角色为 3 和 5 的群成员被禁言
muteConfig.roles = @[@3,@5];
[[ZIM getInstance] muteGroup:YES groupID:@"groupID" config:muteConfig callback:^(NSString * _Nonnull groupID, BOOL isMute, ZIMGroupMuteInfo * _Nonnull info, ZIMError * _Nonnull errorInfo) {
    // 开发者可从 info 中获取到群组禁言信息
}];// 设置群组禁言配置
ZIMGroupMuteConfig *muteConfig = [[ZIMGroupMuteConfig alloc] init];
// 群组禁言模式为指定角色的群成员不能发言
muteConfig.mode = ZIMGroupMuteModeCustom;
// 禁言时长为 30 秒
muteConfig.duration = 30;
// 角色为 3 和 5 的群成员被禁言
muteConfig.roles = @[@3,@5];
[[ZIM getInstance] muteGroup:YES groupID:@"groupID" config:muteConfig callback:^(NSString * _Nonnull groupID, BOOL isMute, ZIMGroupMuteInfo * _Nonnull info, ZIMError * _Nonnull errorInfo) {
    // 开发者可从 info 中获取到群组禁言信息
}];群组禁言或解禁成功后,全部群成员会收到 groupMutedInfoUpdated ,得知哪些角色无法在该群组发言或可恢复发言。
zim.setEventHandler(new ZIMEventHandler(){
    public void onGroupMutedInfoUpdated(ZIM zim, ZIMGroupMuteInfo muteInfo,
                                       ZIMGroupOperatedInfo operatedInfo, String groupID) {
       // 通过继承 ZIMEventHandler 的方式,在这里监听群禁言状态变更的信息,并进行相应处理
   }
});zim.setEventHandler(new ZIMEventHandler(){
    public void onGroupMutedInfoUpdated(ZIM zim, ZIMGroupMuteInfo muteInfo,
                                       ZIMGroupOperatedInfo operatedInfo, String groupID) {
       // 通过继承 ZIMEventHandler 的方式,在这里监听群禁言状态变更的信息,并进行相应处理
   }
});ZIMEventHandler.onGroupMutedInfoUpdated = (ZIM zim, ZIMGroupMuteInfo groupMuteInfo, ZIMGroupOperatedInfo operatedInfo, String groupID){
    //在这里监听群禁言状态变更的信息,并进行相应处理
};ZIMEventHandler.onGroupMutedInfoUpdated = (ZIM zim, ZIMGroupMuteInfo groupMuteInfo, ZIMGroupOperatedInfo operatedInfo, String groupID){
    //在这里监听群禁言状态变更的信息,并进行相应处理
};void zim_event_handler::onGroupMutedInfoUpdated(zim::ZIM *, const zim::ZIMGroupMuteInfo &info,
                                               const zim::ZIMGroupOperatedInfo &operatedInfo,
                                               const std::string &groupID) {
    // 通过继承 ZIMEventHandler 的方式,在这里监听群禁言状态变更的信息,并进行相应处理
}void zim_event_handler::onGroupMutedInfoUpdated(zim::ZIM *, const zim::ZIMGroupMuteInfo &info,
                                               const zim::ZIMGroupOperatedInfo &operatedInfo,
                                               const std::string &groupID) {
    // 通过继承 ZIMEventHandler 的方式,在这里监听群禁言状态变更的信息,并进行相应处理
}zim.on('groupMutedInfoUpdated', (zim: ZIM, data: ZIMEventOfGroupMutedInfoUpdatedResult) => {
    console.log('groupMutedInfoUpdated', data);
});zim.on('groupMutedInfoUpdated', (zim: ZIM, data: ZIMEventOfGroupMutedInfoUpdatedResult) => {
    console.log('groupMutedInfoUpdated', data);
});zim.onGroupMutedInfoUpdated((data) => {
    console.log('groupMutedInfoUpdated', data);
});zim.onGroupMutedInfoUpdated((data) => {
    console.log('groupMutedInfoUpdated', data);
});- (void)zim:(ZIM *)zim
    groupMutedInfoUpdated:(ZIMGroupMuteInfo *)muteInfo
            operatedInfo:(ZIMGroupOperatedInfo *)operatedInfo
                 groupID:(NSString *)groupID{
    // 通过继承 ZIMEventHandler 的方式,在这里监听群禁言状态变更的信息,并进行相应处理
}- (void)zim:(ZIM *)zim
    groupMutedInfoUpdated:(ZIMGroupMuteInfo *)muteInfo
            operatedInfo:(ZIMGroupOperatedInfo *)operatedInfo
                 groupID:(NSString *)groupID{
    // 通过继承 ZIMEventHandler 的方式,在这里监听群禁言状态变更的信息,并进行相应处理
}确认群组会话是否可用
如需确认当前用户是否仍在所加入的群组会话中,请通过以下任意方法:
- 参考 会话管理 - 拉取会话列表 主动拉取会话列表。
 - 参考 会话管理 - 更新会话列表,监听会话变更回调,更新会话列表。
 
当会话类型是群类型时,从返回结果中的 ZIMGroupConversation 获取 isDisabled ,即会话是否可用。
isDisabled 值说明如下:
- 为 true 时,表示当前用户不在该群组会话。当前用户主动退出、被踢或群组解散都会导致会话不可用。
 - 为 false 时,表示当前用户在该群组会话。
 
更新入群验证模式
群主和管理员登录 ZIM SDK 后,可以通过 updateGroupJoinMode 接口更新入群验证模式。
更新成功后,全体群成员都会收到 groupVerifyInfoUpdated 回调通知。
// 监听 onGroupVerifyInfoUpdated 事件
zim.setEventHandler(new ZIMEventHandler(){
    public void onGroupVerifyInfoUpdated(ZIM zim, ZIMGroupVerifyInfo verifyInfo,
                                         ZIMGroupOperatedInfo operatedInfo, String groupID) {
        // 验证模式更新回调通知
     }
   });
// 更新 他人入群验证模式
zim.updateGroupJoinMode(ZIMGroupJoinMode.AUTH, "groupID", new ZIMGroupJoinModeUpdatedCallback(){
    public void onGroupJoinModeUpdated(String groupID, ZIMGroupJoinMode mode, ZIMError errorInfo){
        // 更新验证模式结果回调通知
    }
});// 监听 onGroupVerifyInfoUpdated 事件
zim.setEventHandler(new ZIMEventHandler(){
    public void onGroupVerifyInfoUpdated(ZIM zim, ZIMGroupVerifyInfo verifyInfo,
                                         ZIMGroupOperatedInfo operatedInfo, String groupID) {
        // 验证模式更新回调通知
     }
   });
// 更新 他人入群验证模式
zim.updateGroupJoinMode(ZIMGroupJoinMode.AUTH, "groupID", new ZIMGroupJoinModeUpdatedCallback(){
    public void onGroupJoinModeUpdated(String groupID, ZIMGroupJoinMode mode, ZIMError errorInfo){
        // 更新验证模式结果回调通知
    }
});// 监听 onGroupVerifyInfoUpdated 事件
ZIMEventHandler.onGroupVerifyInfoUpdated = (ZIM zim,
    ZIMGroupVerifyInfo verifyInfo,
    ZIMGroupOperatedInfo operatedInfo,
    String groupID){};
// 更新入群验证模式
try{
    var result = await ZIM.getInstance()!.updateGroupJoinMode(ZIMGroupJoinMode.auth, 'groupID');
} on PlatformException catch(onError){
    onError.code;
    onError.message;
}// 监听 onGroupVerifyInfoUpdated 事件
ZIMEventHandler.onGroupVerifyInfoUpdated = (ZIM zim,
    ZIMGroupVerifyInfo verifyInfo,
    ZIMGroupOperatedInfo operatedInfo,
    String groupID){};
// 更新入群验证模式
try{
    var result = await ZIM.getInstance()!.updateGroupJoinMode(ZIMGroupJoinMode.auth, 'groupID');
} on PlatformException catch(onError){
    onError.code;
    onError.message;
}// 更新 邀请他人入群验证模式
zim_->updateGroupJoinMode(
    zim::ZIMGroupJoinMode::ZIM_GROUP_JOIN_MODE_AUTH, group_id,
    [=](const std::string &groupID, zim::ZIMGroupJoinMode mode,
        const zim::ZIMError &errorInfo) {
        // 业务代码
    });// 更新 邀请他人入群验证模式
zim_->updateGroupJoinMode(
    zim::ZIMGroupJoinMode::ZIM_GROUP_JOIN_MODE_AUTH, group_id,
    [=](const std::string &groupID, zim::ZIMGroupJoinMode mode,
        const zim::ZIMError &errorInfo) {
        // 业务代码
    });// 监听 groupVerifyInfoUpdated 事件
zim.on('groupVerifyInfoUpdated', (zim: ZIM, data: ZIMEventOfGroupVerifyInfoUpdatedResult) => {
});
// 更新入群验证模式
const groupID = '';
const joinMode = 1;
zim.updateGroupJoinMode(joinMode, groupID)
    .then((res: ZIMGroupJoinModeUpdatedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// 监听 groupVerifyInfoUpdated 事件
zim.on('groupVerifyInfoUpdated', (zim: ZIM, data: ZIMEventOfGroupVerifyInfoUpdatedResult) => {
});
// 更新入群验证模式
const groupID = '';
const joinMode = 1;
zim.updateGroupJoinMode(joinMode, groupID)
    .then((res: ZIMGroupJoinModeUpdatedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// 监听 onGroupVerifyInfoUpdated 事件
zim.onGroupVerifyInfoUpdated((data) => {
});
// 更新入群验证模式
const groupID = '';
const joinMode = 1;
zim.updateGroupJoinMode(joinMode, groupID)
    .then((res: ZIMGroupJoinModeUpdatedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// 监听 onGroupVerifyInfoUpdated 事件
zim.onGroupVerifyInfoUpdated((data) => {
});
// 更新入群验证模式
const groupID = '';
const joinMode = 1;
zim.updateGroupJoinMode(joinMode, groupID)
    .then((res: ZIMGroupJoinModeUpdatedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// 监听 groupVerifyInfoUpdated 事件
- (void)zim:(ZIM *)zim
    groupVerifyInfoUpdated:(ZIMGroupVerifyInfo *)verifyInfo
            operatedInfo:(ZIMGroupOperatedInfo *)operatedInfo
    groupID:(NSString *)groupID{
}
// 更新入群验证模式
[zim updateGroupJoinMode:ZIMGroupJoinModeAuth groupID:@"groupID" callback:^(NSString * _Nonnull groupID, ZIMGroupJoinMode mode, ZIMError * _Nonnull errorInfo) {
}];// 监听 groupVerifyInfoUpdated 事件
- (void)zim:(ZIM *)zim
    groupVerifyInfoUpdated:(ZIMGroupVerifyInfo *)verifyInfo
            operatedInfo:(ZIMGroupOperatedInfo *)operatedInfo
    groupID:(NSString *)groupID{
}
// 更新入群验证模式
[zim updateGroupJoinMode:ZIMGroupJoinModeAuth groupID:@"groupID" callback:^(NSString * _Nonnull groupID, ZIMGroupJoinMode mode, ZIMError * _Nonnull errorInfo) {
}];更新邀请模式
群主和管理员登录 ZIM SDK 后,可以通过 updateGroupInviteMode 接口更新邀请模式。
更新成功后,全体群成员都会收到 groupVerifyInfoUpdated 回调通知。
// 监听 onGroupVerifyInfoUpdated 事件
zim.setEventHandler(new ZIMEventHandler(){
    public void onGroupVerifyInfoUpdated(ZIM zim, ZIMGroupVerifyInfo verifyInfo,
                                         ZIMGroupOperatedInfo operatedInfo, String groupID) {
        // 邀请模式更新回调通知
     }
   });
// 更新 邀请他人入群验证模式
zim.updateGroupInviteMode(ZIMGroupInviteMode.ADMIN, "groupID", new ZIMGroupInviteModeUpdatedCallback(){
    public void onGroupInviteModeUpdated(String groupID, ZIMGroupInviteMode mode, ZIMError errorInfo){
        // 更新邀请他人入群验证模式结果回调通知
    }
});
// 监听 onGroupVerifyInfoUpdated 事件
zim.setEventHandler(new ZIMEventHandler(){
    public void onGroupVerifyInfoUpdated(ZIM zim, ZIMGroupVerifyInfo verifyInfo,
                                         ZIMGroupOperatedInfo operatedInfo, String groupID) {
        // 邀请模式更新回调通知
     }
   });
// 更新 邀请他人入群验证模式
zim.updateGroupInviteMode(ZIMGroupInviteMode.ADMIN, "groupID", new ZIMGroupInviteModeUpdatedCallback(){
    public void onGroupInviteModeUpdated(String groupID, ZIMGroupInviteMode mode, ZIMError errorInfo){
        // 更新邀请他人入群验证模式结果回调通知
    }
});// 监听 onGroupVerifyInfoUpdated 事件
ZIMEventHandler.onGroupVerifyInfoUpdated = (ZIM zim,
    ZIMGroupVerifyInfo verifyInfo,
    ZIMGroupOperatedInfo operatedInfo,
    String groupID){};
// 更新邀请模式
try{
    var result = await ZIM.getInstance()!.updateGroupInviteMode(ZIMGroupInviteMode.any, 'groupID');
} on PlatformException catch(onError){
    onError.code;
    onError.message;
}// 监听 onGroupVerifyInfoUpdated 事件
ZIMEventHandler.onGroupVerifyInfoUpdated = (ZIM zim,
    ZIMGroupVerifyInfo verifyInfo,
    ZIMGroupOperatedInfo operatedInfo,
    String groupID){};
// 更新邀请模式
try{
    var result = await ZIM.getInstance()!.updateGroupInviteMode(ZIMGroupInviteMode.any, 'groupID');
} on PlatformException catch(onError){
    onError.code;
    onError.message;
}// 监听 onGroupVerifyInfoUpdated 事件
void onGroupVerifyInfoUpdated(zim::ZIM * /*zim*/,
                                const zim::ZIMGroupVerifyInfo & /*verifyInfo*/,
                                const zim::ZIMGroupOperatedInfo & /*operatedInfo*/,
                                const std::string & /*groupID*/) override {
    ......
}
// 更新邀请模式
zim_->updateGroupInviteMode(
    zim::ZIMGroupInviteMode::ZIM_GROUP_INVITE_MODE_ADMIN, group_id,
    [=](const std::string &groupID, zim::ZIMGroupInviteMode mode,
        const zim::ZIMError &errorInfo) {
        // 业务代码
    });// 监听 onGroupVerifyInfoUpdated 事件
void onGroupVerifyInfoUpdated(zim::ZIM * /*zim*/,
                                const zim::ZIMGroupVerifyInfo & /*verifyInfo*/,
                                const zim::ZIMGroupOperatedInfo & /*operatedInfo*/,
                                const std::string & /*groupID*/) override {
    ......
}
// 更新邀请模式
zim_->updateGroupInviteMode(
    zim::ZIMGroupInviteMode::ZIM_GROUP_INVITE_MODE_ADMIN, group_id,
    [=](const std::string &groupID, zim::ZIMGroupInviteMode mode,
        const zim::ZIMError &errorInfo) {
        // 业务代码
    });// 监听 groupVerifyInfoUpdated 事件
zim.on('groupVerifyInfoUpdated', (zim: ZIM, data: ZIMEventOfGroupVerifyInfoUpdatedResult) => {
});
// 更新 邀请他人入群验证模式
const groupID = '';
const inviteMode = 1;
zim.updateGroupInviteMode(inviteMode, groupID)
    .then((res: ZIMGroupInviteModeUpdatedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// 监听 groupVerifyInfoUpdated 事件
zim.on('groupVerifyInfoUpdated', (zim: ZIM, data: ZIMEventOfGroupVerifyInfoUpdatedResult) => {
});
// 更新 邀请他人入群验证模式
const groupID = '';
const inviteMode = 1;
zim.updateGroupInviteMode(inviteMode, groupID)
    .then((res: ZIMGroupInviteModeUpdatedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// 监听 onGroupVerifyInfoUpdated 事件
zim.onGroupVerifyInfoUpdated((data) => {
});
// 更新 邀请他人入群验证模式
const groupID = '';
const inviteMode = 1;
zim.updateGroupInviteMode(inviteMode, groupID)
    .then((res: ZIMGroupInviteModeUpdatedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// 监听 onGroupVerifyInfoUpdated 事件
zim.onGroupVerifyInfoUpdated((data) => {
});
// 更新 邀请他人入群验证模式
const groupID = '';
const inviteMode = 1;
zim.updateGroupInviteMode(inviteMode, groupID)
    .then((res: ZIMGroupInviteModeUpdatedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// 监听 onGroupVerifyInfoUpdated 事件
- (void)zim:(ZIM *)zim
    groupVerifyInfoUpdated:(ZIMGroupVerifyInfo *)verifyInfo
              operatedInfo:(ZIMGroupOperatedInfo *)operatedInfo
    groupID:(NSString *)groupID{
}
// 更新邀请模式
[zim updateGroupInviteMode:ZIMGroupInviteModeNone groupID:@"groupID" callback:^(NSString * _Nonnull groupID, ZIMGroupInviteMode mode, ZIMError * _Nonnull errorInfo) {
}];// 监听 onGroupVerifyInfoUpdated 事件
- (void)zim:(ZIM *)zim
    groupVerifyInfoUpdated:(ZIMGroupVerifyInfo *)verifyInfo
              operatedInfo:(ZIMGroupOperatedInfo *)operatedInfo
    groupID:(NSString *)groupID{
}
// 更新邀请模式
[zim updateGroupInviteMode:ZIMGroupInviteModeNone groupID:@"groupID" callback:^(NSString * _Nonnull groupID, ZIMGroupInviteMode mode, ZIMError * _Nonnull errorInfo) {
}];更新邀请目标用户验证模式
群主和管理员登录 ZIM SDK 后,可以通过 updateGroupBeInviteMode 接口更新目标用户验证模式。
更新成功后,全体群成员都会收到 groupVerifyInfoUpdated 回调通知。
// 监听 onGroupVerifyInfoUpdated 事件
zim.setEventHandler(new ZIMEventHandler(){
    public void onGroupVerifyInfoUpdated(ZIM zim, ZIMGroupVerifyInfo verifyInfo,
                                         ZIMGroupOperatedInfo operatedInfo, String groupID) {
        // 目标用户验证模式更新回调通知
     }
   });
// 更新邀请目标用户验证模式
zim.updateGroupBeInviteMode(ZIMGroupBeInviteMode.AUTH, "groupID", new ZIMGroupBeInviteModeUpdatedCallback(){
    public void onGroupBeInviteModeUpdated(String groupID, ZIMGroupBeInviteMode mode, ZIMError errorInfo) {
            // 更新邀请目标用户验证模式回调通知
    }  
});
// 监听 onGroupVerifyInfoUpdated 事件
zim.setEventHandler(new ZIMEventHandler(){
    public void onGroupVerifyInfoUpdated(ZIM zim, ZIMGroupVerifyInfo verifyInfo,
                                         ZIMGroupOperatedInfo operatedInfo, String groupID) {
        // 目标用户验证模式更新回调通知
     }
   });
// 更新邀请目标用户验证模式
zim.updateGroupBeInviteMode(ZIMGroupBeInviteMode.AUTH, "groupID", new ZIMGroupBeInviteModeUpdatedCallback(){
    public void onGroupBeInviteModeUpdated(String groupID, ZIMGroupBeInviteMode mode, ZIMError errorInfo) {
            // 更新邀请目标用户验证模式回调通知
    }  
});// 监听 onGroupVerifyInfoUpdated 事件
ZIMEventHandler.onGroupVerifyInfoUpdated = (ZIM zim,
    ZIMGroupVerifyInfo verifyInfo,
    ZIMGroupOperatedInfo operatedInfo,
    String groupID){};
// 更新目标用户验证模式
try{
    var result = await ZIM.getInstance()!.updateGroupBeInviteMode(ZIMGroupBeInviteMode.auth, 'groupID');
} on PlatformException catch(onError){
    onError.code;
    onError.message;
}// 监听 onGroupVerifyInfoUpdated 事件
ZIMEventHandler.onGroupVerifyInfoUpdated = (ZIM zim,
    ZIMGroupVerifyInfo verifyInfo,
    ZIMGroupOperatedInfo operatedInfo,
    String groupID){};
// 更新目标用户验证模式
try{
    var result = await ZIM.getInstance()!.updateGroupBeInviteMode(ZIMGroupBeInviteMode.auth, 'groupID');
} on PlatformException catch(onError){
    onError.code;
    onError.message;
}// 监听 onGroupVerifyInfoUpdated 事件
void onGroupVerifyInfoUpdated(zim::ZIM * /*zim*/,
                                const zim::ZIMGroupVerifyInfo & /*verifyInfo*/,
                                const zim::ZIMGroupOperatedInfo & /*operatedInfo*/,
                                const std::string & /*groupID*/) override {
    ......
}
// 更新目标用户验证模式
zim_->updateGroupBeInviteMode(
    zim::ZIMGroupBeInviteMode::ZIM_GROUP_BE_INVITE_MODE_AUTH, group_id,
    [=](const std::string &groupID, zim::ZIMGroupBeInviteMode mode,
        const zim::ZIMError &errorInfo) {
        // 业务代码
    });// 监听 onGroupVerifyInfoUpdated 事件
void onGroupVerifyInfoUpdated(zim::ZIM * /*zim*/,
                                const zim::ZIMGroupVerifyInfo & /*verifyInfo*/,
                                const zim::ZIMGroupOperatedInfo & /*operatedInfo*/,
                                const std::string & /*groupID*/) override {
    ......
}
// 更新目标用户验证模式
zim_->updateGroupBeInviteMode(
    zim::ZIMGroupBeInviteMode::ZIM_GROUP_BE_INVITE_MODE_AUTH, group_id,
    [=](const std::string &groupID, zim::ZIMGroupBeInviteMode mode,
        const zim::ZIMError &errorInfo) {
        // 业务代码
    });// 监听 groupVerifyInfoUpdated 事件
zim.on('groupVerifyInfoUpdated', (zim: ZIM, data: ZIMEventOfGroupVerifyInfoUpdatedResult) => {
});
// 更新邀请目标用户验证模式
const groupID = '';
const beInviteMode = 1;
zim.updateGroupBeInviteMode(beInviteMode, groupID)
    .then((res: ZIMGroupBeInviteModeUpdatedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// 监听 groupVerifyInfoUpdated 事件
zim.on('groupVerifyInfoUpdated', (zim: ZIM, data: ZIMEventOfGroupVerifyInfoUpdatedResult) => {
});
// 更新邀请目标用户验证模式
const groupID = '';
const beInviteMode = 1;
zim.updateGroupBeInviteMode(beInviteMode, groupID)
    .then((res: ZIMGroupBeInviteModeUpdatedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// 监听 onGroupVerifyInfoUpdated 事件
zim.onGroupVerifyInfoUpdated((data) => {
});
// 更新邀请目标用户验证模式
const groupID = '';
const beInviteMode = 1;
zim.updateGroupBeInviteMode(beInviteMode, groupID)
    .then((res: ZIMGroupBeInviteModeUpdatedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// 监听 onGroupVerifyInfoUpdated 事件
zim.onGroupVerifyInfoUpdated((data) => {
});
// 更新邀请目标用户验证模式
const groupID = '';
const beInviteMode = 1;
zim.updateGroupBeInviteMode(beInviteMode, groupID)
    .then((res: ZIMGroupBeInviteModeUpdatedResult) => {
        // 操作成功
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// 监听 onGroupVerifyInfoUpdated 事件
- (void)zim:(ZIM *)zim
    groupVerifyInfoUpdated:(ZIMGroupVerifyInfo *)verifyInfo
              operatedInfo:(ZIMGroupOperatedInfo *)operatedInfo
    groupID:(NSString *)groupID{
    
    }
// 更新目标用户验证模式
  [zim updateGroupBeInviteMode:ZIMGroupBeInviteModeAuth groupID:@"groupID" callback:^(NSString * _Nonnull groupID, ZIMGroupBeInviteMode mode, ZIMError * _Nonnull errorInfo) {
  }];// 监听 onGroupVerifyInfoUpdated 事件
- (void)zim:(ZIM *)zim
    groupVerifyInfoUpdated:(ZIMGroupVerifyInfo *)verifyInfo
              operatedInfo:(ZIMGroupOperatedInfo *)operatedInfo
    groupID:(NSString *)groupID{
    
    }
// 更新目标用户验证模式
  [zim updateGroupBeInviteMode:ZIMGroupBeInviteModeAuth groupID:@"groupID" callback:^(NSString * _Nonnull groupID, ZIMGroupBeInviteMode mode, ZIMError * _Nonnull errorInfo) {
  }];查询入群申请列表
用户登录 ZIM SDK 后,调用 queryGroupApplicationListWithConfig 接口,可以查询入群申请列表,查询结果包含自己的入群申请和自己被邀请入群的申请。当用户是群主或管理员时,查询结果还会包含他人的入群申请和自己邀请他人入群的申请。
ZIMGroupApplicationListQueryConfig config = new ZIMGroupApplicationListQueryConfig();
config.count = 10;
// 首次查询填 0
conifg.nextFlag = 0; 
zim.queryGroupApplicationList(config,  new ZIMGroupApplicationListQueriedCallback() {
     public void onGroupApplicationListQueried(ArrayList<ZIMGroupApplicationInfo> applicationList, int nextFlag, ZIMError errorInfo) {
            // 查询群申请列表结果回调
     }
})ZIMGroupApplicationListQueryConfig config = new ZIMGroupApplicationListQueryConfig();
config.count = 10;
// 首次查询填 0
conifg.nextFlag = 0; 
zim.queryGroupApplicationList(config,  new ZIMGroupApplicationListQueriedCallback() {
     public void onGroupApplicationListQueried(ArrayList<ZIMGroupApplicationInfo> applicationList, int nextFlag, ZIMError errorInfo) {
            // 查询群申请列表结果回调
     }
})try{
    ZIMGroupApplicationListQueryConfig queryConfig = ZIMGroupApplicationListQueryConfig();
    queryConfig.count = 100;
    queryConfig.nextFlag = 0;
    var result = await ZIM.getInstance()!.queryGroupApplicationList(queryConfig);
} on PlatformException catch(onError){
    onError.code;
    onError.message;
}try{
    ZIMGroupApplicationListQueryConfig queryConfig = ZIMGroupApplicationListQueryConfig();
    queryConfig.count = 100;
    queryConfig.nextFlag = 0;
    var result = await ZIM.getInstance()!.queryGroupApplicationList(queryConfig);
} on PlatformException catch(onError){
    onError.code;
    onError.message;
}zim::ZIMGroupApplicationListQueryConfig config;
config.count = 100;
config.nextFlag = 0;
zim_->queryGroupApplicationList(
    config, [=](const std::vector<zim::ZIMGroupApplicationInfo> &applicationList,
                unsigned long long nextFlag, const zim::ZIMError &errorInfo) {
        // 业务代码
    });zim::ZIMGroupApplicationListQueryConfig config;
config.count = 100;
config.nextFlag = 0;
zim_->queryGroupApplicationList(
    config, [=](const std::vector<zim::ZIMGroupApplicationInfo> &applicationList,
                unsigned long long nextFlag, const zim::ZIMError &errorInfo) {
        // 业务代码
    });// 查询入群申请列表
const config: ZIMGroupApplicationListQueryConfig = {
    count: 30, // 单次查询数量
    nextFlag: 0 // 锚点,首次查询填 0,下次查询使用当前查询返回 nextFlag 作为锚点
};
zim.queryGroupApplicationList(config)
    .then((res: ZIMGroupApplicationListQueriedResult) => {
        // 操作成功,下次查询使用 res.nextFlag 作为锚点
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });// 查询入群申请列表
const config: ZIMGroupApplicationListQueryConfig = {
    count: 30, // 单次查询数量
    nextFlag: 0 // 锚点,首次查询填 0,下次查询使用当前查询返回 nextFlag 作为锚点
};
zim.queryGroupApplicationList(config)
    .then((res: ZIMGroupApplicationListQueriedResult) => {
        // 操作成功,下次查询使用 res.nextFlag 作为锚点
    })
    .catch((err: ZIMError) => {
        // 操作失败
    });ZIMGroupApplicationListQueryConfig *config = [[ZIMGroupApplicationListQueryConfig alloc] init];
config.count = 20;
[zim queryGroupApplicationListWithConfig:config callback:^(NSArray<ZIMGroupApplicationInfo *> * _Nonnull applicationList, unsigned int nextFlag, ZIMError * _Nonnull errorInfo) {
    
}];ZIMGroupApplicationListQueryConfig *config = [[ZIMGroupApplicationListQueryConfig alloc] init];
config.count = 20;
[zim queryGroupApplicationListWithConfig:config callback:^(NSArray<ZIMGroupApplicationInfo *> * _Nonnull applicationList, unsigned int nextFlag, ZIMError * _Nonnull errorInfo) {
    
}];
