0

我的 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 预填卡号?

4

0 回答 0