feat: 重构分享功能 - 将各平台分享逻辑整理到对应Manager中

- 新增 WechatShareManager:封装微信分享逻辑,支持ShareContent对象
- 增强 DouyinShareManager:新增ShareContent支持和分享引导功能
- 优化 QQShareManager:支持截图/纯文本分享类型自动识别
- 重构 SharePanel:简化为UI调度层,移除具体分享实现
- 实现职责分离:各Manager专注自己的平台分享逻辑
- 提升可维护性:修改某平台不影响其他平台
- 增强可扩展性:新增分享平台更容易实现
This commit is contained in:
joywayer
2025-06-17 19:55:44 +08:00
parent 1666d6cf24
commit 2296c65974
13 changed files with 3730 additions and 2 deletions

View File

@@ -0,0 +1,179 @@
//
// QQShareManager.h
// msext
//
// Created on 2025/06/15.
// Copyright © 2025年. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSInteger, QQShareType) {
QQShareTypeText, // 纯文本分享
QQShareTypeImage, // 图片分享
QQShareTypeNews, // 新闻/网页分享
QQShareTypeAudio, // 音频分享
QQShareTypeVideo // 视频分享
};
@interface QQShareManager : NSObject
/**
* 检查QQ是否已安装
* @return BOOL 是否已安装QQ
*/
+ (BOOL)isQQInstalled;
/**
* 验证QQ AppID配置是否正确
* @return BOOL AppID是否有效配置
*/
+ (BOOL)validateQQAppIDConfiguration;
/**
* 获取当前配置的QQ AppID
* @return NSString 当前的QQ AppID如果未配置返回nil
*/
+ (NSString * _Nullable)getCurrentQQAppID;
/**
* 分享到QQ好友
* @param type 分享类型
* @param title 标题
* @param description 描述
* @param thumbImage 缩略图
* @param url 链接URL
* @param image 图片(仅图片分享时使用)
* @param completion 完成回调
*/
+ (void)shareToQQFriend:(QQShareType)type
title:(NSString * _Nullable)title
description:(NSString * _Nullable)description
thumbImage:(UIImage * _Nullable)thumbImage
url:(NSString * _Nullable)url
image:(UIImage * _Nullable)image
completion:(void(^_Nullable)(BOOL success))completion;
/**
* 分享到QQ空间
* @param type 分享类型
* @param title 标题
* @param description 描述
* @param thumbImage 缩略图
* @param url 链接URL
* @param images 图片数组(可多张图片)
* @param completion 完成回调
*/
+ (void)shareToQZone:(QQShareType)type
title:(NSString * _Nullable)title
description:(NSString * _Nullable)description
thumbImage:(UIImage * _Nullable)thumbImage
url:(NSString * _Nullable)url
images:(NSArray<UIImage *> * _Nullable)images
completion:(void(^_Nullable)(BOOL success))completion;
/**
* 简化版QQ分享到好友解决900101错误
* 使用最基础的参数格式,避免复杂参数导致的错误
* @param title 标题
* @param description 描述
* @param url 链接URL可为nil
* @param completion 完成回调
*/
+ (void)simpleShareToQQFriend:(NSString * _Nullable)title
description:(NSString * _Nullable)description
url:(NSString * _Nullable)url
completion:(void(^_Nullable)(BOOL success))completion;
/**
* 使用系统分享面板进行QQ分享最可靠的方案
* @param title 分享标题
* @param description 分享描述
* @param url 分享链接
* @param viewController 用于呈现分享面板的视图控制器
* @param completion 分享完成回调
*/
+ (void)shareWithSystemShare:(NSString * _Nullable)title
description:(NSString * _Nullable)description
url:(NSString * _Nullable)url
fromViewController:(UIViewController *)viewController
completion:(void (^ _Nullable)(BOOL success))completion;
/**
* 使用系统分享面板进行QQ分享自动获取顶层视图控制器
* @param title 分享标题
* @param description 分享描述
* @param url 分享链接
* @param completion 分享完成回调
*/
+ (void)shareWithSystemShareAuto:(NSString * _Nullable)title
description:(NSString * _Nullable)description
url:(NSString * _Nullable)url
completion:(void (^ _Nullable)(BOOL success))completion;
/**
* 尝试强制弹出QQ会话选择列表
* 使用多种URL格式尝试打开QQ的好友选择界面
* @param completion 完成回调
*/
+ (void)forceOpenQQSessionSelector:(void(^_Nullable)(BOOL success))completion;
/**
* 使用多种方式尝试QQ分享
* 按优先级尝试不同的QQ分享方式直到找到有效的
* @param title 标题
* @param description 描述
* @param completion 完成回调
*/
+ (void)tryMultipleQQShareMethods:(NSString * _Nullable)title
description:(NSString * _Nullable)description
completion:(void(^_Nullable)(BOOL success))completion;
/**
* 处理从QQ返回的URL
* 需要在 AppDelegate 的 application:openURL:options: 方法中调用
*/
+ (BOOL)handleOpenURL:(NSURL *)url;
/**
* 验证和修复URL格式
* @param url 原始URL字符串
* @return 修复后的有效URL如果无法修复返回nil
*/
+ (NSString * _Nullable)validateAndFixURL:(NSString * _Nullable)url;
/**
* 获取应用启动图用作分享缩略图已弃用建议使用getAppIcon
* @return 启动图UIImage对象
*/
+ (UIImage * _Nullable)getAppLaunchImage;
/**
* 获取应用桌面图标用作分享缩略图
* @return 应用桌面图标UIImage对象
*/
+ (UIImage * _Nullable)getAppIcon;
/**
* 检查是否可以安全呈现系统分享面板
* @return BOOL 是否可以安全呈现
*/
+ (BOOL)canSafelyPresentSharePanel;
/**
* 使用系统分享面板进行QQ分享传递完整ShareContent对象
* 支持根据type字段自动选择分享类型
* - type=2截图分享包含屏幕截图+文字说明)
* - 其他:纯文本分享(文字+链接+应用图标)
* @param shareContent 完整的分享内容对象需包含title、desc、webpageUrl、type字段
* @param completion 分享完成回调
*/
+ (void)shareWithSystemShareContent:(id)shareContent
completion:(void (^ _Nullable)(BOOL success))completion;
@end
NS_ASSUME_NONNULL_END