群组管理
SDK3.3.0 release新增许多群组操作的API,请查看链接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 要禁言的成员列表<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];