【发布时间】:2019-12-21 13:52:18
【问题描述】:
我正在尝试为 Stripe Android SDK 创建一个新的绑定,因为那里的绑定已经过时并且缺少 SCA 身份验证,这是最近发布的一项新功能,欧盟市场将需要该功能。
条带信息:https://stripe.com/docs/mobile/android 条带存储库:https://github.com/stripe/stripe-android
我正在使用今天可用的最后一个版本,10.2.1,我只剩下一个错误:
错误 CS0103 当前上下文中不存在名称“Start”
我有一些为 Android 制作绑定的经验,但这个很难解决:
如果我转到报告错误的自动生成类 -PaymentAuthWebViewStarter- 我可以看到:
// This method is explicitly implemented as a member of an instantiated Com.Stripe.Android.View.IAuthActivityStarter
void global::Com.Stripe.Android.View.IAuthActivityStarter.Start (global::Java.Lang.Object p0)
{
Start (global::Java.Interop.JavaObjectExtensions.JavaCast<global::Com.Stripe.Android.PaymentAuthWebViewStarter.Data>(p0));
}
但是那里没有 Start 的代码。这是预期的,因为 api.xml 向我显示了该类的以下代码:
<class abstract="false" deprecated="not deprecated" extends="java.lang.Object" extends-generic-aware="java.lang.Object" jni-extends="Ljava/lang/Object;" final="false" name="PaymentAuthWebViewStarter" static="false" visibility="public" jni-signature="Lcom/stripe/android/PaymentAuthWebViewStarter;">
<implements name="com.stripe.android.view.AuthActivityStarter" name-generic-aware="com.stripe.android.view.AuthActivityStarter<com.stripe.android.PaymentAuthWebViewStarter.Data>" jni-type="Lcom/stripe/android/view/AuthActivityStarter<Lcom/stripe/android/PaymentAuthWebViewStarter$Data;>;">
</implements>
<field deprecated="not deprecated" final="true" name="EXTRA_AUTH_URL" jni-signature="Ljava/lang/String;" static="true" transient="false" type="java.lang.String" type-generic-aware="java.lang.String" value=""auth_url"" visibility="public" volatile="false">
</field>
<field deprecated="not deprecated" final="true" name="EXTRA_CLIENT_SECRET" jni-signature="Ljava/lang/String;" static="true" transient="false" type="java.lang.String" type-generic-aware="java.lang.String" value=""client_secret"" visibility="public" volatile="false">
</field>
<field deprecated="not deprecated" final="true" name="EXTRA_RETURN_URL" jni-signature="Ljava/lang/String;" static="true" transient="false" type="java.lang.String" type-generic-aware="java.lang.String" value=""return_url"" visibility="public" volatile="false">
</field>
<field deprecated="not deprecated" final="true" name="EXTRA_UI_CUSTOMIZATION" jni-signature="Ljava/lang/String;" static="true" transient="false" type="java.lang.String" type-generic-aware="java.lang.String" value=""ui_customization"" visibility="public" volatile="false">
</field>
</class>
如您所见,没有任何 Start 方法的踪迹。接口已声明并具有预期的 Start 方法签名,如下所示:
<interface abstract="true" deprecated="not deprecated" final="false" name="AuthActivityStarter" static="false" visibility="public" jni-signature="Lcom/stripe/android/view/AuthActivityStarter;">
<typeParameters>
<typeParameter name="StartDataType" classBound="java.lang.Object" jni-classBound="Ljava/lang/Object;"></typeParameter>
</typeParameters>
<method abstract="true" deprecated="not deprecated" final="false" name="start" jni-signature="(Ljava/lang/Object;)V" bridge="false" native="false" return="void" jni-return="V" static="false" synchronized="false" synthetic="false" visibility="public">
<parameter name="p0" type="StartDataType" jni-type="TStartDataType;">
</parameter>
</method>
</interface>
另一方面,如果我使用 JD-GUI(java 反编译器)查看 .aar 类,我可以看到 Start 是在 PaymentAuthWebViewStarter 类中定义的:
public void start(@NonNull Data data)
{
Bundle extras = new Bundle();
extras.putString("client_secret", data.mClientSecret);
extras.putString("auth_url", data.mUrl);
extras.putString("return_url", data.mReturnUrl);
extras.putParcelable("ui_customization", this.mToolbarCustomization);
this.mHost.startActivityForResult(PaymentAuthWebViewActivity.class, extras, this.mRequestCode);
}
我的问题是:
为什么这个方法没有像任何其他类中的任何其他方法一样生成?
如何解决这个问题?
我已将代码留在这里:https://github.com/guillermo-gerard/stripe.android.sdk.binding/tree/master 非常欢迎您分叉并尝试解决此问题。
【问题讨论】:
标签: java c# android xamarin stripe-payments