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



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

尝试单击PayPal按钮不会导致出现任何活动,并且 onActivityResult 被调用,并带有第一个用户结果代码,但例外

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之内,我能够检索ActivityInfo以进行BraintreeBrowserSwitchActivity它只返回 false,因为AppHelper.isIntentAvailable(fragment.getApplicationContext(), intent)是假

的isManifestValid可以在这里找到

isIntentAvailablecontext.getPackageManager().queryIntentActivities(intent, 0)内返回了一个空列表,使我认为尽管在我的 AndroidManifest 文件中声明了 URL 方案,但 Intent 没有注册使用任何活动。 isIntentAvailable 可以在这里找到

<?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工作。如果您有任何其他问题,请随时联系 支持。

清单文件的格式符合我们的文档。您应该在 isIntentAvailable() 方法中设置一个断点来检查activities对象,以查看注册了哪些其他应用程序/活动来处理给定Intent

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

您可能安装了侦听相同 URL 方案或清单合并的另一个应用版本/内部版本,可能以某种方式最终声明了两次,这会导致此错误。

最新更新