Google Smart Lock 对话框未出现在 Android O 设备中
Google Smart Lock dialog is not appearing in Android O devices
我最近将 GoogleSmartLock 与我的应用程序集成在一起。不知何故,Android O 设备中没有出现保存对话框,API 抛出以下错误。
The Credentials API's save confirmation dialog has been disabled to
avoid conflicts with the Android Autofill feature. This choice may be
overridden via
AuthCredentialsOptions.Builder.forceEnableSaveDialog().,
resolution=null}
我查看了playservices的最新发行说明,发现以下API可以解决这个问题。
Auth.AuthCredentialsOptions.Builder forceEnableSaveDialog ()
但我不确定如何将此 api 与 GoogleApIClient 一起使用,因为它没有技术上应该 return AuthCredentialOptions 实例的构建方法。如果有人遇到同样的问题,请告诉我。
更新 1:此问题已在最新版本(版本 11.8.0)中得到解决:
AuthCredentialsOptions
已弃用,取而代之的是新的 CredentialsOptions
.
Credentials.getClient()
现在提供接受 CredentialsOptions
的重载。
代码示例(以及有关使用 .forceEnableSaveDialog
的更多文档)在 overview documentation 的 "Targeting Android O and above" 部分可用,并且已更新为使用新选项 class.
我设法使用反射来解决这个问题:
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();
AuthCredentialsOptions.Builder 的 public SDK 中缺少 build() 方法,我们修复了它(参见已接受的答案)
但一个更重要的说明:自动填充 Google 保存对话框将密码存储到同一个 Smart Lock 数据库,所以如果自动填充对话框显示,那么你不不需要担心使用 API 强制显示另一个对话框(事实上,如果您通过 API 强制显示对话框,那么请确保取消自动填充一个...用户不应该见两个对话框)。通过任一对话框保存的数据将可用于 Smart Lock 自动登录(反之亦然用于自动填充)并且数据通过 Google 帐户与 Chrome 同步(自动填充和 API ).
由于对话框将数据存储到同一位置,我们选择在用户使用 Google 作为自动填充管理器时显示带有 Google 的自动填充,因为它将在所有应用程序中提供一致的体验在奥利奥设备上。致力于改进错误消息、文档和品牌以澄清这一点。抱歉造成混淆。
我最近将 GoogleSmartLock 与我的应用程序集成在一起。不知何故,Android O 设备中没有出现保存对话框,API 抛出以下错误。
The Credentials API's save confirmation dialog has been disabled to avoid conflicts with the Android Autofill feature. This choice may be overridden via AuthCredentialsOptions.Builder.forceEnableSaveDialog()., resolution=null}
我查看了playservices的最新发行说明,发现以下API可以解决这个问题。
Auth.AuthCredentialsOptions.Builder forceEnableSaveDialog ()
但我不确定如何将此 api 与 GoogleApIClient 一起使用,因为它没有技术上应该 return AuthCredentialOptions 实例的构建方法。如果有人遇到同样的问题,请告诉我。
更新 1:此问题已在最新版本(版本 11.8.0)中得到解决:
AuthCredentialsOptions
已弃用,取而代之的是新的CredentialsOptions
.Credentials.getClient()
现在提供接受CredentialsOptions
的重载。
代码示例(以及有关使用 .forceEnableSaveDialog
的更多文档)在 overview documentation 的 "Targeting Android O and above" 部分可用,并且已更新为使用新选项 class.
我设法使用反射来解决这个问题:
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();
AuthCredentialsOptions.Builder 的 public SDK 中缺少 build() 方法,我们修复了它(参见已接受的答案)
但一个更重要的说明:自动填充 Google 保存对话框将密码存储到同一个 Smart Lock 数据库,所以如果自动填充对话框显示,那么你不不需要担心使用 API 强制显示另一个对话框(事实上,如果您通过 API 强制显示对话框,那么请确保取消自动填充一个...用户不应该见两个对话框)。通过任一对话框保存的数据将可用于 Smart Lock 自动登录(反之亦然用于自动填充)并且数据通过 Google 帐户与 Chrome 同步(自动填充和 API ).
由于对话框将数据存储到同一位置,我们选择在用户使用 Google 作为自动填充管理器时显示带有 Google 的自动填充,因为它将在所有应用程序中提供一致的体验在奥利奥设备上。致力于改进错误消息、文档和品牌以澄清这一点。抱歉造成混淆。