我最近将GoogleSmartLock与我的应用程序集成在一起。不知何故,Android O设备中没有出现保存对话框,API正在抛出以下错误。
凭据API的保存确认对话框已被禁用避免与Android自动填充功能发生冲突。这个选择可能是通过覆盖AuthCredentialsOptions.Builder.forceEnableSaveDialog()。,resolution=null}
我查看了playservices的最新发行说明,发现下面的API可以解决这个问题。
Auth.AuthCredentialsOptions.Builder forceEnableSaveDialog ()
但我不知道如何将这个api与GoogleApIClient一起使用,因为它没有从技术上返回AuthCredentialOptions实例的构建方法。如果有人面临同样的问题,请告诉我。
更新1:此问题在最新版本(11.8.0版)中得到解决:
AuthCredentialsOptions
已被弃用,取而代之的是新的CredentialsOptions
Credentials.getClient()
现在提供接受CredentialsOptions
的重载
代码示例(以及关于使用.forceEnableSaveDialog
的进一步文档)可在概述文档的"瞄准Android O及以上版本"部分获得,并且已更新为使用新选项类。
AuthCredentialsOptions.Builder的公共SDK中缺少build()方法,我们修复了它(请参阅接受的答案)
但更重要的澄清是:使用Google保存对话框的自动填充将密码存储到同一个智能锁数据库,因此如果显示自动填充对话框,则不必担心使用API强制显示另一个对话框(事实上,如果通过API强制显示对话框,则确保抑制自动填充一个…用户不应看到两个对话框)。通过任一对话框保存的数据将可用于智能锁自动登录(自动填充反之亦然),数据通过谷歌帐户与Chrome(自动填充和API)同步。
由于对话框将数据存储在同一个位置,当用户使用谷歌作为自动填充管理器时,我们选择使用谷歌显示自动填充,因为它将在奥利奥设备上的所有应用程序中提供一致的体验。致力于改进错误消息、文档和品牌以澄清这一点。很抱歉造成混乱。
我设法使用反射来解决这个问题:
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();