群组管理

SDK3.3.0 release新增许多群组操作的API,请查看链接3.3.0api修改

注册群组模块回调:

//EMChatManagerDelegate
//注册群组回调
[[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.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         要禁言的成员列表<NSString>
 *  @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         要禁言的成员列表<NSString>
 *  @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     被解除的列表<NSString>
 *  @param aGroupId         群ID
 *  @param pError           错误信息
 *
 *  @result    返回群组实例
 */
- (EMGroup *)unmuteMembers:(NSArray *)aMembers
                 fromGroup:(NSString *)aGroupId
                     error:(EMError **)pError;

/*!
 *  解除禁言,需要Owner / Admin权限
 *
 *  @param aMuteMembers     被解除的列表<NSString>
 *  @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 离线推送

获取与登录者相关的群组

查看所有当前登录账号所在群组,包括创建的和加入的群组,提供了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);
}

上一页:好友管理

下一页:聊天室管理