- 新增 WechatShareManager:封装微信分享逻辑,支持ShareContent对象 - 增强 DouyinShareManager:新增ShareContent支持和分享引导功能 - 优化 QQShareManager:支持截图/纯文本分享类型自动识别 - 重构 SharePanel:简化为UI调度层,移除具体分享实现 - 实现职责分离:各Manager专注自己的平台分享逻辑 - 提升可维护性:修改某平台不影响其他平台 - 增强可扩展性:新增分享平台更容易实现
179 lines
5.6 KiB
Objective-C
179 lines
5.6 KiB
Objective-C
//
|
||
// 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 |