====== 群组管理 ====== SDK3.3.0 release新增许多群组操作的API,请查看链接[[im:300iosclientintegration:3.3.0apichange|3.3.0api修改]] 注册群组模块回调: //EMGroupManagerDelegate //注册群组回调 [[EMClient sharedClient].groupManager addDelegate:self delegateQueue:nil]; //移除群组回调 [[EMClient sharedClient].groupManager removeDelegate:self]; ---- 群组分为四种类型。 /*! @enum @brief 群组类型 @constant EMGroupStylePrivateOnlyOwnerInvite 私有群组,创建完成后,只允许 Owner 邀请用户加入 @constant EMGroupStylePrivateMemberCanInvite 私有群组,创建完成后,只允许 Owner 和群成员邀请用户加入 @constant EMGroupStylePublicJoinNeedApproval 公开群组,创建完成后,只允许 Owner 邀请用户加入; 非群成员用户需发送入群申请,Owner 同意后才能入组 @constant EMGroupStylePublicOpenJoin 公开群组,创建完成后,允许非群组成员加入,不需要管理员同意 @discussion eGroupStyle+Private:私有群组,只允许群组成员邀请人进入 eGroupStyle+Public: 公有群组,允许非群组成员加入 */ typedef NS_ENUM(NSInteger, EMGroupStyle){ EMGroupStylePrivateOnlyOwnerInvite = 0, EMGroupStylePrivateMemberCanInvite, EMGroupStylePublicJoinNeedApproval, EMGroupStylePublicOpenJoin, }; ===== 群组操作 ===== ==== 创建群组 ==== 目前创建群组支持的配置属性有: * 群名称 * 群描述 * 群人数(不支持修改,目前上限为2000人) * 群类型(即上面提到的四种群组类型) 同步方法: EMError *error = nil; EMGroupOptions *setting = [[EMGroupOptions alloc] init]; setting.maxUsersCount = 500; setting.IsInviteNeedConfirm​ = NO; //邀请群成员时,是否需要发送邀请通知.若NO,被邀请的人自动加入群组 setting.style = EMGroupStylePublicOpenJoin;// 创建不同类型的群组,这里需要才传入不同的类型 EMGroup *group = [[EMClient sharedClient].groupManager createGroupWithSubject:@"群组名称" description:@"群组描述" invitees:@[@"6001",@"6002"] message:@"邀请您加入群组" setting:setting error:&error]; if(!error){ NSLog(@"创建成功 -- %@",group); } ==== 获取群详情 ==== /*! * 获取群组详情,包含群组ID,群组名称,群组描述,群组基本属性,群组Owner, 群组管理员 * * 同步方法,会阻塞当前线程 * * @param aGroupId 群组ID * @param pError 错误信息 * * @return 群组 */ - (EMGroup *)getGroupSpecificationFromServerWithId:(NSString *)aGroupId error:(EMError **)pError; /*! * 获取群组详情,包含群组ID,群组名称,群组描述,群组基本属性,群组Owner, 群组管理员 * * @param aGroupId 群组ID * @param aCompletionBlock 完成的回调 */ - (void)getGroupSpecificationFromServerWithId:(NSString *)aGroupID completion:(void (^)(EMGroup *aGroup, EMError *aError))aCompletionBlock; //调用: EMError *error = nil; EMGroup *group = [[EMClient sharedClient].groupManager getGroupSpecificationFromServerWithId:@"groupId" error:&error]; ==== 加入群组 ==== 群组分4种类型,目前 SDK 不支持自主选择是否进群。我们将针对每种类型讲解加入群组要进行的操作。 * EMGroupStylePrivateOnlyOwnerInvite: 该类型的群组只允许群主(Owner)添加人进群,其他人无法主动加入。 * EMGroupStylePrivateMemberCanInvite: (推荐使用)该类型的群组允许所有群成员添加人进群,其他人无法主动加入。 * EMGroupStylePublicJoinNeedApproval: (推荐使用)该类型的群组只允许群主(Owner)添加人进群;其他人想进入群组的话,需要先发送申请,群主同意申请之后才能进群;其他人无法主动加入。 * EMGroupStylePublicOpenJoin: (不推荐使用)该类型的群组允许任何人主动加入群组。 === 添加人进群 === 被添加的人会收到回调: /*! @method @brief 用户B设置了自动同意,用户A邀请用户B入群,SDK 内部进行同意操作之后,用户B接收到该回调 */ - (void)didJoinedGroup:(EMGroup *)aGroup inviter:(NSString *)aInviter message:(NSString *)aMessage; 加人接口如下: EMError *error = nil; [[EMClient sharedClient].groupManager addOccupants:@[@"user1"] toGroup:@"groupId" welcomeMessage:@"message" error:&error]; === 发送进群申请 === // 申请加入需要审核的公开群组 EMError *error = nil; [[EMClient sharedClient].groupManager applyJoinPublicGroup:@"groupId" message:@"" error:nil]; === 处理进群申请 === 只有 Owner 有权限处理进群申请。 1. 收到进群申请。 /*! @method @brief 用户A向群组G发送入群申请,群组G的群主O会接收到该回调 */ - (void)didReceiveJoinGroupApplication:(EMGroup *)aGroup applicant:(NSString *)aApplicant reason:(NSString *)aReason; 2. 同意进群申请。 /*! @method @brief 同意加入群组的申请 @param aGroupId 所申请的群组 ID @param aGroupname 申请的群组名称 @param aUsername 申请人的 username @discussion 需要 Owner 权限 同步方法,会阻塞当前线程 */ - (EMError *)acceptJoinApplication:(NSString *)aGroupId groupname:(NSString *)aGroupname applicant:(NSString *)aUsername; //调用: //EMError *error = [[EMClient sharedClient].groupManager acceptJoinApplication:@"groupId" groupname:@"subject" applicant:@"user1"]; 3. 拒绝加群申请。 EMError *error = [[EMClient sharedClient].groupManager declineJoinApplication:@"groupId" groupname:@"subject" applicant:@"user1" reason:@"拒绝的原因"]; === 加入 EMGroupStylePublicOpenJoin 类型的群组 === EMError *error = nil; [[EMClient sharedClient].groupManager joinPublicGroup:@"1410329312753" error:&error]; ==== 退出群组 ==== 群主(Owner)不支持退群操作,只能解散群。 退出群组分为主动退群和被动退群。被动退群即为被 Owner 踢出群组。 === 主动退群 === EMError *error = nil; [[EMClient sharedClient].groupManager leaveGroup:@"1410329312753" error:&error]; === 被动退群 === 会通过以下回调通知被踢者。 /*! @method @brief 接收到离开群组,群组被销毁或者被从群中移除 */ - (void)didReceiveLeavedGroup:(EMGroup *)aGroup reason:(EMGroupLeaveReason)aReason; ==== 解散群组 ==== 解散群组需要 Owner 权限。 EMError *error = nil; [[EMClient sharedClient].groupManager destroyGroup:@"groupId" error:&error]; if (!error) { NSLog(@"解散成功"); } ==== 修改群名称 ==== 只有 Owner 有权限修改。 EMError *error = nil; // 修改群名称 [[EMClient sharedClient].groupManager changeGroupSubject:@"要修改的名称" forGroup:@"1410329312753" error:&error]; if (!error) { NSLog(@"修改成功"); } ==== 修改群描述 ==== ** 不推荐使用 **,只有 Owner 有权限操作。 EMError *error = nil; // 修改群描述 EMGroup* group = [[EMClient sharedClient].groupManager changeDescription:@"修改的群描述" forGroup:@"1410329312753" error:&error]; if (!error) { NSLog(@"修改成功"); } ==== 获取群组成员列表 ==== /*! * 获取群组成员列表 * * @param aGroupId 群组ID * @param aCursor 游标 * @param aPageSize 获取多少条 * @param pError 错误信息 * * @return 列表和游标 */ - (EMCursorResult *)getGroupMemberListFromServerWithId:(NSString *)aGroupId cursor:(NSString *)aCursor pageSize:(NSInteger)aPageSize error:(EMError **)pError; /*! * 获取群组成员列表 * * @param aGroupId 群组ID * @param aCursor 游标 * @param aPageSize 获取多少条 * @param aCompletionBlock 完成的回调 */ - (void)getGroupMemberListFromServerWithId:(NSString *)aGroupId cursor:(NSString *)aCursor pageSize:(NSInteger)aPageSize completion:(void (^)(EMCursorResult *aResult, EMError *aError))aCompletionBlock; //调用 EMError *error = nil; EMCursorResult* result = [[EMClient sharedClient].groupManager getGroupMemberListFromServerWithId:@"groupId" cursor:@"cursor" pageSize:50 error:&error]; if (!error) { NSLog(@"获取成功"); // result.list: 返回的成员列表,内部的值是成员的环信id。 // result.cursor: 返回的cursor,如果要取下一页的列表,需要将这个cursor当参数传入到获取群组成员列表中。 } ==== 获取群组黑名单列表 ==== 需要owner或admin权限 /*! * 获取群组黑名单列表, 需要owner/admin权限 * * @param aGroupId 群组ID * @param aPageNum 获取第几页 * @param aPageSize 获取多少条 * @param pError 错误信息 */ - (NSArray *)getGroupBlacklistFromServerWithId:(NSString *)aGroupId pageNumber:(NSInteger)aPageNum pageSize:(NSInteger)aPageSize error:(EMError **)pError; /*! * 获取群组黑名单列表, 需要owner/admin权限 * * @param aGroupId 群组ID * @param aPageNum 获取第几页 * @param aPageSize 获取多少条 * @param aCompletionBlock 完成的回调 */ - (void)getGroupBlacklistFromServerWithId:(NSString *)aGroupId pageNumber:(NSInteger)aPageNum pageSize:(NSInteger)aPageSize completion:(void (^)(NSArray *aList, EMError *aError))aCompletionBlock; //调用 EMError *error = nil; EMGroup* group = [[EMClient sharedClient].groupManager getGroupBlacklistFromServerWithId:@"groupId" pageNumber:1 pageSize:50 error:&error]; if (!error) { NSLog(@"获取成功"); } ==== 获取被禁言列表 ==== /*! * 获取群组被禁言列表 * * @param aGroupId 群组ID * @param aPageNum 获取第几页 * @param aPageSize 获取多少条 * @param pError 错误信息 */ - (NSArray *)getGroupMuteListFromServerWithId:(NSString *)aGroupId pageNumber:(NSInteger)aPageNum pageSize:(NSInteger)aPageSize error:(EMError **)pError; /*! * 获取群组被禁言列表 * * @param aGroupId 群组ID * @param aPageNum 获取第几页 * @param aPageSize 获取多少条 * @param aCompletionBlock 完成的回调 */ - (void)getGroupMuteListFromServerWithId:(NSString *)aGroupId pageNumber:(NSInteger)aPageNum pageSize:(NSInteger)aPageSize completion:(void (^)(NSArray *aList, EMError *aError))aCompletionBlock; //调用 EMError *error = nil; EMGroup* group = [[EMClient sharedClient].groupManager getGroupMuteListFromServerWithId:@"groupId" pageNumber:1 pageSize:50 error:&error]; if (!error) { NSLog(@"获取成功"); } ==== 获取群公告 ==== /*! * 获取群公告 * * @param aGroupId 群组ID * @param pError 错误信息 * * @result 群声明, 失败返回nil */ - (NSString *)getGroupAnnouncementWithId:(NSString *)aGroupId error:(EMError **)pError; /*! * 获取群公告 * * @param aGroupId 群组ID * @param aCompletionBlock 完成的回调 */ - (void)getGroupAnnouncementWithId:(NSString *)aGroupId completion:(void (^)(NSString *aAnnouncement, EMError *aError))aCompletionBlock; //调用 [[EMClient sharedClient].groupManager getGroupAnnouncementWithId:@"groupId" completion:^(NSString *aAnnouncement, EMError *aError) { if (!aError) { NSLog(@"获取成功"); } }]; ==== 修改群公告 ==== /*! * 修改群公告,需要Owner / Admin权限 * * @param aGroupId 群ID * @param aAnnouncement 群公告 * @param pError 错误信息 * * @result 群实例 */ - (EMGroup *)updateGroupAnnouncementWithId:(NSString *)aGroupId announcement:(NSString *)aAnnouncement error:(EMError **)pError; /*! * 修改群公告,需要Owner / Admin权限 * * @param aGroupId 群ID * @param aAnnouncement 群公告 * @param aCompletionBlock 完成的回调 */ - (void)updateGroupAnnouncementWithId:(NSString *)aGroupId announcement:(NSString *)aAnnouncement completion:(void (^)(EMGroup *aGroup, EMError *aError))aCompletionBlock; //调用 [[EMClient sharedClient].groupManager updateGroupAnnouncementWithId:@"groupid" announcement:@"群公告" completion:^(EMGroup *aGroup, EMError *aError) { if (!aError) { NSLog(@"修改成功"); } }]; 当群主或者管理员修改群公告时,其它群成员会收到群公告更新的回调 /*! * 群公告有更新 * * @param aGroup 群组 * @param aAnnouncement 群公告 */ - (void)groupAnnouncementDidUpdate:(EMGroup *)aGroup announcement:(NSString *)aAnnouncement; ==== 获取群共享文件列表 ==== /*! * 获取群共享文件列表 * * @param aGroupId 群组ID * @param aPageNum 获取第几页 * @param aPageSize 获取多少条 * @param pError 错误信息 * * @result 群共享文件列表 */ - (NSArray *)getGroupFileListWithId:(NSString *)aGroupId pageNumber:(NSInteger)aPageNum pageSize:(NSInteger)aPageSize error:(EMError **)pError; /*! * 获取群共享文件列表 * * @param aGroupId 群组ID * @param aPageNum 获取第几页 * @param aPageSize 获取多少条 * @param aCompletionBlock 完成的回调 */ - (void)getGroupFileListWithId:(NSString *)aGroupId pageNumber:(NSInteger)aPageNum pageSize:(NSInteger)aPageSize completion:(void (^)(NSArray *aList, EMError *aError))aCompletionBlock; //调用 [[EMClient sharedClient].groupManager getGroupFileListWithId:@"groupId" pageNumber:1 pageSize:10 completion:^(NSArray *aList, EMError *aError) { if (!aError) { NSLog(@"获取成功"); } }]; ==== 上传下载群共享文件 ==== /*! * 上传群共享文件 * * @param aGroupId 群ID * @param aFilePath 文件路径 * @param pError 错误信息 * * @result 群实例 */ - (void)uploadGroupSharedFileWithId:(NSString *)aGroupId filePath:(NSString*)aFilePath progress:(void (^)(int progress))aProgressBlock completion:(void (^)(EMGroupSharedFile *aSharedFile, EMError *aError))aCompletionBlock; /*! * 下载群共享文件 * * @param aGroupId 群ID * @param aFilePath 文件路径 * @param aSharedFileId 共享文件ID * @param aProgressBlock 文件下载进度回调block * @param aCompletionBlock 完成回调block */ - (void)downloadGroupSharedFileWithId:(NSString *)aGroupId filePath:(NSString *)aFilePath sharedFileId:(NSString *)aSharedFileId progress:(void (^)(int progress))aProgressBlock completion:(void (^)(EMGroup *aGroup, EMError *aError))aCompletionBlock; //调用 [[EMClient sharedClient].groupManager uploadGroupSharedFileWithId:@"groupId" filePath:@"filePath" progress:^(int progress){ } completion:^(EMGroupSharedFile *aSharedFile, EMError *aError) { if (!aError) { NSLog(@"上传成功"); } }]; [[EMClient sharedClient].groupManager downloadGroupSharedFileWithId:@"groupId" filePath:@"filePath" sharedFileId:@"fileId" progress:^(int progress) { } completion:^(EMGroup *aGroup, EMError *aError) { if (!aError) { NSLog(@"下载成功"); } }]; 当群中有人上传群共享文件时,其它群成员会受到新有群文件上传的回调 /*! * 有用户上传群共享文件 * * @param aGroup 群组 * @param aSharedFile 共享文件 */ - (void)groupFileListDidUpdate:(EMGroup *)aGroup addedSharedFile:(EMGroupSharedFile *)aSharedFile; ==== 删除群共享文件 ==== /*! * 删除群共享文件 * * @param aGroupId 群ID * @param aSharedFileId 共享文件ID * @param pError 错误信息 * * @result 群实例 */ - (EMGroup *)removeGroupSharedFileWithId:(NSString *)aGroupId sharedFileId:(NSString *)aSharedFileId error:(EMError **)pError; /*! * 删除群共享文件 * * @param aGroupId 群ID * @param aSharedFileId 共享文件ID * @param aCompletionBlock 完成的回调 */ - (void)removeGroupSharedFileWithId:(NSString *)aGroupId sharedFileId:(NSString *)aSharedFileId completion:(void (^)(EMGroup *aGroup, EMError *aError))aCompletionBlock; //调用 EMError *error = nil; [[EMClient sharedClient].groupManager removeGroupSharedFileWithId:@"groupId" sharedFileId:@"fileId" error:&error]; if (!error) { NSLog(@"删除成功"); } 当群中有人删除群共享文件时,其它群成员会受到有人删除群文件的回调 /*! * 有用户删除群共享文件 * * @param aGroup 群组 * @param aFileId 共享文件ID */ - (void)groupFileListDidUpdate:(EMGroup *)aGroup removedSharedFile:(NSString *)aFileId; ==== 修改群扩展 ==== /*! * 修改群扩展信息,需要Owner权限 * * @param aGroupId 群ID * @param aExt 扩展信息 * @param pError 错误信息 * * @result 群实例 */ - (EMGroup *)updateGroupExtWithId:(NSString *)aGroupId ext:(NSString *)aExt error:(EMError **)pError; /*! * 修改群扩展信息,需要Owner权限 * * @param aGroupId 群ID * @param aExt 扩展信息 * @param aCompletionBlock 完成的回调 */ - (void)updateGroupExtWithId:(NSString *)aGroupId ext:(NSString *)aExt completion:(void (^)(EMGroup *aGroup, EMError *aError))aCompletionBlock; //调用 [[EMClient sharedClient].groupManager updateGroupExtWithId:@"groupId" ext:@"ext" completion:^(EMGroup *aGroup, EMError *aError) { if (!aError) { NSLog(@"修改成功"); } }]; ===== 群成员管理 ===== ==== 改变群主 ==== 只有 Owner 权限才能调用该接口。 //**Api:**// /*! * 改变群主,需要Owner权限 * * 同步方法,会阻塞当前线程 * * @param aGroupId 群ID * @param aNewOwner 新群主 * @param pError 错误信息 * * @result 返回群组实例 */ - (EMGroup *)updateGroupOwner:(NSString *)aGroupId newOwner:(NSString *)aNewOwner error:(EMError **)pError; /*! * 改变群主,需要Owner权限 * * @param aGroupId 群ID * @param aNewOwner 新群主 * @param aCompletionBlock 完成的回调 */ - (void)updateGroupOwner:(NSString *)aGroupId newOwner:(NSString *)aNewOwner completion:(void (^)(EMGroup *aGroup, EMError *aError))aCompletionBlock; //**Delegate:**// /*! * 群组创建者有更新 * * @param aGroup 群组 * @param aNewOwner 新群主 * @param aOldOwner 旧群主 */ - (void)groupOwnerDidUpdate:(EMGroup *)aGroup newOwner:(NSString *)aNewOwner oldOwner:(NSString *)aOldOwner; //**调用示例:**// EMError *error = nil; [[EMClient sharedClient].groupManager updateGroupOwner:@"groupId" newOwner:@"newOwner" error:&error]; ==== 添加群组管理员 ==== 只有 Owner 权限才能调用。 //**Api:**// /*! * 添加群组管理员,需要Owner权限 * * 同步方法,会阻塞当前线程 * * @param aAdmin 要添加的群组管理员 * @param aGroupId 群ID * @param pError 错误信息 * * @result 返回群组实例 */ - (EMGroup *)addAdmin:(NSString *)aAdmin toGroup:(NSString *)aGroupId error:(EMError **)pError; /*! * 添加群组管理员,需要Owner权限 * * @param aAdmin 要添加的群组管理员 * @param aGroupId 群ID * @param aCompletionBlock 完成的回调 */ - (void)addAdmin:(NSString *)aAdmin toGroup:(NSString *)aGroupId completion:(void (^)(EMGroup *aGroup, EMError *aError))aCompletionBlock; //**Delegate:**// /*! * 有成员被加入管理员列表 * * @param aGroup 群组 * @param aAdmin 加入管理员列表的成员 */ - (void)groupAdminListDidUpdate:(EMGroup *)aGroup addedAdmin:(NSString *)aAdmin; //**调用示例:**// EMError *error = nil; [[EMClient sharedClient].groupManager addAdmin:@"adminName" toGroup:@"groupId" error:&error] ==== 移除群组管理员 ==== 只有 Owner 权限才能调用。 //**Api:**// /*! * 移除群组管理员,需要Owner权限 * * 同步方法,会阻塞当前线程 * * @param aAdmin 要移除的群组管理员 * @param aGroupId 群ID * @param pError 错误信息 * * @result 返回群组实例 */ - (EMGroup *)removeAdmin:(NSString *)aAdmin fromGroup:(NSString *)aGroupId error:(EMError **)pError; /*! * 移除群组管理员,需要Owner权限 * * @param aAdmin 要添加的群组管理员 * @param aGroupId 群ID * @param aCompletionBlock 完成的回调 */ - (void)removeAdmin:(NSString *)aAdmin fromGroup:(NSString *)aGroupId completion:(void (^)(EMGroup *aGroup, EMError *aError))aCompletionBlock; //**Delegate:**// /*! * 有成员被移出禁言列表 * * @param aGroup 群组 * @param aMutedMembers 移出禁言列表的成员 */ - (void)groupMuteListDidUpdate:(EMGroup *)aGroup removedMutedMembers:(NSArray *)aMutedMembers; //**调用示例:**// EMError *error = nil; [[EMClient sharedClient].groupManager removeAdmin:@"adminName" fromGroup:@"groupId" error:&error] ==== 移除群组成员 ==== 只有 Owner或者Admin 权限才能调用。 /*! @method @brief 将群成员移出群组 @param aOccupants 要请出群组的人的用户名列表 @param aGroupId 群组ID @param pError 错误信息 @result 返回群组对象 @discussion 此操作需要 Owner 权限 同步方法,会阻塞当前线程 */ - (EMGroup *)removeOccupants:(NSArray *)aOccupants fromGroup:(NSString *)aGroupId error:(EMError **)pError; /*! * 将群成员移出群组 * * @param aUsers 要移出群组的用户列表 * @param aGroupId 群组ID * @param aCompletionBlock 完成的回调 */ - (void)removeMembers:(NSArray *)aUsers fromGroup:(NSString *)aGroupId completion:(void (^)(EMGroup *aGroup, EMError *aError))aCompletionBlock; //**调用示例:**// EMError *error = nil; [[EMClient sharedClient].groupManager removeOccupants:@[@"user1"] fromGroup:@"1410329312753" error:&error]; ==== 禁言群成员 ==== 权限高者可禁言权限低者,反之不允许 //**Api:**// /*! * 将一组成员禁言,需要Owner / Admin权限 * * 同步方法,会阻塞当前线程 * * @param aMuteMembers 要禁言的成员列表 * @param aMuteMilliseconds 禁言时长 * @param aGroupId 群ID * @param pError 错误信息 * * @result 返回群组实例 */ - (EMGroup *)muteMembers:(NSArray *)aMuteMembers muteMilliseconds:(NSInteger)aMuteMilliseconds fromGroup:(NSString *)aGroupId error:(EMError **)pError; /*! * 将一组成员禁言,需要Owner / Admin权限 * * @param aMuteMembers 要禁言的成员列表 * @param aMuteMilliseconds 禁言时长 * @param aGroupId 群ID * @param aCompletionBlock 完成的回调 */ - (void)muteMembers:(NSArray *)aMuteMembers muteMilliseconds:(NSInteger)aMuteMilliseconds fromGroup:(NSString *)aGroupId completion:(void (^)(EMGroup *aGroup, EMError *aError))aCompletionBlock; //**Delegate:**// /*! * 有成员被加入禁言列表 * * @param aGroup 群组 * @param aMutedMembers 被禁言的成员 * @param aMuteExpire 禁言失效时间,当前不可用 */ - (void)groupMuteListDidUpdate:(EMGroup *)aGroup addedMutedMembers:(NSArray *)aMutedMembers muteExpire:(NSInteger)aMuteExpire; //**调用示例:**// EMError *error = nil; [[EMClient sharedClient].groupManager muteMembers:@[userName] muteMilliseconds:-1 fromGroup:@"groupId" error:&error]; ==== 解除禁言 ==== 权限高者可禁言权限低者,反之不允许 //**Api:**// /*! * 解除禁言,需要Owner / Admin权限 * * 同步方法,会阻塞当前线程 * * @param aMuteMembers 被解除的列表 * @param aGroupId 群ID * @param pError 错误信息 * * @result 返回群组实例 */ - (EMGroup *)unmuteMembers:(NSArray *)aMembers fromGroup:(NSString *)aGroupId error:(EMError **)pError; /*! * 解除禁言,需要Owner / Admin权限 * * @param aMuteMembers 被解除的列表 * @param aGroupId 群ID * @param aCompletionBlock 完成的回调 */ - (void)unmuteMembers:(NSArray *)aMembers fromGroup:(NSString *)aGroupId completion:(void (^)(EMGroup *aGroup, EMError *aError))aCompletionBlock; //**Delegate:**// /*! * 有成员被移出禁言列表 * * @param aGroup 群组 * @param aMutedMembers 移出禁言列表的成员 */ - (void)groupMuteListDidUpdate:(EMGroup *)aGroup removedMutedMembers:(NSArray *)aMutedMembers; //**调用示例:**// EMError *error = nil; [[EMClient sharedClient].groupManager unmuteMembers:@[userName] fromGroup:@"groupId" error:&error]; ==== 加入群黑名单 ==== 只有 Owner 权限才能调用该接口,并且只有 Owner 权限的才能查看群黑名单。 可以将群成员和非群成员的人加入群黑名单。 /*! @method @brief 将某些人加入群组黑名单 @param aOccupants 要加入黑名单的用户名列表 @param aGroupId 群组ID @param pError 错误信息 @result 返回群组对象 @discussion 此操作需要 Owner 权限。被加入黑名单的人,不会再被允许进入群组。 同步方法,会阻塞当前线程 */ - (EMGroup *)blockOccupants:(NSArray *)aOccupants fromGroup:(NSString *)aGroupId error:(EMError **)pError; //调用: //EMError *error = nil; //EMGroup *group = [[EMClient sharedClient].groupManager blockOccupants:@[@"user1"] fromGroup:@"1410329312753" error:&error]; ==== 移出群黑名单 ==== 只有 Owner 权限才能调用该接口,并且只有 Owner 权限的才能查看群黑名单。 从群黑名单移除出去,该用户已经不在群组里了,需要重新加入群组。 /*! @method @brief 将某些人从群组黑名单中解除 @param aOccupants 要从黑名单中移除的用户名列表 @param aGroupId 群组ID @param pError 错误信息 @result 返回群组对象 @discussion 此操作需要 Owner 权限。从黑名单中移除后不再是群组成员,需要重新加入。 同步方法,会阻塞当前线程 */ - (EMGroup *)unblockOccupants:(NSArray *)aOccupants forGroup:(NSString *)aGroupId error:(EMError **)pError; //调用: //EMError *error = nil; //EMGroup *group = [[EMClient sharedClient].groupManager unblockOccupants:@[@"user1"] forGroup:@"1410329312753" error:&error]; ===== 群消息 ===== ==== 屏蔽/取消屏蔽群组消息 ==== 不允许 Owner 权限的调用。 /*! * 屏蔽群消息,服务器不再发送此群的消息给用户,owner不能屏蔽群消息 * * @param aGroupId 要屏蔽的群ID * @param aCompletionBlock 完成的回调 */ - (void)blockGroup:(NSString *)aGroupId completion:(void (^)(EMGroup *aGroup, EMError *aError))aCompletionBlock; /*! * 取消屏蔽群消息 * * @param aGroupId 要取消屏蔽的群ID * @param aCompletionBlock 完成的回调 */ - (void)unblockGroup:(NSString *)aGroupId completion:(void (^)(EMGroup *aGroup, EMError *aError))aCompletionBlock; ===== 管理群组的 APNS 离线推送 ===== 见 [[im:300iosclientintegration:75apns#设置指定群组是否接收apns|APNS离线推送-设置指定群组是否接收APNS]]。 ===== 获取与登录者相关的群组 ===== 查看所有当前登录账号所在群组,包括创建的和加入的群组,提供了2种方法。 1.从服务器获取与我相关的群组列表 EMError *error = nil; NSArray *myGroups = [[EMClient sharedClient].groupManager getJoinedGroupsFromServerWithPage:1 pageSize:50 error:&error]; if (!error) { NSLog(@"获取成功 -- %@",myGroups); } 2. 取内存中的值 从内存中获取所有群组,第一次从数据库加载 NSArray *groupList = [[EMClient sharedClient].groupManager getJoinedGroups]; ===== 获取公开群组 ===== 获取指定范围内的公开群。 EMError *error = nil; EMCursorResult *result = [[EMClient sharedClient].groupManager getPublicGroupsFromServerWithCursor:nil pageSize:50 error:&error]; if (!error) { NSLog(@"获取成功 -- %@",result); } ---- 上一页:[[im:300iosclientintegration:50buddymgm|好友管理]] 下一页:[[im:300iosclientintegration:70chatroommgmt|聊天室管理]]