Учетные данные не сохраняются с помощью Smart Lock API для паролей, когда включено автозаполнение - PullRequest
0 голосов
/ 19 июня 2020

В настоящее время я использую Smart Lock для пароля в приложении android, я следую документации: https://developers.google.com/identity/smartlock-passwords/android/store-credentials

в android Oreo и выше есть это автозаполнение функция, и я вижу всплывающее окно автозаполнения в поле, моя проблема заключается в том, что я пытаюсь сохранить учетные данные, я получаю сообщение об ошибке:

16: Credentials API's save confirmation dialog has been disabled to avoid conflicts with the Android Autofill feature. This choice may be overridden via CredentialsOptions.

, которое я прочитал в других сообщениях это ожидаемая ошибка, и она предназначена для предотвращения, как указано в conflicts with the Android Autofill feature, но я не вижу другого диалогового окна для подтверждения учетных данных для сохранения.

Пробовал с эмуляторами и реальными устройствами получаю тот же результат. Затем я попытался принудительно отобразить диалоговое окно Smart Lock для сохранения паролей, следуя документации:

Включить диалоговое окно подтверждения сохранения для всех платформ с помощью CredentialsOptions при создании CredentialsClient.

CredentialsOptions options = new CredentialsOptions.Builder()
        .forceEnableSaveDialog()
        .build();
mCredentialsClient = Credentials.getClient(this, options);

Подавить диалоговое окно сохранения автозаполнения, отметив представление root, связанное с полями входа в систему, как неважное для автозаполнения:

<!-- Mark the root view with android:importantForAutofill="noExcludeDescendants" -->
<LinearLayout
    android:importantForAutofill="noExcludeDescendants"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <!-- ... -->
</LinearLayout>     

Я сделал это, и он сработал, диалоговое окно отображалось при сохранении, но функция автозаполнения исчез (как и ожидалось), и мне нужны всплывающие окна, это часть моих требований.

Я также пробовал применять только CredentialsOptions options, упомянутый выше, без свойства в XML, что не не работает. Даже хуже, при отмене это приложение перестало работать, как ожидалось, и начало выдавать упомянутую ранее ошибку, я удалил и перезапустил телефон, но по-прежнему не показывает диалоговое окно и выдает ту же ошибку, хотя в нем есть исправление для подавления примененного автозаполнения .

У меня есть чек, а приложения нет в списке declined sites and apps Я проверил систему -> язык -> еще -> автозаполнение -> выбрано Google

Надеюсь, кто-нибудь может мне помочь.

1 Ответ

1 голос
/ 22 июня 2020

Ребята, я сам нашел ответ, я отправляю его на случай, если он понадобится кому-то другому.

В моем конкретном сценарии c проблема была вызвана тем, что не менял активность, у меня была эта проблема возникла в небольшом профессиональном концептуальном приложении с одним действием, поэтому "контекст автозаполнения" не был завершен. Я нашел эту концепцию здесь, в документации по автозаполнению:

https://developer.android.com/guide/topics/text/autofill-optimize#ensure

нижняя строка: либо вы завершаете sh текущее действие и переходите к другому, либо вы звоните:

 val autofillManager = requireContext().getSystemService(AutofillManager::class.java)
autofillManager.commit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...