android-intent - BrainTree 上的 PayPal 集成(在 Xamarin.Forms 上)

标签 android-intent android-activity paypal xamarin.forms braintree

我正在尝试在 xamarin.forms 中使用 UI 中的下拉来实现 braintree。通过这样做,我创建了一个依赖服务来使用 iOS 或 Android 的相应代码。从 android 实现开始,我开始获取一个绑定(bind)包,允许我调用 Android v2 SDK 中的函数。除了 PayPal Integration 之外,一切似乎都有效。 BrainTree android binding

尝试点击 paypal 按钮不会导致出现任何 Activity ,并且 onActivityResult 会被调用并带有第一个用户结果代码,但异常(exception)情况

Com.Braintreepayments.Api.Exceptions.BraintreeException: BraintreeBrowserSwitchActivity missing, incorrectly configured in AndroidManifest.xml or another app defines the same browser switch url as this app. See https://developers.braintreepayments.com/guides/client-sdk/android/v2#browser-switch for the correct configuration

无法调试我得到异常的原因我能够模拟检查 - isManifestValid

isManifestValid 中,我能够检索 BraintreeBrowserSwitchActivityActivityInfo 它只返回 false 因为 AppHelper.isIntentAvailable(fragment.getApplicationContext(), intent) 是 false

isManifestValid can be found here

isIntentAvailable context.getPackageManager().queryIntentActivities(intent, 0) 中返回了一个空列表,这让我认为 Intent 没有注册使用任何 Activity ,尽管有在我的 AndroidManifest 文件中声明了 URL 方案。 isIntentAvailable can be found here

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.3.16" package="com.company.abcmobileapp.android" android:installLocation="auto" android:versionCode="24">
    <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="23" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  <uses-permission android:name="android.permission.USE_FINGERPRINT" />
  <uses-permission android:name="com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY" />
    <application android:debuggable="false" android:label="ABC" android:theme="@android:style/Theme.Holo.Light" android:icon="@drawable/appicon" android:largeHeap="true" android:hardwareAccelerated="false">
    <activity android:name="com.braintreepayments.api.BraintreeBrowserSwitchActivity"
    android:launchMode="singleTask">
      <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="com.company.abcmobileapp.android.braintree" />
      </intent-filter>
    </activity>
    <activity android:name="ShareActivity">
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
        </intent-filter>
    </activity>
  </application>
</manifest>

关于我可以做些什么来进一步调试或解决问题,是否有任何建议?非常感谢任何帮助,谢谢。

最佳答案

完全披露:我在 Braintree 工作。如果您有任何其他问题,请随时联系 support .

list 文件的格式符合 our documentation .您应该在 isIntentAvailable() 中设置一个断点检查 activities 对象以查看注册了哪些其他应用程序/Activity 来处理给定的 Intent 的方法。

public static boolean isIntentAvailable(Context context, Intent intent) {
    List<ResolveInfo> activities = context.getPackageManager().queryIntentActivities(intent, 0);
    return activities != null && activities.size() == 1;
}

您可能安装了另一个版本/构建的应用程序来监听相同的 URL 方案,或者 list 合并可能以某种方式最终声明它两次,这将导致此错误。

关于android-intent - BrainTree 上的 PayPal 集成(在 Xamarin.Forms 上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48574010/

相关文章:

flutter - 适用于 Flutter 的 PayPal SDK?

java - 广播接收器未收到 Intent

Android Activity 到 Service 类

android - 如何从服务或警报通知 "current" Activity ?

java - 从插件中扩展 Activity 的类获取值

paypal - 新的 PayPal API 中没有 AppID?

android - 通过 Intent 发送短信并知道短信是否已发送

android - 打开浏览器时出现 ActivityNotFoundException

android - 从 Android 应用程序安装程序和主屏幕启动应用程序时的 Activity 堆栈排序问题

paypal - 在线资金转账服务的正确术语是什么?