feat 添加分享本地图片的方法,修改 ios 配置文档

This commit is contained in:
little-snow-fox 2019-11-19 14:48:47 +08:00
parent 721f79b191
commit e7d34c677f
8 changed files with 124 additions and 2 deletions

View File

@ -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

View File

@ -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

View File

@ -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:
<array>
<string>weixin</string>
<string>wechat</string>
<string>weixinULAPI</string>
</array>
```
If not configured, apple will prevent you from jumping to WeChat due to security permissions.

BIN
image/url-types.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

3
index.d.ts vendored
View File

@ -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 }>;

View File

@ -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

View File

@ -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)

View File

@ -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": {