# 群组 ### 群组功能概述 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 ```