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

增加分享小程序

parent 69a49fc0
...@@ -3,53 +3,77 @@ package com.rnsocial.pay; ...@@ -3,53 +3,77 @@ 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
protected void onNewIntent(Intent intent) { protected void onNewIntent(Intent intent) {
super.onNewIntent(intent); super.onNewIntent(intent);
setIntent(intent); setIntent(intent);
api.handleIntent(intent, this); api.handleIntent(intent, this);
} }
@Override @Override
public void onReq(BaseReq baseReq) { public void onReq(BaseReq baseReq) {
} }
// -1 错误 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。 // -1 错误 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。
@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);
} }
this.finish(); } 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();
}
} }
...@@ -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
...@@ -18,57 +19,89 @@ import com.facebook.react.bridge.WritableMap; ...@@ -18,57 +19,89 @@ import com.facebook.react.bridge.WritableMap;
*/ */
public class ReactShareModule extends ReactContextBaseJavaModule { public class ReactShareModule extends ReactContextBaseJavaModule {
private final static String REACT_NAME = "ReactShare"; private final static String REACT_NAME = "ReactShare";
public ReactShareModule(ReactApplicationContext reactContext) { public ReactShareModule(ReactApplicationContext reactContext) {
super(reactContext); super(reactContext);
} }
@Override @Override
public String getName() { public String getName() {
return REACT_NAME; return REACT_NAME;
} }
@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) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
try {
Share.share(activity, getShareContent(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());
}
} }
if(activity != null){ });
activity.runOnUiThread(new Runnable() { }
@Override }
public void run() {
try { @ReactMethod
Share.share(activity, getShareContent(params), new ShareListener() { public void shareToMiniProgram(final ReadableMap params, final Callback callback) {
@Override final Activity activity = getCurrentActivity();
public void onResult(boolean success, String result, Throwable throwable) { if (params == null) {
if (callback == null){ Toast.makeText(activity, "分享参数异常", Toast.LENGTH_SHORT).show();
return; return;
} }
WritableMap resultMap = Arguments.createMap(); if (activity != null) {
resultMap.putBoolean("success", success); activity.runOnUiThread(new Runnable() {
resultMap.putString("message", result); @Override
callback.invoke(resultMap); public void run() {
} try {
}); Share.shareToMiniProgram(activity, params, new ShareListener() {
}catch (Exception e){ @Override
Log.e(REACT_NAME,e.getMessage()); 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 @ReactMethod
public void shareImgWithBoard(final ReadableMap params, final Callback callback){ public void shareImgWithBoard(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() {
...@@ -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,68 +118,68 @@ public class ReactShareModule extends ReactContextBaseJavaModule { ...@@ -85,68 +118,68 @@ 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());
} }
} }
}); });
} }
} }
@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
public void run() { public void run() {
try { try {
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();
resultMap.putBoolean("success", success);
resultMap.putString("message", result);
callback.invoke(resultMap);
}
});
}catch (Exception e){
Log.e(REACT_NAME,e.getMessage());
}
} }
WritableMap resultMap = Arguments.createMap();
resultMap.putBoolean("success", success);
resultMap.putString("message", result);
callback.invoke(resultMap);
}
}); });
} catch (Exception e) {
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")){
shareContent.content = params.getString("content");
}
if(params.hasKey("image")){
shareContent.image = params.getString("image");
}
if(params.hasKey("useContentTitle")){
shareContent.useContentTitle = params.getBoolean("useContentTitle");
}
if(params.hasKey("showPoster")){
shareContent.showPoster = true;
}
return shareContent;
} }
if (params.hasKey("content")) {
shareContent.content = params.getString("content");
}
if (params.hasKey("image")) {
shareContent.image = params.getString("image");
}
if (params.hasKey("useContentTitle")) {
shareContent.useContentTitle = params.getBoolean("useContentTitle");
}
if (params.hasKey("showPoster")) {
shareContent.showPoster = true;
}
return shareContent;
}
} }
...@@ -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