From 93b1881e52c4043038418f7da896e84c9db8d1ed Mon Sep 17 00:00:00 2001 From: joywayer Date: Tue, 17 Jun 2025 20:53:07 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E5=88=86=E4=BA=AB?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=92=8C=E5=89=AA=E8=B4=B4=E6=9D=BF=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改gameController分享逻辑,支持不同分享类型 - 新增PasteboardManager类,优化iOS 14+剪贴板访问 - 减少剪贴板权限弹窗,提升用户体验 --- msext/Class/RootVC/gameController.m | 19 +++++-- msext/Class/Utils/PasteboardManager.h | 42 ++++++++++++++++ msext/Class/Utils/PasteboardManager.m | 71 +++++++++++++++++++++++++++ 3 files changed, 127 insertions(+), 5 deletions(-) create mode 100644 msext/Class/Utils/PasteboardManager.h create mode 100644 msext/Class/Utils/PasteboardManager.m diff --git a/msext/Class/RootVC/gameController.m b/msext/Class/RootVC/gameController.m index 018458f..d29317e 100755 --- a/msext/Class/RootVC/gameController.m +++ b/msext/Class/RootVC/gameController.m @@ -46,6 +46,7 @@ #import "QiniuManager.h" #import "QiniuConfig.h" #import "SharePanel.h" +#import "WechatShareManager.h" @interface gameController () @@ -581,11 +582,19 @@ enum WXScene currentScene; int friend = [one intValue]; // ======测试分享面板 - - // 显示分享面板 - [SharePanel showWithDictionary:data completion:^(ShareType type, BOOL success) { - // 处理分享结果 - }]; + if(friend ==1){ + // 显示分享面板 + [SharePanel showWithDictionary:data completion:^(ShareType type, BOOL success) { + // 处理分享结果 + }]; + + }else{ + // 使用WechatShareManager处理微信分享 + [WechatShareManager shareWithContent:data + completion:^(BOOL success) { + + }]; + } return; diff --git a/msext/Class/Utils/PasteboardManager.h b/msext/Class/Utils/PasteboardManager.h new file mode 100644 index 0000000..183504c --- /dev/null +++ b/msext/Class/Utils/PasteboardManager.h @@ -0,0 +1,42 @@ +// +// PasteboardManager.h +// msext +// +// Created on 2025/06/17. +// Copyright © 2025年. All rights reserved. +// + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * 剪贴板管理器 - 优化iOS 14+的剪贴板访问,减少权限弹窗 + */ +@interface PasteboardManager : NSObject + +/** + * 安全地读取剪贴板文本内容 + * 在iOS 14+中会先检查是否有内容,避免不必要的权限弹窗 + */ ++ (nullable NSString *)safeReadPasteboardText; + +/** + * 写入文本到剪贴板 + */ ++ (void)writeTextToPasteboard:(NSString *)text; + +/** + * 检查剪贴板是否有文本内容(iOS 14+可用,不会触发权限弹窗) + */ ++ (BOOL)hasTextInPasteboard API_AVAILABLE(ios(14.0)); + +/** + * 清空剪贴板内容 + */ ++ (void)clearPasteboard; + +@end + +NS_ASSUME_NONNULL_END diff --git a/msext/Class/Utils/PasteboardManager.m b/msext/Class/Utils/PasteboardManager.m new file mode 100644 index 0000000..7b01908 --- /dev/null +++ b/msext/Class/Utils/PasteboardManager.m @@ -0,0 +1,71 @@ +// +// PasteboardManager.m +// msext +// +// Created on 2025/06/17. +// Copyright © 2025年. All rights reserved. +// + +#import "PasteboardManager.h" + +@implementation PasteboardManager + +#pragma mark - Public Methods + ++ (nullable NSString *)safeReadPasteboardText { + NSLog(@"🔍 [PasteboardManager] 尝试安全读取剪贴板内容"); + + if (@available(iOS 14.0, *)) { + // iOS 14+ 先检查是否有文本内容,避免不必要的权限弹窗 + UIPasteboard *pasteboard = [UIPasteboard generalPasteboard]; + + if (pasteboard.hasStrings) { + NSString *text = pasteboard.string; + NSLog(@"✅ [PasteboardManager] 成功读取剪贴板文本: %@", text ? @"有内容" : @"空内容"); + return text ?: @""; + } else { + NSLog(@"ℹ️ [PasteboardManager] 剪贴板中无文本内容"); + return @""; + } + } else { + // iOS 14以下直接读取 + UIPasteboard *pasteboard = [UIPasteboard generalPasteboard]; + NSString *text = pasteboard.string; + NSLog(@"✅ [PasteboardManager] 读取剪贴板文本: %@", text ? @"有内容" : @"空内容"); + return text ?: @""; + } +} + ++ (void)writeTextToPasteboard:(NSString *)text { + NSLog(@"🔍 [PasteboardManager] 写入文本到剪贴板: %@", text ? @"有内容" : @"空内容"); + + UIPasteboard *pasteboard = [UIPasteboard generalPasteboard]; + pasteboard.string = text ?: @""; + + NSLog(@"✅ [PasteboardManager] 文本已写入剪贴板"); +} + ++ (BOOL)hasTextInPasteboard { + if (@available(iOS 14.0, *)) { + BOOL hasText = [UIPasteboard generalPasteboard].hasStrings; + NSLog(@"🔍 [PasteboardManager] 检查剪贴板是否有文本: %@", hasText ? @"是" : @"否"); + return hasText; + } else { + // iOS 14以下版本需要直接访问内容来判断 + NSString *text = [UIPasteboard generalPasteboard].string; + BOOL hasText = (text != nil && text.length > 0); + NSLog(@"🔍 [PasteboardManager] 检查剪贴板是否有文本: %@", hasText ? @"是" : @"否"); + return hasText; + } +} + ++ (void)clearPasteboard { + NSLog(@"🔍 [PasteboardManager] 清空剪贴板"); + + UIPasteboard *pasteboard = [UIPasteboard generalPasteboard]; + pasteboard.string = @""; + + NSLog(@"✅ [PasteboardManager] 剪贴板已清空"); +} + +@end