11

我最近将 GoogleSmartLock 与我的应用程序集成。不知何故,Android O 设备中没有出现保存对话框,API 抛出以下错误。

Credentials API 的保存确认对话框已被禁用,以避免与 Android 自动填充功能发生冲突。这个选择可以通过 AuthCredentialsOptions.Builder.forceEnableSaveDialog()., resolution=null} 覆盖

我查看了 playservices 的最新版本说明,发现以下 API 可以解决此问题。

Auth.AuthCredentialsOptions.Builder forceEnableSaveDialog ()

但我不确定如何将此 api 与 GoogleApIClient 一起使用,因为它没有技术上应该返回 AuthCredentialOptions 实例的构建方法。如果有人遇到同样的问题,请告诉我。

4

3 回答 3

10

更新 1:此问题已在最新版本(版本 11.8.0)中得到解决:

代码示例(以及有关 using 的更多文档.forceEnableSaveDialog)可在概览文档的“面向 Android O 及更高版本”部分中找到,并且已更新为使用新的选项类。

于 2017-11-08T01:27:45.733 回答
4

AuthCredentialsOptions.Builder 的公共 SDK 中缺少 build() 方法,我们修复了它(请参阅接受的答案)

但更重要的澄清:Autofill with Google save dialog 将密码存储到同一个 Smart Lock 数据库,所以如果 Autofill 对话框显示,那么您无需担心使用 API 强制显示其他对话框(实际上,如果您通过 API 强制对话框,请确保禁止自动填充一个...用户不应看到两个对话框)。通过任一对话框保存的数据将可用于 Smart Lock 自动登录(反之亦然用于自动填充),并且数据通过 Google 帐户与 Chrome 同步(自动填充和 API)。

由于对话框将数据存储到同一个位置,因此我们选择在用户使用 Google 作为其自动填充管理器时显示使用 Google 自动填充的对话框,因为它将在 Oreo 设备上的所有应用程序中提供一致的体验。致力于改进错误消息、文档和品牌以澄清这一点。对困惑感到抱歉。

于 2017-11-29T21:29:46.560 回答
1

我设法使用反射来解决这个问题:

Auth.AuthCredentialsOptions authCredentialsOptions = null;
try {
    Constructor<Auth.AuthCredentialsOptions> constructor = Auth.AuthCredentialsOptions.class.getDeclaredConstructor(Auth.AuthCredentialsOptions.Builder.class);
    constructor.setAccessible(true);
    authCredentialsOptions = constructor.newInstance(new Auth.AuthCredentialsOptions.Builder().forceEnableSaveDialog());
} catch (Exception e) {
    e.printStackTrace();
}
GoogleApiClient.Builder builder = new GoogleApiClient.Builder(this)
        .addConnectionCallbacks(this)
        .enableAutoManage(this, 0, this);
if (authCredentialsOptions != null) {
    builder.addApi(Auth.CREDENTIALS_API, authCredentialsOptions);
} else {
    builder.addApi(Auth.CREDENTIALS_API);
}
mGoogleApiClient = builder.build();
于 2017-11-27T08:59:34.333 回答