React Native集成Braintree PayPal Vault遇阻,求技术解决方案
React Native集成Braintree PayPal Vault问题求助
我在React Native开发的应用中,需要集成Braintree的PayPal Vault功能。官方提供了JS、Android、iOS三种SDK,尝试两种集成方式均遇到问题:
- 集成Android原生库:调用Native方法后仅输出
react-native-test,无报错但未跳转至PayPal授权页面,功能未生效; - 使用JS库:导入相关方法后应用无法启动。
疑惑是否只能通过WebView实现该功能?恳请有相关集成经验的开发者提供建议。
参考文档:Braintree PayPal Vault Android v4官方文档
我的Android代码如下:
BraintreeValueModule.java
public class BraintreeValueModule extends ReactContextBaseJavaModule implements PayPalListener { private static ReactApplicationContext reactContext; private Callback successCallback; private Callback errorCallback; private BraintreeClient braintreeClient; private PayPalClient payPalClient; public BraintreeValueModule(ReactApplicationContext context) { super(context); reactContext = context; } @NonNull @Override public String getName() { return "BraintreeValueModule"; } @ReactMethod public void test(){ System.out.println("react-native-test"); braintreeClient = new BraintreeClient(reactContext.getApplicationContext(), "sandbox_ykbznr4s_ctmssyj6wz2qcj2g"); FragmentActivity activity = (FragmentActivity) getCurrentActivity(); activity.runOnUiThread(new MyRunnable(activity,braintreeClient)); //The following writing method will report an error: Method addObserver must be called on the main thread //if(activity != null){ // payPalClient = new PayPalClient(activity, braintreeClient); // payPalClient.setListener(this); //} } @Override public void onPayPalSuccess(@NonNull PayPalAccountNonce payPalAccountNonce) { successCallback.invoke(payPalAccountNonce.toString()); } @Override public void onPayPalFailure(@NonNull Exception error) { if (error instanceof UserCanceledException) { // user canceled errorCallback.invoke("use canceled"); } else { // handle error errorCallback.invoke("error"); } } }
MyRunnable.java
public class MyRunnable implements Runnable, PayPalListener { private BraintreeClient braintreeClient; private PayPalClient payPalClient; private FragmentActivity activity; MyRunnable(FragmentActivity activity,BraintreeClient braintreeClient){ this.activity = activity; this.braintreeClient = braintreeClient; } @Override public void run() { if(activity != null){ payPalClient = new PayPalClient(activity, braintreeClient); payPalClient.setListener(this); } } @Override public void onPayPalSuccess(@NonNull PayPalAccountNonce payPalAccountNonce) { System.out.println(payPalAccountNonce.getString()); } @Override public void onPayPalFailure(@NonNull Exception error) { if (error instanceof UserCanceledException) { // user canceled System.out.println("use canceled"); } else { // handle error System.out.println("error"); } } }
内容的提问来源于stack exchange,提问作者Z Hu
相关产品推荐
相关产品推荐

