У меня есть экран в моем приложении для 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 (сначала проверяю CCV с помощью модальности Google Pay) без необходимости что-либо делать. Плохая вещь заключается в том, что она также вводит CCV в поле PIN-кода, что неверно, поскольку именно там вы вводите свой PIN-код, если пытаетесь совершить платеж картой с помощью устройства POS.
Если я введу importantForAutofill="no"
в поле ПИН-кода, тогда он вообще ничего не заполняет, даже если я введу 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);
Как мне сделать предоплату номера карты из Google Pay, если CCV неправильно предварительно заполняет поле PIN-кода?