启用自动填充后,凭据不会使用 Smart Lock API 保存密码

Credentials are not being saved with Smart Lock API for passwords when Autofill is enabled

我目前正在 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 for Passwords 保存对话框:

在构建 CredentialsClient 时通过 CredentialsOptions 为所有平台启用保存确认对话框。

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

通过将与登录字段关联的根视图标记为对自动填充不重要来禁止自动填充保存对话框:

<!-- 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 中的 属性,但没有用。更糟的是,当撤消它时,应用程序按预期停止工作并开始抛出前面提到的错误,我卸载并重新启动 phone,但仍然没有显示对话框并抛出相同的错误,即使它有修复抑制应用的自动填充。

我已经检查过,该应用不在 declined sites and apps 列表中 我检查了系统 -> 语言 -> 更多 -> 自动填充 -> google 被选中

希望有人能帮助我。

伙计们,我自己找到了答案,我发布这个以防其他人需要它。

在我的特定情况下,问题是由于未更改 activity 引起的,我在概念单一 activity 应用程序的小教授中遇到了这个问题,因此“自动填充上下文”是没有完成。我在自动填充文档中找到了这个概念:

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

最重要的是要么完成当前 activity 并转到另一个,要么调用:

 val autofillManager = requireContext().getSystemService(AutofillManager::class.java)
autofillManager.commit()