我的 Android 应用程序中有一个屏幕,我们要求用户输入卡号和相应的 PIN 码(忽略这方面的安全风险),如果我们可以预先填写来自 Google Pay 的数据,那就太好了它存储了。
我有以下布局,精简到基本要素:
<LinearLayout>
<!-- Id -->
<LinearLayout>
<ImageView/>
<android.support.design.widget.TextInputLayout android:hint="User Id">
<android.support.design.widget.TextInputEditText
android:id="@+id/txtUserId"
android:inputType="number"/>
</android.support.design.widget.TextInputLayout>
</LinearLayout>
<!-- Card Number -->
<LinearLayout>
<ImageView/>
<android.support.design.widget.TextInputLayout android:hint="Card number">
<android.support.design.widget.TextInputEditText
android:id="@+id/txtCardNumber"
android:inputType="number"/>
</android.support.design.widget.TextInputLayout>
</LinearLayout>
<!-- PIN Number -->
<LinearLayout>
<ImageView />
<android.support.design.widget.TextInputLayout android:hint="PIN Number">
<android.support.design.widget.TextInputEditText
android:id="@+id/txtPin"
android:maxLength="4"
android:inputType="numberPassword" />
</android.support.design.widget.TextInputLayout>
</LinearLayout>
</LinearLayout>
在这种状态下,当我点击信用卡字段时,它会正确尝试预填我存储在 Google 中的信用卡(首先通过 Google Pay 模式验证 CCV),而无需我做任何事情。不好的是,这也是将 CCV 放入 PIN 字段,这是不正确的,因为如果您尝试在 POS 设备上使用卡付款,您可以在其中输入 PIN 码。
如果我importantForAutofill="no"
在 PIN 字段上输入,那么即使我在卡号字段上输入importantForAutofill="yes"
和,它也不会进行任何预填充。android:autofillHints="creditCardNumber"
同样,如果我以编程方式执行此操作,则不会进行任何预填充:
inputId.setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO);
inputCardNumber.setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_YES);
inputCardNumber.setAutofillHints(View.AUTOFILL_HINT_CREDIT_CARD_NUMBER);
inputPin.setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO);
如何在不将 CCV 错误地预填到 PIN 字段中的情况下从 Google Pay 预填卡号?