Commit ecb4c7f4 authored by wind.wang's avatar wind.wang

增加分享小程序

parent 69a49fc0
...@@ -3,30 +3,35 @@ package com.rnsocial.pay; ...@@ -3,30 +3,35 @@ package com.rnsocial.pay;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
//import android.support.annotation.Nullable; //import androidx.annotation.Nullable;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.rnsocial.SocialConfig; import com.rnsocial.SocialConfig;
import com.rnsocial.pay.channel.WechatPay; import com.rnsocial.pay.channel.WechatPay;
import com.tencent.mm.opensdk.constants.ConstantsAPI;
import com.tencent.mm.opensdk.modelbase.BaseReq; import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp; import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.modelbiz.WXLaunchMiniProgram;
import com.tencent.mm.opensdk.openapi.IWXAPI; import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler; import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.opensdk.openapi.WXAPIFactory; import com.tencent.mm.opensdk.openapi.WXAPIFactory;
import org.json.JSONException;
import org.json.JSONObject;
/** /**
* User : yh * User : yh
* Date : 17/5/10 * Date : 17/5/10
*/ */
public class BaseWXPayEntryActivity extends Activity implements IWXAPIEventHandler{ public class BaseWXPayEntryActivity extends Activity implements IWXAPIEventHandler {
private IWXAPI api; private IWXAPI api;
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
api = WXAPIFactory.createWXAPI(this, SocialConfig.getWechatId()); api = WXAPIFactory.createWXAPI(this, SocialConfig.getWechatId());
api.handleIntent(getIntent(),this); api.handleIntent(getIntent(), this);
} }
@Override @Override
...@@ -44,10 +49,29 @@ public class BaseWXPayEntryActivity extends Activity implements IWXAPIEventHandl ...@@ -44,10 +49,29 @@ public class BaseWXPayEntryActivity extends Activity implements IWXAPIEventHandl
@Override @Override
public void onResp(BaseResp baseResp) { public void onResp(BaseResp baseResp) {
if(baseResp.errCode == 0){ if (baseResp.getType() == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM) {
PayManager.getInstance().payResultCallBack(true,null,null); WXLaunchMiniProgram.Resp launchMiniProResp = (WXLaunchMiniProgram.Resp) baseResp;
}else{ String result = launchMiniProResp.extMsg;
PayManager.getInstance().payResultCallBack(false,"pay.error","支付失败"); //20 成功, 30 失败
JSONObject jsonValue = null;
try {
jsonValue = new JSONObject(result);
String status = jsonValue.getString("status");
String message = jsonValue.getString("errMsg");
if (status == "20") {
PayManager.getInstance().payResultCallBack(true, null, null);
} else {
PayManager.getInstance().payResultCallBack(false, status, message);
}
} catch (JSONException e) {
e.printStackTrace();
}
finish();
} else if (baseResp.errCode == 0) {
PayManager.getInstance().payResultCallBack(true, null, null);
} else {
PayManager.getInstance().payResultCallBack(false, "pay.error", "支付失败");
} }
this.finish(); this.finish();
} }
......
...@@ -11,6 +11,7 @@ import com.facebook.react.bridge.ReactContextBaseJavaModule; ...@@ -11,6 +11,7 @@ import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod; import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.WritableMap; import com.facebook.react.bridge.WritableMap;
import com.umeng.socialize.media.UMMin;
/** /**
* User : yh * User : yh
...@@ -30,13 +31,13 @@ public class ReactShareModule extends ReactContextBaseJavaModule { ...@@ -30,13 +31,13 @@ public class ReactShareModule extends ReactContextBaseJavaModule {
} }
@ReactMethod @ReactMethod
public void share(final ReadableMap params, final Callback callback){ public void share(final ReadableMap params, final Callback callback) {
final Activity activity = getCurrentActivity(); final Activity activity = getCurrentActivity();
if(params == null){ if (params == null) {
Toast.makeText(activity, "分享参数异常", Toast.LENGTH_SHORT).show(); Toast.makeText(activity, "分享参数异常", Toast.LENGTH_SHORT).show();
return; return;
} }
if(activity != null){ if (activity != null) {
activity.runOnUiThread(new Runnable() { activity.runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
...@@ -44,7 +45,7 @@ public class ReactShareModule extends ReactContextBaseJavaModule { ...@@ -44,7 +45,7 @@ public class ReactShareModule extends ReactContextBaseJavaModule {
Share.share(activity, getShareContent(params), new ShareListener() { Share.share(activity, getShareContent(params), new ShareListener() {
@Override @Override
public void onResult(boolean success, String result, Throwable throwable) { public void onResult(boolean success, String result, Throwable throwable) {
if (callback == null){ if (callback == null) {
return; return;
} }
WritableMap resultMap = Arguments.createMap(); WritableMap resultMap = Arguments.createMap();
...@@ -53,8 +54,8 @@ public class ReactShareModule extends ReactContextBaseJavaModule { ...@@ -53,8 +54,8 @@ public class ReactShareModule extends ReactContextBaseJavaModule {
callback.invoke(resultMap); callback.invoke(resultMap);
} }
}); });
}catch (Exception e){ } catch (Exception e) {
Log.e(REACT_NAME,e.getMessage()); Log.e(REACT_NAME, e.getMessage());
} }
} }
}); });
...@@ -62,13 +63,45 @@ public class ReactShareModule extends ReactContextBaseJavaModule { ...@@ -62,13 +63,45 @@ public class ReactShareModule extends ReactContextBaseJavaModule {
} }
@ReactMethod @ReactMethod
public void shareImgWithBoard(final ReadableMap params, final Callback callback){ public void shareToMiniProgram(final ReadableMap params, final Callback callback) {
final Activity activity = getCurrentActivity(); final Activity activity = getCurrentActivity();
if(params == null){ if (params == null) {
Toast.makeText(activity, "分享参数异常", Toast.LENGTH_SHORT).show(); Toast.makeText(activity, "分享参数异常", Toast.LENGTH_SHORT).show();
return; return;
} }
if(activity != null){ if (activity != null) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
try {
Share.shareToMiniProgram(activity, params, new ShareListener() {
@Override
public void onResult(boolean success, String result, Throwable throwable) {
if (callback == null) {
return;
}
WritableMap resultMap = Arguments.createMap();
resultMap.putBoolean("success", success);
resultMap.putString("message", result);
callback.invoke(resultMap);
}
});
} catch (Exception e) {
Log.e(REACT_NAME, e.getMessage());
}
}
});
}
}
@ReactMethod
public void shareImgWithBoard(final ReadableMap params, final Callback callback) {
final Activity activity = getCurrentActivity();
if (params == null) {
Toast.makeText(activity, "分享参数异常", Toast.LENGTH_SHORT).show();
return;
}
if (activity != null) {
activity.runOnUiThread(new Runnable() { activity.runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
...@@ -76,7 +109,7 @@ public class ReactShareModule extends ReactContextBaseJavaModule { ...@@ -76,7 +109,7 @@ public class ReactShareModule extends ReactContextBaseJavaModule {
Share.shareImgWithBoard(activity, params, new ShareListener() { Share.shareImgWithBoard(activity, params, new ShareListener() {
@Override @Override
public void onResult(boolean success, String result, Throwable throwable) { public void onResult(boolean success, String result, Throwable throwable) {
if (callback == null){ if (callback == null) {
return; return;
} }
WritableMap resultMap = Arguments.createMap(); WritableMap resultMap = Arguments.createMap();
...@@ -85,8 +118,8 @@ public class ReactShareModule extends ReactContextBaseJavaModule { ...@@ -85,8 +118,8 @@ public class ReactShareModule extends ReactContextBaseJavaModule {
callback.invoke(resultMap); callback.invoke(resultMap);
} }
}); });
}catch (Exception e){ } catch (Exception e) {
Log.e(REACT_NAME,e.getMessage()); Log.e(REACT_NAME, e.getMessage());
} }
} }
}); });
...@@ -94,13 +127,13 @@ public class ReactShareModule extends ReactContextBaseJavaModule { ...@@ -94,13 +127,13 @@ public class ReactShareModule extends ReactContextBaseJavaModule {
} }
@ReactMethod @ReactMethod
public void shareImg(final ReadableMap params, final Callback callback){ public void shareImg(final ReadableMap params, final Callback callback) {
final Activity activity = getCurrentActivity(); final Activity activity = getCurrentActivity();
if(params == null){ if (params == null) {
Toast.makeText(activity, "分享参数异常", Toast.LENGTH_SHORT).show(); Toast.makeText(activity, "分享参数异常", Toast.LENGTH_SHORT).show();
return; return;
} }
if(activity != null){ if (activity != null) {
activity.runOnUiThread(new Runnable() { activity.runOnUiThread(new Runnable() {
@Override @Override
...@@ -109,7 +142,7 @@ public class ReactShareModule extends ReactContextBaseJavaModule { ...@@ -109,7 +142,7 @@ public class ReactShareModule extends ReactContextBaseJavaModule {
Share.shareImg(activity, params, new ShareListener() { Share.shareImg(activity, params, new ShareListener() {
@Override @Override
public void onResult(boolean success, String result, Throwable throwable) { public void onResult(boolean success, String result, Throwable throwable) {
if (callback == null){ if (callback == null) {
return; return;
} }
WritableMap resultMap = Arguments.createMap(); WritableMap resultMap = Arguments.createMap();
...@@ -118,32 +151,32 @@ public class ReactShareModule extends ReactContextBaseJavaModule { ...@@ -118,32 +151,32 @@ public class ReactShareModule extends ReactContextBaseJavaModule {
callback.invoke(resultMap); callback.invoke(resultMap);
} }
}); });
}catch (Exception e){ } catch (Exception e) {
Log.e(REACT_NAME,e.getMessage()); Log.e(REACT_NAME, e.getMessage());
} }
} }
}); });
} }
} }
private ShareContent getShareContent(ReadableMap params){ private ShareContent getShareContent(ReadableMap params) {
ShareContent shareContent = new ShareContent(); ShareContent shareContent = new ShareContent();
if(params.hasKey("title")){ if (params.hasKey("title")) {
shareContent.title = params.getString("title"); shareContent.title = params.getString("title");
} }
if(params.hasKey("url")){ if (params.hasKey("url")) {
shareContent.url = params.getString("url"); shareContent.url = params.getString("url");
} }
if(params.hasKey("content")){ if (params.hasKey("content")) {
shareContent.content = params.getString("content"); shareContent.content = params.getString("content");
} }
if(params.hasKey("image")){ if (params.hasKey("image")) {
shareContent.image = params.getString("image"); shareContent.image = params.getString("image");
} }
if(params.hasKey("useContentTitle")){ if (params.hasKey("useContentTitle")) {
shareContent.useContentTitle = params.getBoolean("useContentTitle"); shareContent.useContentTitle = params.getBoolean("useContentTitle");
} }
if(params.hasKey("showPoster")){ if (params.hasKey("showPoster")) {
shareContent.showPoster = true; shareContent.showPoster = true;
} }
return shareContent; return shareContent;
......
...@@ -8,6 +8,7 @@ import android.graphics.Color; ...@@ -8,6 +8,7 @@ import android.graphics.Color;
import android.util.Base64; import android.util.Base64;
import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.modules.statusbar.StatusBarModule;
import com.rnsocial.SocialConfig; import com.rnsocial.SocialConfig;
import com.umeng.socialize.ShareAction; import com.umeng.socialize.ShareAction;
import com.umeng.socialize.UMShareAPI; import com.umeng.socialize.UMShareAPI;
...@@ -15,6 +16,7 @@ import com.umeng.socialize.UMShareListener; ...@@ -15,6 +16,7 @@ import com.umeng.socialize.UMShareListener;
import com.umeng.socialize.bean.PlatformName; import com.umeng.socialize.bean.PlatformName;
import com.umeng.socialize.bean.SHARE_MEDIA; import com.umeng.socialize.bean.SHARE_MEDIA;
import com.umeng.socialize.media.UMImage; import com.umeng.socialize.media.UMImage;
import com.umeng.socialize.media.UMMin;
import com.umeng.socialize.media.UMWeb; import com.umeng.socialize.media.UMWeb;
import com.umeng.socialize.shareboard.ShareBoardConfig; import com.umeng.socialize.shareboard.ShareBoardConfig;
import com.umeng.socialize.shareboard.SnsPlatform; import com.umeng.socialize.shareboard.SnsPlatform;
...@@ -84,7 +86,6 @@ public class Share { ...@@ -84,7 +86,6 @@ public class Share {
return; return;
} }
} }
String resultTitle = content.useContentTitle && (share_media == SHARE_MEDIA.WEIXIN_CIRCLE) ? content.content : content.title; String resultTitle = content.useContentTitle && (share_media == SHARE_MEDIA.WEIXIN_CIRCLE) ? content.content : content.title;
UMWeb web = new UMWeb(content.url); UMWeb web = new UMWeb(content.url);
UMImage img = new UMImage(mContext, content.image); UMImage img = new UMImage(mContext, content.image);
...@@ -121,6 +122,44 @@ public class Share { ...@@ -121,6 +122,44 @@ public class Share {
}).open(boardConfig); }).open(boardConfig);
} }
public static void shareToMiniProgram(final Activity mContext, final ReadableMap params, final ShareListener listener) {
UMMin umMin = new UMMin("https://m.hisense.com");
//兼容低版本的网页链接
umMin.setThumb(new UMImage(mContext, params.getString("image")));
// 小程序消息封面图片
umMin.setTitle(params.getString("title"));
// 小程序消息title
umMin.setDescription(params.getString("content"));
// 小程序消息描述
umMin.setPath(params.getString("path"));
//小程序页面路径
umMin.setUserName(params.getString("appId"));
new ShareAction(mContext).setPlatform(SHARE_MEDIA.WEIXIN)
.setCallback(new UMShareListener() {
@Override
public void onStart(SHARE_MEDIA share_media) {
}
@Override
public void onResult(SHARE_MEDIA share_media) {
listener.onResult(true, "", null);
}
@Override
public void onError(SHARE_MEDIA share_media, Throwable throwable) {
listener.onResult(false, throwable.getMessage(), throwable);
}
@Override
public void onCancel(SHARE_MEDIA share_media) {
Throwable throwable = new Throwable("取消分享");
listener.onResult(false, "取消分享", throwable);
}
})
.withMedia(umMin)
.share();
}
public static void shareImgWithBoard(final Activity mContext, final ReadableMap params, final ShareListener listener) { public static void shareImgWithBoard(final Activity mContext, final ReadableMap params, final ShareListener listener) {
ShareBoardConfig boardConfig = new ShareBoardConfig(); ShareBoardConfig boardConfig = new ShareBoardConfig();
boardConfig.setTitleText("分享到"); boardConfig.setTitleText("分享到");
...@@ -145,7 +184,7 @@ public class Share { ...@@ -145,7 +184,7 @@ public class Share {
String imgUrl = params.getString("imgUrl"); String imgUrl = params.getString("imgUrl");
if(imgBase64 != null) { if (imgBase64 != null) {
Bitmap bitmap = null; Bitmap bitmap = null;
try { try {
byte[] bitmapArray = Base64.decode(imgBase64, Base64.DEFAULT); byte[] bitmapArray = Base64.decode(imgBase64, Base64.DEFAULT);
...@@ -187,7 +226,7 @@ public class Share { ...@@ -187,7 +226,7 @@ public class Share {
} }
public static void shareImg(final Activity mContext, final ReadableMap params, final ShareListener listener) { public static void shareImg(final Activity mContext, final ReadableMap params, final ShareListener listener) {
SHARE_MEDIA share_media = params.getString("platformType").equals("1")?SHARE_MEDIA.WEIXIN:SHARE_MEDIA.WEIXIN_CIRCLE; SHARE_MEDIA share_media = params.getString("platformType").equals("1") ? SHARE_MEDIA.WEIXIN : SHARE_MEDIA.WEIXIN_CIRCLE;
// UMImage image = new UMImage(mContext, new File(params.getString("imgPath"))); // UMImage image = new UMImage(mContext, new File(params.getString("imgPath")));
String imgBase64 = params.getString("imgBase64"); String imgBase64 = params.getString("imgBase64");
Bitmap bitmap = null; Bitmap bitmap = null;
......
...@@ -79,6 +79,16 @@ class Social { ...@@ -79,6 +79,16 @@ class Social {
} }
}) })
} }
launchMiniProgram(args) {
ReactSocial.launchMiniProgram(args)
}
shareToMiniProgram(args, callback) {
ReactShare.shareToMiniProgram(args, (result) => {
if (callback) {
callback(result)
}
})
}
shareImgWithBoard(args, callback) { shareImgWithBoard(args, callback) {
ReactShare.shareImgWithBoard(args, (result) => { ReactShare.shareImgWithBoard(args, (result) => {
if (callback) { if (callback) {
......
...@@ -31,6 +31,7 @@ RCT_EXPORT_METHOD(launchMiniProgram:(NSDictionary*)params) ...@@ -31,6 +31,7 @@ RCT_EXPORT_METHOD(launchMiniProgram:(NSDictionary*)params)
} }
@end @end
@implementation RNShareNativeBridge @implementation RNShareNativeBridge
RCT_EXPORT_MODULE(ReactShare) RCT_EXPORT_MODULE(ReactShare)
...@@ -61,6 +62,13 @@ RCT_EXPORT_METHOD(shareImgWithBoard:(NSDictionary*)params callback:(RCTResponseS ...@@ -61,6 +62,13 @@ RCT_EXPORT_METHOD(shareImgWithBoard:(NSDictionary*)params callback:(RCTResponseS
}]; }];
} }
RCT_EXPORT_METHOD(shareToMiniProgram:(NSDictionary*)params callback:(RCTResponseSenderBlock)callback)
{
[[RNShareConfig shareInstance] shareToMiniProgram:params callback:^(RNShareResponse *responseDO) {
callback(@[[responseDO serialization]]);
}];
}
@end @end
......
...@@ -37,6 +37,8 @@ typedef void (^RNShareResponseCallback)(RNShareResponse *responseDO); ...@@ -37,6 +37,8 @@ typedef void (^RNShareResponseCallback)(RNShareResponse *responseDO);
- (void)shareHandler:(NSDictionary *)data callback:(RNShareResponseCallback)callback; - (void)shareHandler:(NSDictionary *)data callback:(RNShareResponseCallback)callback;
- (void)shareImgWithBoardHandler:(NSDictionary *)data callback:(RNShareResponseCallback)callback; - (void)shareImgWithBoardHandler:(NSDictionary *)data callback:(RNShareResponseCallback)callback;
- (void)shareImgHandler:(NSDictionary *)data callback:(RNShareResponseCallback)callback; - (void)shareImgHandler:(NSDictionary *)data callback:(RNShareResponseCallback)callback;
- (void)shareToMiniProgram:(NSDictionary *)data callback:(RNShareResponseCallback)callback;
- (void)shareHandler:(id)data; - (void)shareHandler:(id)data;
- (void)initWechat:(NSString*)appKey appSecret:(NSString*)appSecret redirect:(NSString*)redirect; - (void)initWechat:(NSString*)appKey appSecret:(NSString*)appSecret redirect:(NSString*)redirect;
......
...@@ -204,6 +204,33 @@ ...@@ -204,6 +204,33 @@
}]; }];
} }
- (void) shareToMiniProgram:(NSDictionary *)data callback:(RNShareResponseCallback)callback;{
if (callback){
_callback = [callback copy];
}
__weak typeof(self) weakSelf = self;
RNShareParam *shareParam = [self formatParams:data];
[self setShareParams:shareParam];
UMSocialMessageObject *messageObject =[UMSocialMessageObject messageObject];
UMShareMiniProgramObject *shareObject =[UMShareMiniProgramObject shareObjectWithTitle:shareParam.title descr:shareParam.content thumImage:shareParam.image];
shareObject.webpageUrl =@"https://m.hisense.com";
shareObject.userName = data[@"appId"];
shareObject.path = data[@"path"];
messageObject.shareObject = shareObject;
shareObject.hdImageData =[NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"logo" ofType:@"png"]];
if (data[@"miniProgramType"]) {
shareObject.miniProgramType = [data[@"miniProgramType"] intValue]; //拉起小程序的类型
} else {
shareObject.miniProgramType =UShareWXMiniProgramTypeRelease;// 可选体验版和开发板
}
//调用分享接口
[[UMSocialManager defaultManager] shareToPlatform:UMSocialPlatformType_WechatSession messageObject:messageObject currentViewController:[RNShareConfig getRootViewController] completion:^(id result,NSError *error){
[weakSelf shareCallback:result error:error];
}];
}
- (void)shareCallback:(id)result error:(NSError *)error{ - (void)shareCallback:(id)result error:(NSError *)error{
if (!_callback){ if (!_callback){
......
...@@ -18,5 +18,5 @@ ...@@ -18,5 +18,5 @@
"start": "react-native start", "start": "react-native start",
"test": "jest" "test": "jest"
}, },
"version": "1.3.9" "version": "1.4.0"
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment