# 群组
### 群组功能概述
SDK 提供3中群组类型分别为普通群、固定群、部门群,固定群和部门群都只能由后台创建,且移动端不能进行退群操作。部门群是在组织架构创建部门的时候,可以选择是否创建部门群 ,适用于部门内部。
typedef NS_ENUM(NSInteger, QDGroupType) {
QDGroupTypePro = 0, /** 个人群*/
QDGroupTypeFix = 1, /** 固定群*/
QDGroupTypeDepart = 3, /** 部门群*/
};
### 获取群组
SDK 在登录成功后,会对本地群信息进行同步,所以一般只需要调用本地缓存接口获取群就可以了。SDK 提供了批量获取自己群的接口、以及根据群类型和单个群 id 查询的接口。 同样 SDK 也提供了远程获取群信息的接口。
本地获取
本地获取所有群组
```
@interface QDDataHandler : NSObject
/**
获取群组列表
*/
+ (NSArray *)getGroupList;
@end
```
本地根据群 Id 获取群组
```
@interface QDDataHandler : NSObject
/**
根据群组ID获取群组
@param groupID 群组ID
@return 群组对象
*/
+ (QDGroup *)getGroupByGroupID:(NSString *)groupID;
@end
```
远程获取群组列表
```
@interface QDIM: NSObject
/**
获取自己的群组列表
*/
- (void)getMyGroupsCompletion:(void (^ __nullable )(NSArray<QDGroup *> *groups, NSError *error))completionBlock;
@end
```
创建群组
```
@interface QDIM: NSObject
/**
创建群组
@param groupName 群组名称
@param userList 用户数组
@param pic 用户的ID数组
@param desc 群组描述
*/
- (void)createGroup:(NSString *)groupName
userList:(NSArray<QDUser *> *)userList
pic:(nullable NSString *)pic
describe:(nullable NSString *)desc
completion:(void(^ __nullable )(QDGroup *group, NSError *error))completionBlock;
@end
```
添加群成员
```
/**
群组邀请
@param groupID 群组ID
@param userList 邀请用户列表
@param completionBlock 回调
*/
- (void)inviteGroupMembersForGroupID:(NSString *)groupID
userList:(NSArray<QDUser *> *)userList
completion:(void(^ __nullable )(NSError *error))completionBlock;
```
退出群组
```
/**
退出群组
@param groupID 群组ID
@param completionBlock 回调
*/
- (void)quitGroupForGroupID:(NSString *)groupID
completion:(void(^ __nullable)(NSError *error))completionBlock;
```
群组踢人
```
/**
群组踢人
@param groupID 群组ID
@param userList 用户列表(用户ID)
@param completionBlock 回调
*/
- (void)removeGroupMembersForGroupID:(NSString *)groupID
userList:(NSArray *)userList
completion:(void(^ __nullable )(NSError *error))completionBlock;
```
解散群组
```
/**
解散群组
@param groupID 群组ID
@param completionBlock 回调
*/
- (void)dissolveGroupForGroupID:(NSString *)groupID
completion:(void(^ __nullable)(NSError *error))completionBlock;
```
下面是修改群信息的相关接口
```
/**
修改群组名称
@param groupID 群组ID
@param groupName 新的群组名称
@param completionBlock 回调
*/
- (void)modifyGroupNameForGroupID:(NSString *)groupID
groupName:(NSString *)groupName
completion:(void(^ __nullable )(NSError *error))completionBlock;
/**
修改群组头像
@param groupID 群组ID
@param groupAvatar 新的群组头像地址
@param completionBlock 回调
*/
- (void)modifyGroupAvatarForGroupID:(NSString *)groupID
groupAvatar:(NSString *)groupAvatar
completion:(void(^ __nullable )(NSError *error))completionBlock;
/**
修改群组描述
@param groupID 群组ID
@param groupIntro 新的群组描述
@param completionBlock 回调
*/
- (void)modifyGroupIntroForGroupID:(NSString *)groupID
groupIntro:(NSString *)groupIntro
completion:(void(^ __nullable)(NSError *error))completionBlock;
/**
获取群公告列表
@param groupID 群组ID
@param completionBlock 回调
*/
- (void)getGroupNoticeListForGroupID:(NSString *)groupID
completion:(void (^ __nullable )(NSArray<QDGroupNotice *> *groupNotices, NSError *error))completionBlock;
/**
新增群公告
@param groupID 群组ID
@param groupNotice 群公告
@param completionBlock 回调
*/
- (void)addGroupNoticeForGroupID:(NSString *)groupID
groupNotice:(NSString *)groupNotice
completion:(void(^ __nullable)(QDGroupNotice *groupNotice, NSError *error))completionBlock;
/**
删除群公告
@param groupID 群组ID
@param groupNoticeID 群公告ID
@param completionBlock 回调
*/
- (void)removeGroupNoticeForGroupID:(NSString *)groupID
GroupNoticeID:(NSString *)groupNoticeID
completion:(void(^ __nullable)(NSError *error))completionBlock;
/**
修改群昵称
@param groupID 群组ID
@param userID 用户ID
@param nickname 用户昵称
@param completionBlock 回调
*/
- (void)modifyGroupNicknameForGroupID:(NSString *)groupID
userID:(NSString *)userID
nickname:(NSString *)nickname
completion:(void(^ __nullable)(NSError *error))completionBlock;
/**
转让群主
@param groupID 群组ID
@param userID 要转让的用户ID
@param completionBlock 回调
*/
- (void)transferGroupOwnerForGroupID:(NSString *)groupID
toUserID:(NSString *)userID
completion:(void(^ __nullable)(NSError *error))completionBlock;
/**
设置/取消群管理员
@param groupID 群组ID
@param userID 用户ID
@param isAdministrator 是否是管理员
@param completionBlock 回调
*/
- (void)setGroupManagerForGroupID:(NSString *)groupID
userID:(NSString *)userID
isAdministrator:(BOOL)isAdministrator
completion:(void(^ __nullable)(NSError *error))completionBlock;
/**
获取群共享的文件列表
@param groupID 群组ID
@param completionBlock 回调
*/
- (void)getGroupShareFileListForGroupID:(NSString *)groupID
completion:(void(^ __nullable )(NSArray<QDFileModel *> * __nullable fileList, NSError * __nullable error))completionBlock;
/**
删除群共享文件
@param groupID 群组ID
@param fileID 文件ID
@param completionBlock 回调
*/
- (void)delGroupShareFileForGroupID:(NSString *)groupID
fileID:(NSString *)fileID
compltion:(void(^ __nullable)(NSError * __nullable error))completionBlock;
/**
设置群消息屏蔽
@param groupID 群组ID
@param isShield 是否屏蔽
@param completionBlock 回调
*/
- (void)setGroupMsgShieldForGroupID:(NSString *)groupID
isShield:(BOOL)isShield
compltion:(void(^ __nullable)(NSError * __nullable error))completionBlock;
/**
设置群禁言(只允许群组或者全管理员发消息)
@param groupID 群组ID
@param isShutup 是否禁言
@param completionBlock 回调
*/
- (void)setGroupShutupForGroupID:(NSString *)groupID
isShutup:(BOOL)isShutup
compltion:(void(^ __nullable)(NSError * __nullable error))completionBlock;
```
协议监听 `QDGroupManagerDelegate`
通过 以下接口来添加和移除监听
```
/**
添加群组委托
@param delegate 群组委托
*/
- (void)addGroupDelegate:(id<QDGroupManagerDelegate>)delegate;
/**
删除群组委托
@param delegate 群组委托
*/
- (void)removeGroupDelegate:(id<QDGroupManagerDelegate>)delegate;
```
```
@protocol QDGroupManagerDelegate <NSObject>
@optional;
/**
群组增加回调
@param group 添加的群组
*/
- (void)onGroupAdded:(QDGroup *)group;
/**
群组更新回调
@param group 更新的群组
*/
- (void)onGroupUpdated:(QDGroup *)group;
/**
群组移除回调
@param group 被移除的群组
*/
- (void)onGroupRemoved:(QDGroup *)group;
/**
群组成员变动回调,包括数量增减以及成员属性变动
@param group 变动的群组
*/
- (void)onGroupMemeberChanged:(QDGroup *)group;
@end
```