// // WechatShareManager.m // msext // // Created on 2025/06/17. // Copyright © 2025年. All rights reserved. // #import "WechatShareManager.h" #import "WXApiManager.h" #import "WXApiRequestHandler.h" #import "FuncPublic.h" @implementation WechatShareManager #pragma mark - Public Methods + (BOOL)isWechatInstalled { return [WXApi isWXAppInstalled]; } + (void)shareWithContent:(id)shareContent completion:(void (^ _Nullable)(BOOL success))completion { NSLog(@"🔍 [WechatShareManager] 开始微信分享"); // 检查微信是否已安装 if (![self isWechatInstalled]) { NSLog(@"❌ [WechatShareManager] 微信未安装"); if (completion) { completion(NO); } return; } // 检查ShareContent对象 if (!shareContent) { NSLog(@"❌ [WechatShareManager] ShareContent对象为空"); if (completion) { completion(NO); } return; } // 通过KVC从ShareContent对象中提取参数 NSString *title = nil; NSString *description = nil; NSString *webpageUrl = nil; NSString *type = nil; NSString *sharefriend = nil; @try { if ([shareContent respondsToSelector:@selector(valueForKey:)]) { title = [shareContent valueForKey:@"title"]; description = [shareContent valueForKey:@"desc"]; webpageUrl = [shareContent valueForKey:@"webpageUrl"]; type = [shareContent valueForKey:@"type"]; sharefriend = [shareContent valueForKey:@"sharefriend"]; } NSLog(@"🔍 [WechatShareManager] 从ShareContent提取参数:"); NSLog(@"🔍 - 标题: %@", title ?: @"(无)"); NSLog(@"🔍 - 描述: %@", description ?: @"(无)"); NSLog(@"🔍 - 链接: %@", webpageUrl ?: @"(无)"); NSLog(@"🔍 - 类型: %@", type ?: @"(无)"); NSLog(@"🔍 - 分享目标: %@", sharefriend ?: @"(无)"); } @catch (NSException *exception) { NSLog(@"❌ [WechatShareManager] 解析ShareContent时发生异常: %@", exception.reason); if (completion) { completion(NO); } return; } // 确定分享场景 enum WXScene currentScene; if ([sharefriend intValue] == 1) { currentScene = WXSceneSession; // 微信好友 NSLog(@"🔍 [WechatShareManager] 分享目标: 微信好友"); } else { currentScene = WXSceneTimeline; // 微信朋友圈 NSLog(@"🔍 [WechatShareManager] 分享目标: 微信朋友圈"); } // 获取应用图标作为缩略图 UIImage *thumbImage = [self getAppIconImage]; // 根据分享类型选择分享方式 BOOL isScreenshotShare = [type intValue] == 2; if (isScreenshotShare) { // 截图分享 NSLog(@"🔍 [WechatShareManager] 执行截图分享"); UIImage *screenImage = [FuncPublic getImageWithFullScreenshot]; if (screenImage) { NSData *imageData = UIImageJPEGRepresentation(screenImage, 0.6); [WXApiRequestHandler sendImageData:imageData TagName:[NSString stringWithFormat:@"%@游戏截图分享", @"进贤聚友棋牌"] MessageExt:description ?: @"" Action:@"share_action" ThumbImage:thumbImage InScene:currentScene]; NSLog(@"✅ [WechatShareManager] 截图分享请求已发送"); } else { NSLog(@"❌ [WechatShareManager] 截图获取失败"); if (completion) { completion(NO); } return; } } else { // 链接分享(默认) NSLog(@"🔍 [WechatShareManager] 执行链接分享"); [WXApiRequestHandler sendLinkURL:webpageUrl ?: @"" TagName:[NSString stringWithFormat:@"%@游戏分享", @"进贤聚友棋牌"] Title:title ?: @"" Description:description ?: @"" ThumbImage:thumbImage InScene:currentScene]; NSLog(@"✅ [WechatShareManager] 链接分享请求已发送"); } // 模拟分享成功回调(微信分享结果需要在AppDelegate中处理) dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ NSLog(@"✅ [WechatShareManager] 分享完成"); if (completion) { completion(YES); } }); } + (void)shareLinkToWechat:(NSString *)url title:(NSString * _Nullable)title description:(NSString * _Nullable)description thumbImage:(UIImage * _Nullable)thumbImage scene:(WechatScene)scene completion:(void (^ _Nullable)(BOOL success))completion { // 检查微信是否已安装 if (![self isWechatInstalled]) { NSLog(@"❌ [WechatShareManager] 微信未安装"); if (completion) { completion(NO); } return; } enum WXScene wxScene = (scene == WechatSceneSession) ? WXSceneSession : WXSceneTimeline; [WXApiRequestHandler sendLinkURL:url ?: @"" TagName:@"游戏分享" Title:title ?: @"" Description:description ?: @"" ThumbImage:thumbImage ?: [self getAppIconImage] InScene:wxScene]; // 模拟分享成功回调 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ if (completion) { completion(YES); } }); } + (void)shareImageToWechat:(UIImage *)image tagName:(NSString * _Nullable)tagName messageExt:(NSString * _Nullable)messageExt thumbImage:(UIImage * _Nullable)thumbImage scene:(WechatScene)scene completion:(void (^ _Nullable)(BOOL success))completion { // 检查微信是否已安装 if (![self isWechatInstalled]) { NSLog(@"❌ [WechatShareManager] 微信未安装"); if (completion) { completion(NO); } return; } if (!image) { NSLog(@"❌ [WechatShareManager] 图片为空"); if (completion) { completion(NO); } return; } enum WXScene wxScene = (scene == WechatSceneSession) ? WXSceneSession : WXSceneTimeline; NSData *imageData = UIImageJPEGRepresentation(image, 0.6); [WXApiRequestHandler sendImageData:imageData TagName:tagName ?: @"图片分享" MessageExt:messageExt ?: @"" Action:@"share_action" ThumbImage:thumbImage ?: [self getAppIconImage] InScene:wxScene]; // 模拟分享成功回调 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ if (completion) { completion(YES); } }); } + (UIImage *)getAppIconImage { // 获取应用图标 UIImage *appIcon = nil; // 方法1: 从Info.plist获取图标文件名 NSDictionary *infoPlist = [[NSBundle mainBundle] infoDictionary]; NSArray *iconFiles = infoPlist[@"CFBundleIconFiles"]; if (iconFiles && iconFiles.count > 0) { NSString *iconFileName = [iconFiles lastObject]; // 取最后一个,通常是最大尺寸的 appIcon = [UIImage imageNamed:iconFileName]; } // 方法2: 尝试常见的图标文件名 if (!appIcon) { NSArray *commonIconNames = @[@"Icon-180", @"Icon180", @"AppIcon60x60@3x", @"AppIcon"]; for (NSString *iconName in commonIconNames) { appIcon = [UIImage imageNamed:iconName]; if (appIcon) break; } } // 方法3: 从SharePanel中查找sharelogo if (!appIcon) { appIcon = [UIImage imageNamed:@"sharelogo"]; } // 兜底: 生成默认图标 if (!appIcon) { // 创建一个简单的默认图标 UIGraphicsBeginImageContextWithOptions(CGSizeMake(60, 60), NO, 0.0); CGContextRef context = UIGraphicsGetCurrentContext(); // 设置背景色 CGContextSetFillColorWithColor(context, [UIColor colorWithRed:0.2 green:0.6 blue:1.0 alpha:1.0].CGColor); CGContextFillEllipseInRect(context, CGRectMake(0, 0, 60, 60)); // 添加文字 NSString *text = @"游戏"; NSDictionary *attributes = @{ NSFontAttributeName: [UIFont boldSystemFontOfSize:16], NSForegroundColorAttributeName: [UIColor whiteColor] }; CGSize textSize = [text sizeWithAttributes:attributes]; CGPoint textPoint = CGPointMake((60 - textSize.width) / 2, (60 - textSize.height) / 2); [text drawAtPoint:textPoint withAttributes:attributes]; appIcon = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); } return appIcon; } @end