From d6ef691f958894cdb5cbd302c2b2a528d82f974b Mon Sep 17 00:00:00 2001 From: chenying09 Date: Wed, 7 Aug 2024 21:49:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ios/WechatLib.mm | 884 +++++++++++++++++++++++------------------------ 1 file changed, 442 insertions(+), 442 deletions(-) diff --git a/ios/WechatLib.mm b/ios/WechatLib.mm index 0ea0272..3efec82 100644 --- a/ios/WechatLib.mm +++ b/ios/WechatLib.mm @@ -17,94 +17,94 @@ RCT_EXPORT_MODULE() - (instancetype)init { - self = [super init]; - if (self) { - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleOpenURL:) name:@"RCTOpenURLNotification" object:nil]; - } - return self; + self = [super init]; + if (self) { + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleOpenURL:) name:@"RCTOpenURLNotification" object:nil]; + } + return self; } - (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; + [[NSNotificationCenter defaultCenter] removeObserver:self]; } - (BOOL)handleOpenURL:(NSNotification *)aNotification { - NSString *aURLString = [aNotification userInfo][@"url"]; - NSURL *aURL = [NSURL URLWithString:aURLString]; + NSString *aURLString = [aNotification userInfo][@"url"]; + NSURL *aURL = [NSURL URLWithString:aURLString]; - if ([WXApi handleOpenURL:aURL delegate:self]) { - return YES; - } else { - return NO; - } + if ([WXApi handleOpenURL:aURL delegate:self]) { + return YES; + } else { + return NO; + } } - (dispatch_queue_t)methodQueue { - return dispatch_get_main_queue(); + return dispatch_get_main_queue(); } + (BOOL)requiresMainQueueSetup { - return YES; + return YES; } // 获取网络图片的公共方法 - (UIImage *)getImageFromURL:(NSString *)fileURL { - UIImage *result; - NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileURL]]; - result = [UIImage imageWithData:data]; - return result; + UIImage *result; + NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileURL]]; + result = [UIImage imageWithData:data]; + return result; } // 压缩图片 - (NSData *)compressImage:(UIImage *)image toByte:(NSUInteger)maxLength { - // Compress by quality - CGFloat compression = 1; - NSData *data = UIImageJPEGRepresentation(image, compression); - if (data.length < maxLength) return data; + // Compress by quality + CGFloat compression = 1; + NSData *data = UIImageJPEGRepresentation(image, compression); + if (data.length < maxLength) return data; - CGFloat max = 1; - CGFloat min = 0; - for (int i = 0; i < 6; ++i) { - compression = (max + min) / 2; - data = UIImageJPEGRepresentation(image, compression); - if (data.length < maxLength * 0.9) { - min = compression; - } else if (data.length > maxLength) { - max = compression; - } else { - break; - } - } - UIImage *resultImage = [UIImage imageWithData:data]; - if (data.length < maxLength) return data; + CGFloat max = 1; + CGFloat min = 0; + for (int i = 0; i < 6; ++i) { + compression = (max + min) / 2; + data = UIImageJPEGRepresentation(image, compression); + if (data.length < maxLength * 0.9) { + min = compression; + } else if (data.length > maxLength) { + max = compression; + } else { + break; + } + } + UIImage *resultImage = [UIImage imageWithData:data]; + if (data.length < maxLength) return data; - // Compress by size - NSUInteger lastDataLength = 0; - while (data.length > maxLength && data.length != lastDataLength) { - lastDataLength = data.length; - CGFloat ratio = (CGFloat)maxLength / data.length; - CGSize size = CGSizeMake((NSUInteger)(resultImage.size.width * sqrtf(ratio)), - (NSUInteger)(resultImage.size.height * sqrtf(ratio))); // Use NSUInteger to prevent white blank - UIGraphicsBeginImageContext(size); - [resultImage drawInRect:CGRectMake(0, 0, size.width, size.height)]; - resultImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - data = UIImageJPEGRepresentation(resultImage, compression); - } + // Compress by size + NSUInteger lastDataLength = 0; + while (data.length > maxLength && data.length != lastDataLength) { + lastDataLength = data.length; + CGFloat ratio = (CGFloat)maxLength / data.length; + CGSize size = CGSizeMake((NSUInteger)(resultImage.size.width * sqrtf(ratio)), + (NSUInteger)(resultImage.size.height * sqrtf(ratio))); // Use NSUInteger to prevent white blank + UIGraphicsBeginImageContext(size); + [resultImage drawInRect:CGRectMake(0, 0, size.width, size.height)]; + resultImage = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + data = UIImageJPEGRepresentation(resultImage, compression); + } - if (data.length > maxLength) { - return [self compressImage:resultImage toByte:maxLength]; - } + if (data.length > maxLength) { + return [self compressImage:resultImage toByte:maxLength]; + } - return data; + return data; } RCT_EXPORT_METHOD(registerApp : (NSString *)appid : (NSString *)universalLink : (RCTResponseSenderBlock)callback) { - self.appId = appid; - callback(@[[WXApi registerApp:appid universalLink:universalLink] ? [NSNull null] : INVOKE_FAILED]); + self.appId = appid; + callback(@[[WXApi registerApp:appid universalLink:universalLink] ? [NSNull null] : INVOKE_FAILED]); } // RCT_EXPORT_METHOD(registerAppWithDescription:(NSString *)appid @@ -116,437 +116,437 @@ RCT_EXPORT_METHOD(registerApp RCT_EXPORT_METHOD(isWXAppInstalled : (RCTResponseSenderBlock)callback) { - callback(@[[NSNull null], @([WXApi isWXAppInstalled])]); + callback(@[[NSNull null], @([WXApi isWXAppInstalled])]); } RCT_EXPORT_METHOD(isWXAppSupportApi : (RCTResponseSenderBlock)callback) { - callback(@[[NSNull null], @([WXApi isWXAppSupportApi])]); + callback(@[[NSNull null], @([WXApi isWXAppSupportApi])]); } RCT_EXPORT_METHOD(getWXAppInstallUrl : (RCTResponseSenderBlock)callback) { - callback(@[[NSNull null], [WXApi getWXAppInstallUrl]]); + callback(@[[NSNull null], [WXApi getWXAppInstallUrl]]); } RCT_EXPORT_METHOD(getApiVersion : (RCTResponseSenderBlock)callback) { - callback(@[[NSNull null], [WXApi getApiVersion]]); + callback(@[[NSNull null], [WXApi getApiVersion]]); } RCT_EXPORT_METHOD(openWXApp : (RCTResponseSenderBlock)callback) { - callback(@[([WXApi openWXApp] ? [NSNull null] : INVOKE_FAILED)]); + callback(@[([WXApi openWXApp] ? [NSNull null] : INVOKE_FAILED)]); } RCT_EXPORT_METHOD(sendRequest : (NSString *)openid : (RCTResponseSenderBlock)callback) { - BaseReq *req = [[BaseReq alloc] init]; - req.openID = openid; - // callback(@[[WXApi sendReq:req] ? [NSNull null] : INVOKE_FAILED]); - void (^completion)(BOOL); - completion = ^(BOOL success) { - callback(@[success ? [NSNull null] : INVOKE_FAILED]); - return; - }; - [WXApi sendReq:req completion:completion]; + BaseReq *req = [[BaseReq alloc] init]; + req.openID = openid; + // callback(@[[WXApi sendReq:req] ? [NSNull null] : INVOKE_FAILED]); + void (^completion)(BOOL); + completion = ^(BOOL success) { + callback(@[success ? [NSNull null] : INVOKE_FAILED]); + return; + }; + [WXApi sendReq:req completion:completion]; } RCT_EXPORT_METHOD(sendAuthRequest : (NSString *)scope : (NSString *)state : (RCTResponseSenderBlock)callback) { - SendAuthReq *req = [[SendAuthReq alloc] init]; - req.scope = scope; - req.state = state; - void (^completion)(BOOL); - completion = ^(BOOL success) { - callback(@[success ? [NSNull null] : INVOKE_FAILED]); - return; - }; - UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController; - [WXApi sendAuthReq:req viewController:rootViewController delegate:self completion:completion]; + SendAuthReq *req = [[SendAuthReq alloc] init]; + req.scope = scope; + req.state = state; + void (^completion)(BOOL); + completion = ^(BOOL success) { + callback(@[success ? [NSNull null] : INVOKE_FAILED]); + return; + }; + UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController; + [WXApi sendAuthReq:req viewController:rootViewController delegate:self completion:completion]; } RCT_EXPORT_METHOD(sendSuccessResponse : (RCTResponseSenderBlock)callback) { - BaseResp *resp = [[BaseResp alloc] init]; - resp.errCode = WXSuccess; - void (^completion)(BOOL); - completion = ^(BOOL success) { - callback(@[success ? [NSNull null] : INVOKE_FAILED]); - return; - }; - [WXApi sendResp:resp completion:completion]; - // callback(@[[WXApi sendResp:resp] ? [NSNull null] : INVOKE_FAILED]); + BaseResp *resp = [[BaseResp alloc] init]; + resp.errCode = WXSuccess; + void (^completion)(BOOL); + completion = ^(BOOL success) { + callback(@[success ? [NSNull null] : INVOKE_FAILED]); + return; + }; + [WXApi sendResp:resp completion:completion]; + // callback(@[[WXApi sendResp:resp] ? [NSNull null] : INVOKE_FAILED]); } RCT_EXPORT_METHOD(sendErrorCommonResponse : (NSString *)message : (RCTResponseSenderBlock)callback) { - BaseResp *resp = [[BaseResp alloc] init]; - resp.errCode = WXErrCodeCommon; - resp.errStr = message; - void (^completion)(BOOL); - completion = ^(BOOL success) { - callback(@[success ? [NSNull null] : INVOKE_FAILED]); - return; - }; - [WXApi sendResp:resp completion:completion]; - // callback(@[[WXApi sendResp:resp] ? [NSNull null] : INVOKE_FAILED]); + BaseResp *resp = [[BaseResp alloc] init]; + resp.errCode = WXErrCodeCommon; + resp.errStr = message; + void (^completion)(BOOL); + completion = ^(BOOL success) { + callback(@[success ? [NSNull null] : INVOKE_FAILED]); + return; + }; + [WXApi sendResp:resp completion:completion]; + // callback(@[[WXApi sendResp:resp] ? [NSNull null] : INVOKE_FAILED]); } RCT_EXPORT_METHOD(sendErrorUserCancelResponse : (NSString *)message : (RCTResponseSenderBlock)callback) { - BaseResp *resp = [[BaseResp alloc] init]; - resp.errCode = WXErrCodeUserCancel; - resp.errStr = message; - void (^completion)(BOOL); - completion = ^(BOOL success) { - callback(@[success ? [NSNull null] : INVOKE_FAILED]); - return; - }; - [WXApi sendResp:resp completion:completion]; - // callback(@[[WXApi sendResp:resp] ? [NSNull null] : INVOKE_FAILED]); + BaseResp *resp = [[BaseResp alloc] init]; + resp.errCode = WXErrCodeUserCancel; + resp.errStr = message; + void (^completion)(BOOL); + completion = ^(BOOL success) { + callback(@[success ? [NSNull null] : INVOKE_FAILED]); + return; + }; + [WXApi sendResp:resp completion:completion]; + // callback(@[[WXApi sendResp:resp] ? [NSNull null] : INVOKE_FAILED]); } // 分享文本 RCT_EXPORT_METHOD(shareText : (NSDictionary *)data : (RCTResponseSenderBlock)callback) { - SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init]; - req.bText = YES; - req.text = data[@"text"]; - req.scene = [data[@"scene"] intValue]; - void (^completion)(BOOL); - completion = ^(BOOL success) { - callback(@[success ? [NSNull null] : INVOKE_FAILED]); - return; - }; - [WXApi sendReq:req completion:completion]; + SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init]; + req.bText = YES; + req.text = data[@"text"]; + req.scene = [data[@"scene"] intValue]; + void (^completion)(BOOL); + completion = ^(BOOL success) { + callback(@[success ? [NSNull null] : INVOKE_FAILED]); + return; + }; + [WXApi sendReq:req completion:completion]; } // 选择发票 RCT_EXPORT_METHOD(chooseInvoice : (NSDictionary *)data : (RCTResponseSenderBlock)callback) { - WXChooseInvoiceReq *req = [[WXChooseInvoiceReq alloc] init]; - req.appID = self.appId; - req.timeStamp = [data[@"timeStamp"] intValue]; - req.nonceStr = data[@"nonceStr"]; - req.cardSign = data[@"cardSign"]; - req.signType = data[@"signType"]; + WXChooseInvoiceReq *req = [[WXChooseInvoiceReq alloc] init]; + req.appID = self.appId; + req.timeStamp = [data[@"timeStamp"] intValue]; + req.nonceStr = data[@"nonceStr"]; + req.cardSign = data[@"cardSign"]; + req.signType = data[@"signType"]; - void (^completion)(BOOL); - completion = ^(BOOL success) { - callback(@[success ? [NSNull null] : INVOKE_FAILED]); - return; - }; - [WXApi sendReq:req completion:completion]; + void (^completion)(BOOL); + completion = ^(BOOL success) { + callback(@[success ? [NSNull null] : INVOKE_FAILED]); + return; + }; + [WXApi sendReq:req completion:completion]; } // 分享文件 RCT_EXPORT_METHOD(shareFile : (NSDictionary *)data : (RCTResponseSenderBlock)callback) { - NSString *url = data[@"url"]; - WXFileObject *file = [[WXFileObject alloc] init]; - file.fileExtension = data[@"ext"]; + NSString *url = data[@"url"]; + WXFileObject *file = [[WXFileObject alloc] init]; + file.fileExtension = data[@"ext"]; NSData *fileData; if ([url hasPrefix:@"http"]) { - fileData = [NSData dataWithContentsOfURL:[NSURL URLWithString: url]]; + fileData = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]]; } else { fileData = [NSData dataWithContentsOfFile:url]; } - file.fileData = fileData; + file.fileData = fileData; - WXMediaMessage *message = [WXMediaMessage message]; - message.title = data[@"title"]; - message.mediaObject = file; + WXMediaMessage *message = [WXMediaMessage message]; + message.title = data[@"title"]; + message.mediaObject = file; - SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init]; - req.bText = NO; - req.message = message; - req.scene = [data[@"scene"] intValue]; - void (^completion)(BOOL); - completion = ^(BOOL success) { - callback(@[success ? [NSNull null] : INVOKE_FAILED]); - return; - }; - [WXApi sendReq:req completion:completion]; + SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init]; + req.bText = NO; + req.message = message; + req.scene = [data[@"scene"] intValue]; + void (^completion)(BOOL); + completion = ^(BOOL success) { + callback(@[success ? [NSNull null] : INVOKE_FAILED]); + return; + }; + [WXApi sendReq:req completion:completion]; } // 分享图片 RCT_EXPORT_METHOD(shareImage : (NSDictionary *)data : (RCTResponseSenderBlock)callback) { - NSString *imageUrl = data[@"imageUrl"]; - if (imageUrl == NULL || [imageUrl isEqual:@""]) { - callback([NSArray arrayWithObject:@"shareImage: The value of ImageUrl cannot be empty."]); - return; - } - NSRange range = [imageUrl rangeOfString:@"."]; - if (range.length == 0) { - callback([NSArray arrayWithObject:@"shareImage: ImageUrl value, Could not find file suffix."]); - return; - } + NSString *imageUrl = data[@"imageUrl"]; + if (imageUrl == NULL || [imageUrl isEqual:@""]) { + callback([NSArray arrayWithObject:@"shareImage: The value of ImageUrl cannot be empty."]); + return; + } + NSRange range = [imageUrl rangeOfString:@"."]; + if (range.length == 0) { + callback([NSArray arrayWithObject:@"shareImage: ImageUrl value, Could not find file suffix."]); + return; + } - // 根据路径下载图片 - UIImage *image = [self getImageFromURL:imageUrl]; - // 从 UIImage 获取图片数据 - NSData *imageData = UIImageJPEGRepresentation(image, 1); - // 用图片数据构建 WXImageObject 对象 - WXImageObject *imageObject = [WXImageObject object]; - imageObject.imageData = imageData; + // 根据路径下载图片 + UIImage *image = [self getImageFromURL:imageUrl]; + // 从 UIImage 获取图片数据 + NSData *imageData = UIImageJPEGRepresentation(image, 1); + // 用图片数据构建 WXImageObject 对象 + WXImageObject *imageObject = [WXImageObject object]; + imageObject.imageData = imageData; - WXMediaMessage *message = [WXMediaMessage message]; - // 利用原图压缩出缩略图,确保缩略图大小不大于 32KB - message.thumbData = [self compressImage:image toByte:32678]; - message.mediaObject = imageObject; - message.title = data[@"title"]; - message.description = data[@"description"]; + WXMediaMessage *message = [WXMediaMessage message]; + // 利用原图压缩出缩略图,确保缩略图大小不大于 32KB + message.thumbData = [self compressImage:image toByte:32678]; + message.mediaObject = imageObject; + message.title = data[@"title"]; + message.description = data[@"description"]; - SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init]; - req.bText = NO; - req.message = message; - req.scene = [data[@"scene"] intValue]; - // [WXApi sendReq:req]; - void (^completion)(BOOL); - completion = ^(BOOL success) { - callback(@[success ? [NSNull null] : INVOKE_FAILED]); - return; - }; - [WXApi sendReq:req completion:completion]; + SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init]; + req.bText = NO; + req.message = message; + req.scene = [data[@"scene"] intValue]; + // [WXApi sendReq:req]; + void (^completion)(BOOL); + completion = ^(BOOL success) { + callback(@[success ? [NSNull null] : INVOKE_FAILED]); + return; + }; + [WXApi sendReq:req completion:completion]; } // 分享本地图片 RCT_EXPORT_METHOD(shareLocalImage : (NSDictionary *)data : (RCTResponseSenderBlock)callback) { - NSString *imageUrl = data[@"imageUrl"]; - if (imageUrl == NULL || [imageUrl isEqual:@""]) { - callback([NSArray arrayWithObject:@"shareLocalImage: The value of ImageUrl cannot be empty."]); - return; - } - NSRange range = [imageUrl rangeOfString:@"."]; - if (range.length == 0) { - callback([NSArray arrayWithObject:@"shareLocalImage: ImageUrl value, Could not find file suffix."]); - return; - } + NSString *imageUrl = data[@"imageUrl"]; + if (imageUrl == NULL || [imageUrl isEqual:@""]) { + callback([NSArray arrayWithObject:@"shareLocalImage: The value of ImageUrl cannot be empty."]); + return; + } + NSRange range = [imageUrl rangeOfString:@"."]; + if (range.length == 0) { + callback([NSArray arrayWithObject:@"shareLocalImage: ImageUrl value, Could not find file suffix."]); + return; + } - // 根据路径下载图片 - UIImage *image = [UIImage imageWithContentsOfFile:imageUrl]; - // 从 UIImage 获取图片数据 - NSData *imageData = UIImageJPEGRepresentation(image, 1); - // 用图片数据构建 WXImageObject 对象 - WXImageObject *imageObject = [WXImageObject object]; - imageObject.imageData = imageData; + // 根据路径下载图片 + UIImage *image = [UIImage imageWithContentsOfFile:imageUrl]; + // 从 UIImage 获取图片数据 + NSData *imageData = UIImageJPEGRepresentation(image, 1); + // 用图片数据构建 WXImageObject 对象 + WXImageObject *imageObject = [WXImageObject object]; + imageObject.imageData = imageData; - WXMediaMessage *message = [WXMediaMessage message]; - // 利用原图压缩出缩略图,确保缩略图大小不大于 32KB - message.thumbData = [self compressImage:image toByte:32678]; - message.mediaObject = imageObject; - message.title = data[@"title"]; - message.description = data[@"description"]; + WXMediaMessage *message = [WXMediaMessage message]; + // 利用原图压缩出缩略图,确保缩略图大小不大于 32KB + message.thumbData = [self compressImage:image toByte:32678]; + message.mediaObject = imageObject; + message.title = data[@"title"]; + message.description = data[@"description"]; - SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init]; - req.bText = NO; - req.message = message; - req.scene = [data[@"scene"] intValue]; - // [WXApi sendReq:req]; - void (^completion)(BOOL); - completion = ^(BOOL success) { - callback(@[success ? [NSNull null] : INVOKE_FAILED]); - return; - }; - [WXApi sendReq:req completion:completion]; + SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init]; + req.bText = NO; + req.message = message; + req.scene = [data[@"scene"] intValue]; + // [WXApi sendReq:req]; + void (^completion)(BOOL); + completion = ^(BOOL success) { + callback(@[success ? [NSNull null] : INVOKE_FAILED]); + return; + }; + [WXApi sendReq:req completion:completion]; } // 分享音乐 RCT_EXPORT_METHOD(shareMusic : (NSDictionary *)data : (RCTResponseSenderBlock)callback) { - WXMusicObject *musicObject = [WXMusicObject object]; - musicObject.musicUrl = data[@"musicUrl"]; - musicObject.musicLowBandUrl = data[@"musicLowBandUrl"]; - musicObject.musicDataUrl = data[@"musicDataUrl"]; - musicObject.musicLowBandDataUrl = data[@"musicLowBandDataUrl"]; + WXMusicObject *musicObject = [WXMusicObject object]; + musicObject.musicUrl = data[@"musicUrl"]; + musicObject.musicLowBandUrl = data[@"musicLowBandUrl"]; + musicObject.musicDataUrl = data[@"musicDataUrl"]; + musicObject.musicLowBandDataUrl = data[@"musicLowBandDataUrl"]; - WXMediaMessage *message = [WXMediaMessage message]; - message.title = data[@"title"]; - message.description = data[@"description"]; - NSString *thumbImageUrl = data[@"thumbImageUrl"]; - if (thumbImageUrl != NULL && ![thumbImageUrl isEqual:@""]) { - // 根据路径下载图片 - UIImage *image = [self getImageFromURL:thumbImageUrl]; - message.thumbData = [self compressImage:image toByte:32678]; - } - message.mediaObject = musicObject; - SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init]; - req.bText = NO; - req.message = message; - req.scene = [data[@"scene"] intValue]; - void (^completion)(BOOL); - completion = ^(BOOL success) { - callback(@[success ? [NSNull null] : INVOKE_FAILED]); - return; - }; - [WXApi sendReq:req completion:completion]; + WXMediaMessage *message = [WXMediaMessage message]; + message.title = data[@"title"]; + message.description = data[@"description"]; + NSString *thumbImageUrl = data[@"thumbImageUrl"]; + if (thumbImageUrl != NULL && ![thumbImageUrl isEqual:@""]) { + // 根据路径下载图片 + UIImage *image = [self getImageFromURL:thumbImageUrl]; + message.thumbData = [self compressImage:image toByte:32678]; + } + message.mediaObject = musicObject; + SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init]; + req.bText = NO; + req.message = message; + req.scene = [data[@"scene"] intValue]; + void (^completion)(BOOL); + completion = ^(BOOL success) { + callback(@[success ? [NSNull null] : INVOKE_FAILED]); + return; + }; + [WXApi sendReq:req completion:completion]; } // 分享视频 RCT_EXPORT_METHOD(shareVideo : (NSDictionary *)data : (RCTResponseSenderBlock)callback) { - WXVideoObject *videoObject = [WXVideoObject object]; - videoObject.videoUrl = data[@"videoUrl"]; - videoObject.videoLowBandUrl = data[@"videoLowBandUrl"]; - WXMediaMessage *message = [WXMediaMessage message]; - message.title = data[@"title"]; - message.description = data[@"description"]; - NSString *thumbImageUrl = data[@"thumbImageUrl"]; - if (thumbImageUrl != NULL && ![thumbImageUrl isEqual:@""]) { - UIImage *image = [self getImageFromURL:thumbImageUrl]; - message.thumbData = [self compressImage:image toByte:32678]; - } - message.mediaObject = videoObject; - SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init]; - req.bText = NO; - req.message = message; - req.scene = [data[@"scene"] intValue]; - void (^completion)(BOOL); - completion = ^(BOOL success) { - callback(@[success ? [NSNull null] : INVOKE_FAILED]); - return; - }; - [WXApi sendReq:req completion:completion]; + WXVideoObject *videoObject = [WXVideoObject object]; + videoObject.videoUrl = data[@"videoUrl"]; + videoObject.videoLowBandUrl = data[@"videoLowBandUrl"]; + WXMediaMessage *message = [WXMediaMessage message]; + message.title = data[@"title"]; + message.description = data[@"description"]; + NSString *thumbImageUrl = data[@"thumbImageUrl"]; + if (thumbImageUrl != NULL && ![thumbImageUrl isEqual:@""]) { + UIImage *image = [self getImageFromURL:thumbImageUrl]; + message.thumbData = [self compressImage:image toByte:32678]; + } + message.mediaObject = videoObject; + SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init]; + req.bText = NO; + req.message = message; + req.scene = [data[@"scene"] intValue]; + void (^completion)(BOOL); + completion = ^(BOOL success) { + callback(@[success ? [NSNull null] : INVOKE_FAILED]); + return; + }; + [WXApi sendReq:req completion:completion]; } // 分享网页 RCT_EXPORT_METHOD(shareWebpage : (NSDictionary *)data : (RCTResponseSenderBlock)callback) { - WXWebpageObject *webpageObject = [WXWebpageObject object]; - webpageObject.webpageUrl = data[@"webpageUrl"]; - WXMediaMessage *message = [WXMediaMessage message]; - message.title = data[@"title"]; - message.description = data[@"description"]; - NSString *thumbImageUrl = data[@"thumbImageUrl"]; - if (thumbImageUrl != NULL && ![thumbImageUrl isEqual:@""]) { - UIImage *image = [self getImageFromURL:thumbImageUrl]; - message.thumbData = [self compressImage:image toByte:32678]; - } - message.mediaObject = webpageObject; - SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init]; - req.bText = NO; - req.message = message; - req.scene = [data[@"scene"] intValue]; - void (^completion)(BOOL); - completion = ^(BOOL success) { - callback(@[success ? [NSNull null] : INVOKE_FAILED]); - return; - }; - [WXApi sendReq:req completion:completion]; + WXWebpageObject *webpageObject = [WXWebpageObject object]; + webpageObject.webpageUrl = data[@"webpageUrl"]; + WXMediaMessage *message = [WXMediaMessage message]; + message.title = data[@"title"]; + message.description = data[@"description"]; + NSString *thumbImageUrl = data[@"thumbImageUrl"]; + if (thumbImageUrl != NULL && ![thumbImageUrl isEqual:@""]) { + UIImage *image = [self getImageFromURL:thumbImageUrl]; + message.thumbData = [self compressImage:image toByte:32678]; + } + message.mediaObject = webpageObject; + SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init]; + req.bText = NO; + req.message = message; + req.scene = [data[@"scene"] intValue]; + void (^completion)(BOOL); + completion = ^(BOOL success) { + callback(@[success ? [NSNull null] : INVOKE_FAILED]); + return; + }; + [WXApi sendReq:req completion:completion]; } // 分享小程序 RCT_EXPORT_METHOD(shareMiniProgram : (NSDictionary *)data : (RCTResponseSenderBlock)callback) { - WXMiniProgramObject *object = [WXMiniProgramObject object]; - object.webpageUrl = data[@"webpageUrl"]; - object.userName = data[@"userName"]; - object.path = data[@"path"]; - NSString *hdImageUrl = data[@"hdImageUrl"]; - if (hdImageUrl != NULL && ![hdImageUrl isEqual:@""]) { - UIImage *image = [self getImageFromURL:hdImageUrl]; - // 压缩图片到小于 128KB - object.hdImageData = [self compressImage:image toByte:131072]; - } - object.withShareTicket = data[@"withShareTicket"]; - int miniProgramType = [data[@"miniProgramType"] integerValue]; - object.miniProgramType = [self integerToWXMiniProgramType:miniProgramType]; - WXMediaMessage *message = [WXMediaMessage message]; - message.title = data[@"title"]; - message.description = data[@"description"]; - // 兼容旧版本节点的图片,小于 32KB,新版本优先 - // 使用 WXMiniProgramObject 的 hdImageData 属性 - NSString *thumbImageUrl = data[@"thumbImageUrl"]; - if (thumbImageUrl != NULL && ![thumbImageUrl isEqual:@""]) { - UIImage *image = [self getImageFromURL:thumbImageUrl]; - message.thumbData = [self compressImage:image toByte:32678]; - } - message.mediaObject = object; - SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init]; - req.bText = NO; - req.message = message; - req.scene = [data[@"scene"] integerValue]; - void (^completion)(BOOL); - completion = ^(BOOL success) { - callback(@[success ? [NSNull null] : INVOKE_FAILED]); - return; - }; - [WXApi sendReq:req completion:completion]; + WXMiniProgramObject *object = [WXMiniProgramObject object]; + object.webpageUrl = data[@"webpageUrl"]; + object.userName = data[@"userName"]; + object.path = data[@"path"]; + NSString *hdImageUrl = data[@"hdImageUrl"]; + if (hdImageUrl != NULL && ![hdImageUrl isEqual:@""]) { + UIImage *image = [self getImageFromURL:hdImageUrl]; + // 压缩图片到小于 128KB + object.hdImageData = [self compressImage:image toByte:131072]; + } + object.withShareTicket = data[@"withShareTicket"]; + int miniProgramType = [data[@"miniProgramType"] integerValue]; + object.miniProgramType = [self integerToWXMiniProgramType:miniProgramType]; + WXMediaMessage *message = [WXMediaMessage message]; + message.title = data[@"title"]; + message.description = data[@"description"]; + // 兼容旧版本节点的图片,小于 32KB,新版本优先 + // 使用 WXMiniProgramObject 的 hdImageData 属性 + NSString *thumbImageUrl = data[@"thumbImageUrl"]; + if (thumbImageUrl != NULL && ![thumbImageUrl isEqual:@""]) { + UIImage *image = [self getImageFromURL:thumbImageUrl]; + message.thumbData = [self compressImage:image toByte:32678]; + } + message.mediaObject = object; + SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init]; + req.bText = NO; + req.message = message; + req.scene = [data[@"scene"] integerValue]; + void (^completion)(BOOL); + completion = ^(BOOL success) { + callback(@[success ? [NSNull null] : INVOKE_FAILED]); + return; + }; + [WXApi sendReq:req completion:completion]; } // 一次性订阅消息 RCT_EXPORT_METHOD(subscribeMessage : (NSDictionary *)data : (RCTResponseSenderBlock)callback) { - WXSubscribeMsgReq *req = [[WXSubscribeMsgReq alloc] init]; - req.scene = [data[@"scene"] integerValue]; - req.templateId = data[@"templateId"]; - req.reserved = data[@"reserved"]; - void (^completion)(BOOL); - completion = ^(BOOL success) { - callback(@[success ? [NSNull null] : INVOKE_FAILED]); - return; - }; - [WXApi sendReq:req completion:completion]; + WXSubscribeMsgReq *req = [[WXSubscribeMsgReq alloc] init]; + req.scene = [data[@"scene"] integerValue]; + req.templateId = data[@"templateId"]; + req.reserved = data[@"reserved"]; + void (^completion)(BOOL); + completion = ^(BOOL success) { + callback(@[success ? [NSNull null] : INVOKE_FAILED]); + return; + }; + [WXApi sendReq:req completion:completion]; } RCT_EXPORT_METHOD(launchMiniProgram : (NSDictionary *)data : (RCTResponseSenderBlock)callback) { - WXLaunchMiniProgramReq *launchMiniProgramReq = [WXLaunchMiniProgramReq object]; - // 拉起的小程序的 username - launchMiniProgramReq.userName = data[@"userName"]; - // 拉起小程序页面的可带参路径,不填默认拉起小程序首页 - launchMiniProgramReq.path = data[@"path"]; - // 拉起小程序的类型 - int miniProgramType = [data[@"miniProgramType"] integerValue]; - launchMiniProgramReq.miniProgramType = [self integerToWXMiniProgramType:miniProgramType]; - // launchMiniProgramReq.miniProgramType = [data[@"miniProgramType"] integerValue]; - void (^completion)(BOOL); - completion = ^(BOOL success) { - callback(@[success ? [NSNull null] : INVOKE_FAILED]); - return; - }; - [WXApi sendReq:launchMiniProgramReq completion:completion]; - // BOOL success = [WXApi sendReq:launchMiniProgramReq]; - // callback(@[success ? [NSNull null] : INVOKE_FAILED]); + WXLaunchMiniProgramReq *launchMiniProgramReq = [WXLaunchMiniProgramReq object]; + // 拉起的小程序的 username + launchMiniProgramReq.userName = data[@"userName"]; + // 拉起小程序页面的可带参路径,不填默认拉起小程序首页 + launchMiniProgramReq.path = data[@"path"]; + // 拉起小程序的类型 + int miniProgramType = [data[@"miniProgramType"] integerValue]; + launchMiniProgramReq.miniProgramType = [self integerToWXMiniProgramType:miniProgramType]; + // launchMiniProgramReq.miniProgramType = [data[@"miniProgramType"] integerValue]; + void (^completion)(BOOL); + completion = ^(BOOL success) { + callback(@[success ? [NSNull null] : INVOKE_FAILED]); + return; + }; + [WXApi sendReq:launchMiniProgramReq completion:completion]; + // BOOL success = [WXApi sendReq:launchMiniProgramReq]; + // callback(@[success ? [NSNull null] : INVOKE_FAILED]); } RCT_EXPORT_METHOD(pay : (NSDictionary *)data : (RCTResponseSenderBlock)callback) { - PayReq *req = [PayReq new]; - req.partnerId = data[@"partnerId"]; - req.prepayId = data[@"prepayId"]; - req.nonceStr = data[@"nonceStr"]; - req.timeStamp = [data[@"timeStamp"] unsignedIntValue]; - req.package = data[@"package"]; - req.sign = data[@"sign"]; - void (^completion)(BOOL); - completion = ^(BOOL success) { - callback(@[success ? [NSNull null] : INVOKE_FAILED]); - return; - }; - [WXApi sendReq:req completion:completion]; - // BOOL success = [WXApi sendReq:req]; - // callback(@[success ? [NSNull null] : INVOKE_FAILED]); + PayReq *req = [PayReq new]; + req.partnerId = data[@"partnerId"]; + req.prepayId = data[@"prepayId"]; + req.nonceStr = data[@"nonceStr"]; + req.timeStamp = [data[@"timeStamp"] unsignedIntValue]; + req.package = data[@"package"]; + req.sign = data[@"sign"]; + void (^completion)(BOOL); + completion = ^(BOOL success) { + callback(@[success ? [NSNull null] : INVOKE_FAILED]); + return; + }; + [WXApi sendReq:req completion:completion]; + // BOOL success = [WXApi sendReq:req]; + // callback(@[success ? [NSNull null] : INVOKE_FAILED]); } // 跳转微信客服 @@ -554,99 +554,99 @@ RCT_EXPORT_METHOD(openCustomerServiceChat : (NSString *)corpId : (NSString *)kfUrl : (RCTResponseSenderBlock)callback) { - WXOpenCustomerServiceReq *req = [[WXOpenCustomerServiceReq alloc] init]; - req.corpid = corpId; // 企业 ID - req.url = kfUrl; // 客服 URL - [WXApi sendReq:req completion:nil]; + WXOpenCustomerServiceReq *req = [[WXOpenCustomerServiceReq alloc] init]; + req.corpid = corpId; // 企业 ID + req.url = kfUrl; // 客服 URL + [WXApi sendReq:req completion:nil]; } #pragma mark - wx callback - (void)onReq:(BaseReq *)req { - if ([req isKindOfClass:[LaunchFromWXReq class]]) { - LaunchFromWXReq *launchReq = req; - NSString *appParameter = launchReq.message.messageExt; - NSMutableDictionary *body = @{ @"errCode": @0 }.mutableCopy; - body[@"type"] = @"LaunchFromWX.Req"; - body[@"lang"] = launchReq.lang; - body[@"country"] = launchReq.country; - body[@"extMsg"] = appParameter; - [self.bridge.eventDispatcher sendDeviceEventWithName:RCTWXEventNameWeChatReq body:body]; - } + if ([req isKindOfClass:[LaunchFromWXReq class]]) { + LaunchFromWXReq *launchReq = req; + NSString *appParameter = launchReq.message.messageExt; + NSMutableDictionary *body = @{ @"errCode": @0 }.mutableCopy; + body[@"type"] = @"LaunchFromWX.Req"; + body[@"lang"] = launchReq.lang; + body[@"country"] = launchReq.country; + body[@"extMsg"] = appParameter; + [self.bridge.eventDispatcher sendDeviceEventWithName:RCTWXEventNameWeChatReq body:body]; + } } - (void)onResp:(BaseResp *)resp { - if ([resp isKindOfClass:[SendMessageToWXResp class]]) { - SendMessageToWXResp *r = (SendMessageToWXResp *)resp; + if ([resp isKindOfClass:[SendMessageToWXResp class]]) { + SendMessageToWXResp *r = (SendMessageToWXResp *)resp; - NSMutableDictionary *body = @{ @"errCode": @(r.errCode) }.mutableCopy; - body[@"errStr"] = r.errStr; - body[@"lang"] = r.lang; - body[@"country"] = r.country; - body[@"type"] = @"SendMessageToWX.Resp"; - [self.bridge.eventDispatcher sendDeviceEventWithName:RCTWXEventName body:body]; - } else if ([resp isKindOfClass:[SendAuthResp class]]) { - SendAuthResp *r = (SendAuthResp *)resp; - NSMutableDictionary *body = @{ @"errCode": @(r.errCode) }.mutableCopy; - body[@"errStr"] = r.errStr; - body[@"state"] = r.state; - body[@"lang"] = r.lang; - body[@"country"] = r.country; - body[@"type"] = @"SendAuth.Resp"; + NSMutableDictionary *body = @{ @"errCode": @(r.errCode) }.mutableCopy; + body[@"errStr"] = r.errStr; + body[@"lang"] = r.lang; + body[@"country"] = r.country; + body[@"type"] = @"SendMessageToWX.Resp"; + [self.bridge.eventDispatcher sendDeviceEventWithName:RCTWXEventName body:body]; + } else if ([resp isKindOfClass:[SendAuthResp class]]) { + SendAuthResp *r = (SendAuthResp *)resp; + NSMutableDictionary *body = @{ @"errCode": @(r.errCode) }.mutableCopy; + body[@"errStr"] = r.errStr; + body[@"state"] = r.state; + body[@"lang"] = r.lang; + body[@"country"] = r.country; + body[@"type"] = @"SendAuth.Resp"; - if (resp.errCode == WXSuccess) { - if (self.appId && r) { - // ios 第一次获取不到 appid 会卡死,加个判断 OK - [body addEntriesFromDictionary:@{ @"appid": self.appId, @"code": r.code }]; - [self.bridge.eventDispatcher sendDeviceEventWithName:RCTWXEventName body:body]; - } - } else { - [self.bridge.eventDispatcher sendDeviceEventWithName:RCTWXEventName body:body]; - } - } else if ([resp isKindOfClass:[PayResp class]]) { - PayResp *r = (PayResp *)resp; - NSMutableDictionary *body = @{ @"errCode": @(r.errCode) }.mutableCopy; - body[@"errStr"] = r.errStr; - body[@"type"] = @(r.type); - body[@"returnKey"] = r.returnKey; - body[@"type"] = @"PayReq.Resp"; - [self.bridge.eventDispatcher sendDeviceEventWithName:RCTWXEventName body:body]; - } else if ([resp isKindOfClass:[WXLaunchMiniProgramResp class]]) { - WXLaunchMiniProgramResp *r = (WXLaunchMiniProgramResp *)resp; - NSMutableDictionary *body = @{ @"errCode": @(r.errCode) }.mutableCopy; - body[@"errStr"] = r.errStr; - body[@"extMsg"] = r.extMsg; - body[@"type"] = @"WXLaunchMiniProgramReq.Resp"; - [self.bridge.eventDispatcher sendDeviceEventWithName:RCTWXEventName body:body]; - } else if ([resp isKindOfClass:[WXChooseInvoiceResp class]]) { - WXChooseInvoiceResp *r = (WXChooseInvoiceResp *)resp; - NSMutableDictionary *body = @{ @"errCode": @(r.errCode) }.mutableCopy; - body[@"errStr"] = r.errStr; - NSMutableArray *arr = [[NSMutableArray alloc] init]; - for (WXCardItem *cardItem in r.cardAry) { - NSMutableDictionary *item = @{ @"cardId": cardItem.cardId, @"encryptCode": cardItem.encryptCode, @"appId": cardItem.appID }.mutableCopy; - [arr addObject:item]; - } - body[@"cards"] = arr; - body[@"type"] = @"WXChooseInvoiceResp.Resp"; - [self.bridge.eventDispatcher sendDeviceEventWithName:RCTWXEventName body:body]; - } + if (resp.errCode == WXSuccess) { + if (self.appId && r) { + // ios 第一次获取不到 appid 会卡死,加个判断 OK + [body addEntriesFromDictionary:@{ @"appid": self.appId, @"code": r.code }]; + [self.bridge.eventDispatcher sendDeviceEventWithName:RCTWXEventName body:body]; + } + } else { + [self.bridge.eventDispatcher sendDeviceEventWithName:RCTWXEventName body:body]; + } + } else if ([resp isKindOfClass:[PayResp class]]) { + PayResp *r = (PayResp *)resp; + NSMutableDictionary *body = @{ @"errCode": @(r.errCode) }.mutableCopy; + body[@"errStr"] = r.errStr; + body[@"type"] = @(r.type); + body[@"returnKey"] = r.returnKey; + body[@"type"] = @"PayReq.Resp"; + [self.bridge.eventDispatcher sendDeviceEventWithName:RCTWXEventName body:body]; + } else if ([resp isKindOfClass:[WXLaunchMiniProgramResp class]]) { + WXLaunchMiniProgramResp *r = (WXLaunchMiniProgramResp *)resp; + NSMutableDictionary *body = @{ @"errCode": @(r.errCode) }.mutableCopy; + body[@"errStr"] = r.errStr; + body[@"extMsg"] = r.extMsg; + body[@"type"] = @"WXLaunchMiniProgramReq.Resp"; + [self.bridge.eventDispatcher sendDeviceEventWithName:RCTWXEventName body:body]; + } else if ([resp isKindOfClass:[WXChooseInvoiceResp class]]) { + WXChooseInvoiceResp *r = (WXChooseInvoiceResp *)resp; + NSMutableDictionary *body = @{ @"errCode": @(r.errCode) }.mutableCopy; + body[@"errStr"] = r.errStr; + NSMutableArray *arr = [[NSMutableArray alloc] init]; + for (WXCardItem *cardItem in r.cardAry) { + NSMutableDictionary *item = @{ @"cardId": cardItem.cardId, @"encryptCode": cardItem.encryptCode, @"appId": cardItem.appID }.mutableCopy; + [arr addObject:item]; + } + body[@"cards"] = arr; + body[@"type"] = @"WXChooseInvoiceResp.Resp"; + [self.bridge.eventDispatcher sendDeviceEventWithName:RCTWXEventName body:body]; + } } - (WXMiniProgramType)integerToWXMiniProgramType:(int)value { - WXMiniProgramType type = WXMiniProgramTypeRelease; - switch (value) { - case 0: - type = WXMiniProgramTypeRelease; - break; - case 1: - type = WXMiniProgramTypeTest; - break; - case 2: - type = WXMiniProgramTypePreview; - break; - } - return type; + WXMiniProgramType type = WXMiniProgramTypeRelease; + switch (value) { + case 0: + type = WXMiniProgramTypeRelease; + break; + case 1: + type = WXMiniProgramTypeTest; + break; + case 2: + type = WXMiniProgramTypePreview; + break; + } + return type; } @end