Files
youle_app_ios/msext/Class/Utils/QQShareManager.h
joywayer 2296c65974 feat: 重构分享功能 - 将各平台分享逻辑整理到对应Manager中
- 新增 WechatShareManager:封装微信分享逻辑,支持ShareContent对象
- 增强 DouyinShareManager:新增ShareContent支持和分享引导功能
- 优化 QQShareManager:支持截图/纯文本分享类型自动识别
- 重构 SharePanel:简化为UI调度层,移除具体分享实现
- 实现职责分离:各Manager专注自己的平台分享逻辑
- 提升可维护性:修改某平台不影响其他平台
- 增强可扩展性:新增分享平台更容易实现
2025-06-17 19:55:44 +08:00

179 lines
5.6 KiB
Objective-C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//
// 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