我没有使用FirebaseUI。在使用FirebaseUI为应用程序用户创建新帐户后,我设法将电子邮件和密码存储到Smart Lock中。
我不得不删除FirebaseUI,因为它不允许精确控制通过静默登录方式登录哪个帐户,而我依靠它来切换一个用户可以在设备上拥有的多个帐户。 / p>
使用CredentialsClient
可以毫无疑问地检索到这些密码。用户会看到一个对话框,他可以在其中选择帐户,然后密码将通过onActivityResult
移交给应用程序。为此,我遵循了Google的指南 Retrieve a user's stored credentials 。
但是我无法将新的电子邮件和密码另存为新的凭据。我总是收到com.google.android.gms.common.api.CommonStatusCodes.SIGN_IN_REQUIRED
形式的消息Passphrase required
的错误com.google.android.gms.common.api.ApiException
。
这是我的代码:
CredentialsOptions options = new CredentialsOptions.Builder()
.forceEnableSaveDialog()
.build();
CredentialsClient mCredentialsClient = Credentials.getClient(MainActivity.activity, options);
Credential credential = new Credential.Builder("email@example.com")
.setPassword("dummy-password")
.build();
mCredentialsClient.save(credential).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
LogWrapper.i(TAG, "Credentials saved");
}
else if (task.getException() instanceof ResolvableApiException) {
ResolvableApiException rae = (ResolvableApiException) task.getException();
LogWrapper.e(TAG, "RAE EXCEPTION WHEN SAVING PASSWORD:", rae);
}
else {
Exception e = task.getException();
LogWrapper.e(TAG, "EXCEPTION WHEN SAVING PASSWORD:", e);
}
}
});
我在该设备上拥有三个Google帐户,其中一个配置了用于同步的密码,另外两个则没有。
使用密码短语,您可以使用Google的云来存储和同步您的 Chrome浏览器中的数据,但不允许Google读取。您的付款方式和 Google Pay的地址未使用密码加密。
密码短语是可选的。您同步的数据始终受到以下方面的保护: 传输时进行加密。
我不确定是否由于此原因导致此错误消息,这是必需的密码短语。但是再一次,我想知道为什么FirebaseUI不会在没有询问的情况下将凭据存储到正确的帐户中就没有问题,这是不使用密码短语的。
我还通过FirebaseUI的Google登录帐户登录了该帐户,我想将凭据保存到该帐户,然后执行上面的代码,以查看该登录用户是否会将应用设置为当前状态登录该Google帐户,因为错误消息似乎是我希望的,并且愿意将一些电子邮件和密码凭据保存到该帐户中。没什么区别。
我阅读了Firebase的approach to using Smart Lock,但找不到与我所做的任何真正的区别。
它与CredentialsQuickstart应用程序中显示的基本上相同。
所以问题是:需要登录什么?为什么我收到此消息?
更新:我已经下载并编译了https://github.com/android/identity-samples/tree/master/CredentialsQuickstart,但出现了相同的错误,因此这似乎是一些更普遍的问题。
这是在Android 10上。我也在另一台装有Android 9的设备上尝试过,在那里我也遇到了同样的问题。
此API是否已被“自动填充服务”之类的东西“弃用”?我在“工具”下的“语言和输入”中找到了一个选项,其中有来自Google的自动填充服务,我可以选择一个帐户来存储凭据。并且将其配置为使用没有密码的帐户,即FirebaseUI将凭据正确存储到的帐户。我认为在三星设备上,它还提供了额外的自动填充服务。
然后就是这样:https://developer.android.com/guide/topics/text/autofill