====== 群组管理 ====== ---- 群组分为两大类,四小类。 typedef enum{ // 私有群组,不能被非群组成员看到 eGroupStyle_PrivateOnlyOwnerInvite = 0, // 只有创建者可以邀请非成员进群 eGroupStyle_PrivateMemberCanInvite, // 所有群成员都可以邀请非成员进群 // 共有群组,可通过查看所有共有群组得到 eGroupStyle_PublicJoinNeedApproval, // 需要创建者同意才能进入(创建者可以邀请非成员进群) eGroupStyle_PublicOpenJoin, // 不需要同意可以直接进入() eGroupStyle_Default = eGroupStyle_PrivateOnlyOwnerInvite, }EMGroupStyle; 注: - 群组实例对应 EMGroup,SDK 的 EMGroup 正在进行优化,不允许用户自己初始化 EMGroup 或者 copy EMGroup。 - 群组不支持权限转移,没有 admin 权限,owner 只有一个且为创建者。 ===== 群组操作 ===== ==== 创建群组 ==== 目前创建群组支持的配置属性有: * 群名称 * 群描述 * 群人数(不支持修改,目前上限为2000人) * 群类型(即上面提到的四种群组类型) 1. 同步方法 EMError *error = nil; EMGroupStyleSetting *groupStyleSetting = [[EMGroupStyleSetting alloc] init]; groupStyleSetting.groupMaxUsersCount = 500; // 创建500人的群,如果不设置,默认是200人。 groupStyleSetting.groupStyle = eGroupStyle_PublicOpenJoin; // 创建不同类型的群组,这里需要才传入不同的类型 EMGroup *group = [[EaseMob sharedInstance].chatManager createGroupWithSubject:@"群组名称" description:@"群组描述" invitees:@[@"6001",@"6002"] initialWelcomeMessage:@"邀请您加入群组" styleSetting:groupStyleSetting error:&error]; if(!error){ NSLog(@"创建成功 -- %@",group); } 2. block异步方法 EMGroupStyleSetting *groupStyleSetting = [[EMGroupStyleSetting alloc] init]; groupStyleSetting.groupMaxUsersCount = 500; // 创建500人的群,如果不设置,默认是200人。 groupStyleSetting.groupStyle = eGroupStyle_PublicOpenJoin; // 创建不同类型的群组,这里需要才传入不同的类型 [[EaseMob sharedInstance].chatManager asyncCreateGroupWithSubject:@"群组名称" description:@"群组描述" invitees:@[@"6001",@"6002"] initialWelcomeMessage:@"邀请您加入群组" styleSetting:groupStyleSetting completion:^(EMGroup *group, EMError *error) { if(!error){ NSLog(@"创建成功 -- %@",group); } } onQueue:nil]; 3. IChatManagerDelegate 回调方法 接口调用 EMGroupStyleSetting *groupStyleSetting = [[EMGroupStyleSetting alloc] init]; groupStyleSetting.groupMaxUsersCount = 500; // 创建500人的群,如果不设置,默认是200人。 groupStyleSetting.groupStyle = eGroupStyle_PublicOpenJoin; // 创建不同类型的群组,这里需要才传入不同的类型 [[EaseMob sharedInstance].chatManager asyncCreateGroupWithSubject:@"群组名称" description:@"群组描述" invitees:@[@"6001",@"6002"] initialWelcomeMessage:@"邀请您加入群组" styleSetting:groupStyleSetting]; 回调监听 /*! @method @brief 创建一个群组后的回调 @param group 所创建的群组对象 @param error 错误信息 @discussion */ - (void)group:(EMGroup *)group didCreateWithError:(EMError *)error; ==== 获取群详情 ==== 分两种接口: 1. 只获取群详情的接口 /*! @method @brief 获取群组信息 @param groupId 群组ID @param pError 错误信息 @result 所获取的群组对象 */ - (EMGroup *)fetchGroupInfo:(NSString *)groupId error:(EMError **)pError; /*! @method @brief 异步方法,获取群组信息 @param groupId 群组ID @discussion 执行后,回调didFetchGroupInfo:error会被触发 */ - (void)asyncFetchGroupInfo:(NSString *)groupId; /*! @method @brief 异步方法,获取群组信息 @param groupId 群组ID @param completion 消息完成后的回调 @param aQueue 回调block时的线程 */ - (void)asyncFetchGroupInfo:(NSString *)groupId completion:(void (^)(EMGroup *group, EMError *error))completion onQueue:(dispatch_queue_t)aQueue; 2. 自主选择是否一起获取群成员 /*! @method @brief 同步方法,获取群组信息 @param groupId 群组ID @param includesOccupantList 是否获取成员列表 @param pError 错误信息 @return 群组 */ - (EMGroup *)fetchGroupInfo:(NSString *)groupId includesOccupantList:(BOOL)includesOccupantList error:(EMError **)pError; /*! @method @brief 异步方法,获取群组信息 @param groupId 群组ID @param includesOccupantList 是否获取成员列表 @discussion 执行完成后,回调[didFetchGroupInfo:error:] */ - (void)asyncFetchGroupInfo:(NSString *)groupId includesOccupantList:(BOOL)includesOccupantList; /*! @method @brief 异步方法,获取群组信息 @param groupId 群组ID @param includesOccupantList 是否获取成员列表 @param completion 消息完成后的回调 @param aQueue 回调block时的线程 */ - (void)asyncFetchGroupInfo:(NSString *)groupId includesOccupantList:(BOOL)includesOccupantList completion:(void (^)(EMGroup *group,EMError *error))completion onQueue:(dispatch_queue_t)aQueue; ==== 获取群成员 ==== /*! @method @brief 同步方法,获取群组成员列表 @param groupId 群组ID @param pError 错误信息 @return 群组的成员列表(包含创建者) */ - (NSArray *)fetchOccupantList:(NSString *)groupId error:(EMError **)pError; /*! @method @brief 异步方法,获取群组成员列表 @param groupId 群组ID @discussion 执行完成后,回调[didFetchGroupOccupantsList:error:] */ - (void)asyncFetchOccupantList:(NSString *)groupId; /*! @method @brief 异步方法,获取群组成员列表 @param groupId 群组ID @param completion 消息完成后的回调 @param aQueue 回调block时的线程 */ - (void)asyncFetchOccupantList:(NSString *)groupId completion:(void (^)(NSArray *occupantsList,EMError *error))completion onQueue:(dispatch_queue_t)aQueue; ==== 加入群组 ==== 群组分4种类型,目前 SDK 不支持自主选择是否进群。我们将针对每种类型讲解加入群组要进行的操作。 - eGroupStyle_PrivateOnlyOwnerInvite 该类型的群组只允许群主(owner)添加人进群,其他人无法主动加入。 - eGroupStyle_PrivateMemberCanInvite (推荐使用)该类型的群组允许所有群成员添加人进群,其他人无法主动加入。 - eGroupStyle_PublicJoinNeedApproval (推荐使用)该类型的群组只允许群主(owner)添加人进群;其他人想进入群组的话,需要先发送申请,群主同意申请之后才能进群;其他人无法主动加入。 - eGroupStyle_PublicOpenJoin (不推荐使用)该类型的群组允许任何人主动加入群组。 === 添加人进群 === 被添加的人会收到回调: /*! @method @brief 接受群组邀请并加入群组后的回调 @param group 所接受的群组 @param error 错误信息 */ - (void)didAcceptInvitationFromGroup:(EMGroup *)group error:(EMError *)error; 加人接口如下: 1. 同步方法 EMError *error = nil; [[EaseMob sharedInstance].chatManager addOccupants:@[@"6001",@"6002"] toGroup:@"1410329312753" welcomeMessage:@"邀请信息" error:&error]; if (!error) { NSLog(@"添加成功"); } 2. block 异步方法 [[EaseMob sharedInstance].chatManager asyncAddOccupants:@[@"6001",@"6002"] toGroup:@"1410329312753" welcomeMessage:@"邀请信息" completion:^(NSArray *occupants, EMGroup *group, NSString *welcomeMessage, EMError *error) { if (!error) { NSLog(@"添加成功"); } } onQueue:nil]; 3. IChatManagerDelegate 异步方法 接口调用 [[EaseMob sharedInstance].chatManager asyncAddOccupants:@[@"6001",@"6002"] toGroup:@"1410329312753" welcomeMessage:@"邀请信息"]; 监听回调 /*! @method @brief 群组信息更新后的回调 @param group 发生更新的群组 @param error 错误信息 @discussion 当添加/移除/更改角色/更改主题/更改群组信息之后,都会触发此回调 */ - (void)groupDidUpdateInfo:(EMGroup *)group error:(EMError *)error; === 发送进群申请 === 1. 同步方法 EMError *error = nil; // 申请加入需要审核的公开群组 [[EaseMob sharedInstance].chatManager applyJoinPublicGroup:@"1410329312753" withGroupname:@"群组名称" message:@"申请信息" error:&error]; if (!error) { NSLog(@"申请成功"); } 2. block异步方法 [[EaseMob sharedInstance].chatManager asyncApplyJoinPublicGroup:@"1410329312753" withGroupname:@"群组名称" message:@"申请信息" completion:^(EMGroup *group, EMError *error) { if (!error) { NSLog(@"申请成功"); } } onQueue:nil]; 3. IChatManagerDelegate 回调方法 接口调用 [[EaseMob sharedInstance].chatManager asyncApplyJoinPublicGroup:@"1410329312753" withGroupname:@"群组名称" message:@"申请信息"]; 监听回调 /*! @method @brief 申请加入公开群组后的回调 @param group 群组对象 @param error 错误信息 */ - (void)didApplyJoinPublicGroup:(EMGroup *)group error:(EMError *)error; === 处理进群申请 === 只有 owner 有权限处理进群申请。 1. 收到进群申请 /*! @method @brief 收到加入群组的申请 @param groupId 要加入的群组ID @param groupname 申请人的用户名 @param username 申请人的昵称 @param reason 申请理由 @discussion */ - (void)didReceiveApplyToJoinGroup:(NSString *)groupId groupname:(NSString *)groupname applyUsername:(NSString *)username reason:(NSString *)reason error:(EMError *)error; 2. 同意进群申请 /*! @method @brief 同意加入群组的申请 @param groupId 所申请的群组ID @param groupname 申请的群组名称 @param username 申请人的用户名 @param pError 错误信息 */ - (void)acceptApplyJoinGroup:(NSString *)groupId groupname:(NSString *)groupname applicant:(NSString *)username error:(EMError **)pError; /*! @method @brief 异步方法,同意加入群组的申请 @param groupId 所申请的群组ID @param groupname 申请的群组名称 @param username 申请人的用户名 @discussion 函数执行后,didAcceptApplyJoinGroup:username:error:回调会被触发 */ - (void)asyncAcceptApplyJoinGroup:(NSString *)groupId groupname:(NSString *)groupname applicant:(NSString *)username; /*! @method @brief 异步方法,同意加入群组的申请 @param groupId 所申请的群组ID @param groupname 申请的群组名称 @param username 申请人的用户名 @param completion 消息完成后的回调 @param aQueue 回调执行时的线程 */ - (void)asyncAcceptApplyJoinGroup:(NSString *)groupId groupname:(NSString *)groupname applicant:(NSString *)username completion:(void (^)(EMError *error))completion onQueue:(dispatch_queue_t)aQueue; 3. 拒绝加群申请 [[EaseMob sharedInstance].chatManager rejectApplyJoinGroup:@"1410329312753" groupname:@"群组名称" toApplicant:@"8001" reason:@"拒绝原因"]; === 加入 eGroupStyle_PublicOpenJoin 类型的群组 === 1. 同步方法 EMError *error = nil; [[EaseMob sharedInstance].chatManager joinPublicGroup:@"1410329312753" error:&error]; if (!error) { NSLog(@入群成功"); } 2. block 回调方法 EMError *error = nil; [[EaseMob sharedInstance].chatManager asyncJoinPublicGroup:@"1410329312753" completion:^(EMGroup *group, EMError *error) { if (!error) { NSLog(@"入群成功"); } } onQueue:nil]; 3. IChatManagerDelegate 回调方法 接口调用 // 加入群组 [[EaseMob sharedInstance].chatManager asyncJoinPublicGroup:@"1410329312753"]; 回调监听 /*! @method @brief 加入公开群组后的回调 @param group 群组对象 @param error 错误信息 */ - (void)didJoinPublicGroup:(EMGroup *)group error:(EMError *)error; ==== 退出群组 ==== 群主(owner)不支持退群操作,只能解散群。 退出群组分为主动退群和被动退群。被动退群即为被 owner 踢出群组。 === 主动退群 === 1. 同步方法 EMError *error = nil; [[EaseMob sharedInstance].chatManager leaveGroup:@"1410329312753" error:&error]; if (!error) { NSLog(@"退出群组成功"); } 2. block 异步方法 [[EaseMob sharedInstance].chatManager asyncLeaveGroup:@"1410329312753" completion: ^(EMGroup *group, EMGroupLeaveReason reason, EMError *error) { if (!error) { NSLog(@"退出群组成功"); } } onQueue:nil]; 3. IChatManagerDelegate 异步方法 接口调用 [[EaseMob sharedInstance].chatManager asyncLeaveGroup:@"1410329312753"]; 回调监听 /*! @method @brief 离开一个群组后的回调 @param group 所要离开的群组对象 @param reason 离开的原因 @param error 错误信息 @discussion 离开的原因包含主动退出、被别人请出、和销毁群组三种情况 */ - (void)group:(EMGroup *)group didLeave:(EMGroupLeaveReason)reason error:(EMError *)error; /*! @enum @brief 退出群组的原因 @constant eGroupLeaveReason_BeRemoved 被管理员移除出该群组 @constant eGroupLeaveReason_UserLeave 用户主动退出该群组 @constant eGroupLeaveReason_Destroyed 该群组被别人销毁 */ typedef NS_ENUM(NSInteger, EMGroupLeaveReason) { eGroupLeaveReason_BeRemoved = 1, eGroupLeaveReason_UserLeave, eGroupLeaveReason_Destroyed }; ==== 解散群组 ==== 解散群组需要 owner 权限。 1. 同步方法 EMError *error = nil; [[EaseMob sharedInstance].chatManager destroyGroup:group.groupId error:&error]; if (!error) { NSLog(@"解散成功"); } 2. block 异步方法 [[EaseMob sharedInstance].chatManager asyncDestroyGroup:group.groupId completion:^(EMGroup *group, EMGroupLeaveReason reason, EMError *error) { if (!error) { NSLog(@"解散成功"); } } onQueue:nil]; 3. IChatManagerDelegate 异步方法 接口调用 [[EaseMob sharedInstance].chatManager asyncDestroyGroup:groupId]; 回调监听 /*! @method @brief 离开一个群组后的回调 @param group 所要离开的群组对象 @param reason 离开的原因 @param error 错误信息 @discussion 离开的原因包含主动退出、被别人请出、和销毁群组三种情况 */ - (void)group:(EMGroup *)group didLeave:(EMGroupLeaveReason)reason error:(EMError *)error; ==== 修改群名称 ==== 只有 owner 有权限修改。 1. 同步方法 EMError *error = nil; // 修改群名称 EMGroup *group = [[EaseMob sharedInstance].chatManager changeGroupSubject:@"要修改的名称" forGroup:@"1410329312753" error:&error]; if (!error) { NSLog(@"修改成功"); } 2. block 异步方法 // 修改群名称 [[EaseMob sharedInstance].chatManager asyncChangeGroupSubject:@"要修改的群名称" forGroup:@"1410329312753" completion:^(EMGroup *group, EMError *error) { if (!error) { NSLog(@"修改成功"); } } onQueue:nil]; 3. IChatManagerDelegate 异步方法 接口调用 [[EaseMob sharedInstance].chatManager asyncChangeGroupSubject:@"要修改的群名称" forGroup:@"1410329312753"]; 回调监听 /*! @method @brief 群组信息更新后的回调 @param group 发生更新的群组 @param error 错误信息 @discussion 当添加/移除/更改角色/更改主题/更改群组信息之后,都会触发此回调 */ -(void)groupDidUpdateInfo:(EMGroup *)group error:(EMError *)error{ if (!error) { NSLog(@"修改成功"); } } ==== 修改群描述 ==== **不推荐使用**,只有 owner 有权限操作。 1. 同步方法 EMError *error = nil; // 修改群描述 [[EaseMob sharedInstance].chatManager changeDescription:@"修改的群描述" forGroup:@"1410329312753" error:&error]; if (!error) { NSLog(@"修改成功"); } 2. block 异步方法 // 修改群描述 [[EaseMob sharedInstance].chatManager asyncChangeDescription:@"要修改的描述" forGroup:@"1410329312753" completion:^(EMGroup *group, EMError *error) { if (!error) { NSLog(@"修改成功"); } } onQueue:nil]; 3. IChatManagerDelegate 异步方法 接口调用 // 修改群描述 [[EaseMob sharedInstance].chatManager asyncChangeDescription:@"要修改的描述" forGroup:@"1410329312753"]; 回调监听 /*! @method @brief 群组信息更新后的回调 @param group 发生更新的群组 @param error 错误信息 @discussion 当添加/移除/更改角色/更改主题/更改群组信息之后,都会触发此回调 */ -(void)groupDidUpdateInfo:(EMGroup *)group error:(EMError *)error; ===== 群成员管理 ===== ==== 移除群成员 ==== 只有 owner 权限才能调用。 /*! @method @brief 将某些人请出群组 @param occupants 要请出群组的人的用户名列表 @param groupId 群组ID @param pError 错误信息 @result 返回群组对象 @discussion 此操作需要admin/owner权限 */ - (EMGroup *)removeOccupants:(NSArray *)occupants fromGroup:(NSString *)groupId error:(EMError *__autoreleasing *)pError; /*! @method @brief 异步方法,将某些人请出群组 @param occupants 要请出群组的人的用户名列表 @param groupId 群组ID @discussion 此操作需要admin/owner权限。 函数执行完,回调groupDidUpdateInfo:error: 会被触发 */ - (void)asyncRemoveOccupants:(NSArray *)occupants fromGroup:(NSString *)groupId; /*! @method @brief 异步方法,将某些人请出群组 @param occupants 要请出群组的人的用户名列表 @param groupId 群组ID @param completion 消息完成后的回调 @param aQueue 回调block时的线程 @discussion 此操作需要admin/owner权限 */ - (void)asyncRemoveOccupants:(NSArray *)occupants fromGroup:(NSString *)groupId completion:(void (^)(EMGroup *group, EMError *error))completion onQueue:(dispatch_queue_t)aQueue; ==== 加入群黑名单 ==== 只有 owner 权限才能调用该接口,并且只有 owner 权限的才能查看群黑名单。 可以将群成员和非群成员的人加入群黑名单。 /*! @method @brief 将某些人加入群组黑名单 @param occupants 要加入黑名单的用户名列表 @param groupId 群组ID @param pError 错误信息 @result 返回群组对象 @discussion 此操作需要admin/owner权限,被加入黑名单的人,不会再被允许进入群组 */ - (EMGroup *)blockOccupants:(NSArray *)occupants fromGroup:(NSString *)groupId error:(EMError **)pError; /*! @method @brief 异步方法,将某些人加入群组黑名单 @param occupants 要加入黑名单的用户名列表 @param groupId 群组ID @discussion 此操作需要admin/owner权限,被加入黑名单的人,不会再被允许进入群组 函数执行完,回调groupDidUpdateInfo:error:会被触发 */ - (void)asyncBlockOccupants:(NSArray *)occupants fromGroup:(NSString *)groupId; /*! @method @brief 异步方法,将某些人加入群组黑名单 @param occupants 要加入黑名单的用户名列表 @param groupId 群组ID @param completion 消息完成后的回调 @param aQueue 回调block时的线程 @discussion 此操作需要admin/owner权限,被加入黑名单的人,不会再被允许进入群组 */ - (void)asyncBlockOccupants:(NSArray *)occupants fromGroup:(NSString *)groupId completion:(void (^)(EMGroup *group, EMError *error))completion onQueue:(dispatch_queue_t)aQueue; ==== 移出群黑名单 ==== 只有 owner 权限才能调用该接口,并且只有 owner 权限的才能查看群黑名单。 从群黑名单移除出去,该用户已经不在群组里了,需要重新加入群组。 /*! @method @brief 将某些人从群组黑名单中解除 @param occupants 要从黑名单中移除的用户名列表 @param groupId 群组ID @param pError 错误信息 @result 返回群组对象 @discussion 此操作需要admin/owner权限,从黑名单中移除后,可以再次进入群组 */ - (EMGroup *)unblockOccupants:(NSArray *)occupants forGroup:(NSString *)groupId error:(EMError **)pError; /*! @method @brief 异步方法,将某些人从群组黑名单中解除 @param occupants 要从黑名单中移除的用户名列表 @param groupId 群组ID @discussion 此操作需要admin/owner权限,从黑名单中移除后,可以再次进入群组 函数执行完,回调groupDidUpdateInfo:error:会被触发 */ - (void)asyncUnblockOccupants:(NSArray *)occupants forGroup:(NSString *)groupId; /*! @method @brief 异步方法,将某些人从群组黑名单中解除 @param occupants 要从黑名单中移除的用户名列表 @param groupId 群组ID @param completion 消息完成后的回调 @param aQueue 回调block时的线程 @discussion 此操作需要admin/owner权限,从黑名单中移除后,可以再次进入群组 */ - (void)asyncUnblockOccupants:(NSArray *)occupants forGroup:(NSString *)groupId completion:(void (^)(EMGroup *group, EMError *error))completion onQueue:(dispatch_queue_t)aQueue; ===== 群消息 ===== ==== 屏蔽群消息 ==== 不允许 owner 权限的调用。 /*! @method @brief 屏蔽群消息,服务器不发送消息(不能屏蔽自己创建的群,EMErrorInvalidUsername) @param groupId 要屏蔽的群ID @param pError 错误信息 @result 返回群组对象 @discussion 被屏蔽的群,服务器不再发消息 */ - (EMGroup *)blockGroup:(NSString *)groupId error:(EMError **)pError; /*! @method @brief 异步方法,屏蔽群消息,服务器不发送消息(不能屏蔽自己创建的群,EMErrorInvalidUsername) @param groupId 要取消屏蔽的群ID @param completion 消息完成后的回调 @param aQueue 回调block时的线程 @discussion 被屏蔽的群,服务器不再发消息 */ - (void)asyncBlockGroup:(NSString *)groupId completion:(void (^)(EMGroup *group, EMError *error))completion onQueue:(dispatch_queue_t)aQueue; ==== 取消屏蔽群消息 ==== 不允许 owner 权限的调用。 /*! @method @brief 取消屏蔽群消息(不能操作自己创建的群,EMErrorInvalidUsername) @param groupId 要取消屏蔽的群ID @param pError 错误信息 @result 返回群组对象 @discussion */ - (EMGroup *)unblockGroup:(NSString *)groupId error:(EMError **)pError; /*! @method @brief 异步方法,取消屏蔽群消息(不能操作自己创建的群,EMErrorInvalidUsername) @param groupId 要取消屏蔽的群ID @param completion 消息完成后的回调 @param aQueue 回调block时的线程 @discussion */ - (void)asyncUnblockGroup:(NSString *)groupId completion:(void (^)(EMGroup *group, EMError *error))completion onQueue:(dispatch_queue_t)aQueue; ===== 管理群组的 APNS 离线推送 ===== 见 [[start:300iosclientintegration:80apns#设置指定群组是否接收apns|APNS 离线推送-设置指定群组是否接收 APNS]] ===== 获取与登录者相关的群组 ===== 获取与登录者相关的群组,包括创建的和加入的。 查看所有当前登录账号所在群组,提供了五种方法 1. 同步方法 EMError *error = nil; NSArray *myGroups = [[EaseMob sharedInstance].chatManager fetchMyGroupsListWithError:&error]; if (!error) { NSLog(@"获取成功 -- %@",myGroups); } 2. block 异步方法 [[EaseMob sharedInstance].chatManager asyncFetchMyGroupsListWithCompletion:^(NSArray *groups, EMError *error) { if (!error) { NSLog(@"获取成功 -- %@",groups); } } onQueue:nil]; 3. IChatManagerDelegate 回调方法 接口调用 [[EaseMob sharedInstance].chatManager asyncFetchMyGroupsList]; 回调监听 /*! @method @brief 群组列表变化后的回调 @param groupList 新的群组列表 @param error 错误信息 */ - (void)didUpdateGroupList:(NSArray *)groupList error:(EMError *)error; 4. 取 db 中的值,必须登录成功之后才能获取到数据,该方法取到的不一定是最新的。 NSArray *groupList = [[EaseMob sharedInstance].chatManager loadAllMyGroupsFromDatabaseWithAppend2Chat:YES]; 5. 取内存中的值 该方法比较特殊,只有在您之前获取过群组列表的情况下才会有值,且不能保证最新。 NSArray *groupList = [[EaseMob sharedInstance].chatManager groupList]; ===== 获取公开群组 ===== 此操作不推荐使用,公开群太多,我们正在优化方法。 1. 同步方法 EMError *error = nil; NSArray *publicGroupList = [[EaseMob sharedInstance].chatManager fetchAllPublicGroupsWithError:&error]; if (!error) { NSLog(@"获取成功 -- %@",publicGroupList); } 2. block 异步方法 [[EaseMob sharedInstance].chatManager asyncFetchAllPublicGroupsWithCompletion:^(NSArray *groups, EMError *error) { if (!error) { NSLog(@"获取成功 -- %@",groups); } } onQueue:nil]; 3. IChatManagerDelegate 回调方法 接口调用 // 查看所有公开群组 [[EaseMob sharedInstance].chatManager asyncFetchAllPublicGroups]; 回调监听 /*! @method @brief 获取所有公开群组后的回调 @param groups 公开群组列表 @param error 错误信息 */ - (void)didFetchAllPublicGroups:(NSArray *)groups error:(EMError *)error; ---- 上一页:[[start:300iosclientintegration:90buddymgmt|好友管理]] 下一页:[[start:300iosclientintegration:75chatroommgmt|聊天室管理]]