diff --git a/README.md b/README.md index 980b47e..02cb2d3 100644 --- a/README.md +++ b/README.md @@ -152,6 +152,33 @@ WeChat.shareImage({ ``` +#### ShareLocalImage(ShareImageMetadata) 分享图片 + +ShareImageMetadata + +| name | type | description | +|---------|--------|-------------------------------------| +| imageUrl| String | 图片地址 | +| scene | Number | 分享到, 0:会话 2:朋友圈 3:收藏 | + +Return: + +| name | type | description | +|---------|--------|-------------------------------------| +| errCode | Number | 0 if authorization successed | +| errStr | String | Error message if any error occurred | + + +```js +import * as WeChat from 'react-native-wechat-lib'; + +WeChat.ShareLocalImage({ + imageUrl: '/sdcard/test.png', + scene: 0 +}) + +``` + #### ShareMusic(ShareMusicMetadata) 分享音乐 ShareMusicMetadata diff --git a/android/src/main/java/com/theweflex/react/WeChatModule.java b/android/src/main/java/com/theweflex/react/WeChatModule.java index 3f8ced0..b1130cb 100644 --- a/android/src/main/java/com/theweflex/react/WeChatModule.java +++ b/android/src/main/java/com/theweflex/react/WeChatModule.java @@ -239,6 +239,33 @@ public class WeChatModule extends ReactContextBaseJavaModule implements IWXAPIEv } + /** + * 分享本地图片 + * @param data + * @param callback + */ + @ReactMethod + public void shareLocalImage(final ReadableMap data, final Callback callback) { + FileInputStream fs = new FileInputStream(data.getString("imageUrl")); + Bitmap bmp = BitmapFactory.decodeStream(fs); + // 初始化 WXImageObject 和 WXMediaMessage 对象 + WXImageObject imgObj = new WXImageObject(bmp); + WXMediaMessage msg = new WXMediaMessage(); + msg.mediaObject = imgObj; + + // 设置缩略图 + msg.thumbData = bitmapResizeGetBytes(bmp, THUMB_SIZE); + + // 构造一个Req + SendMessageToWX.Req req = new SendMessageToWX.Req(); + req.transaction = "img"; + req.message = msg; + // req.userOpenId = getOpenId(); + req.scene = data.hasKey("scene") ? data.getInt("scene") : SendMessageToWX.Req.WXSceneSession; + callback.invoke(null, api.sendReq(req)); + + } + /** * 分享音乐 * @param data diff --git a/docs/build-setup-ios.md b/docs/build-setup-ios.md index f06ffe5..4bbf6c7 100644 --- a/docs/build-setup-ios.md +++ b/docs/build-setup-ios.md @@ -12,7 +12,7 @@ Add "URL Schema" as your app id for "URL type" in Targets > info, See the following screenshot for the view on your XCode: -![Set URL Schema in XCode](https://i.loli.net/2019/08/31/yUD2F5MrPKjngo3.jpg) +![Set URL Schema in XCode](./../image/url-types.png) Cannot go back to APP from WeChat without configuration. 如果不配置,就无法从微信重新回到APP。 @@ -27,6 +27,7 @@ then add: weixin wechat + weixinULAPI ``` If not configured, apple will prevent you from jumping to WeChat due to security permissions. diff --git a/image/url-types.png b/image/url-types.png new file mode 100644 index 0000000..d7fc5bf Binary files /dev/null and b/image/url-types.png differ diff --git a/index.d.ts b/index.d.ts index bde08d0..3bcb193 100644 --- a/index.d.ts +++ b/index.d.ts @@ -118,6 +118,9 @@ declare module "react-native-wechat-lib" { export function shareImage( message: ShareImageMetadata ): Promise<{ errCode?: number; errStr?: string }>; + export function shareLocalImage( + message: ShareImageMetadata + ): Promise<{ errCode?: number; errStr?: string }>; export function shareMusic( message: ShareMusicMetadata ): Promise<{ errCode?: number; errStr?: string }>; diff --git a/index.js b/index.js index 9d7468b..0a1d793 100644 --- a/index.js +++ b/index.js @@ -151,6 +151,7 @@ const nativeShareToFavorite = wrapApi(WeChat.shareToFavorite); const nativeSendAuthRequest = wrapApi(WeChat.sendAuthRequest); const nativeShareText = wrapApi(WeChat.shareText); const nativeShareImage = wrapApi(WeChat.shareImage); +const nativeShareLocalImage = wrapApi(WeChat.shareLocalImage); const nativeShareMusic = wrapApi(WeChat.shareMusic); const nativeShareVideo = wrapApi(WeChat.shareVideo); const nativeShareWebpage = wrapApi(WeChat.shareWebpage); @@ -211,6 +212,24 @@ export function shareImage(data) { }); } +/** + * Share local image + * @method shareLocalImage + * @param {Object} data + */ +export function shareLocalImage(data) { + return new Promise((resolve, reject) => { + nativeShareLocalImage(data); + emitter.once('SendMessageToWX.Resp', resp => { + if (resp.errCode === 0) { + resolve(resp); + } else { + reject(new WechatError(resp)); + } + }); + }); +} + /** * Share music * @method shareMusic diff --git a/ios/RCTWeChat.m b/ios/RCTWeChat.m index e92d230..d190437 100644 --- a/ios/RCTWeChat.m +++ b/ios/RCTWeChat.m @@ -284,6 +284,51 @@ RCT_EXPORT_METHOD(shareImage:(NSDictionary *)data [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; + } + + // 根据路径下载图片 + 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"]; + + SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init]; + req.bText = NO; + req.message = message; + req.scene = data[@"scene"] || WXSceneSession; + // [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) diff --git a/package.json b/package.json index 79c305e..0f78823 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-wechat-lib", - "version": "1.1.2", + "version": "1.1.3", "description": "react-native library for wechat app. 支持分享和拉起小程序。", "main": "index.js", "scripts": {