Android 将智能锁与Firebase身份验证电子邮件+;密码帐户

Android 将智能锁与Firebase身份验证电子邮件+;密码帐户,android,firebase-authentication,google-smartlockpasswords,Android,Firebase Authentication,Google Smartlockpasswords,我没有使用FirebaseUI。使用FirebaseUI,我在为应用程序用户创建新帐户后,成功地将电子邮件和密码存储到智能锁中 我不得不删除FirebaseUI,因为它不允许精确控制通过静默登录登录哪个帐户,我依靠静默登录在一个用户可以在设备上拥有的多个帐户之间切换 使用CredentialsClient检索这些密码没有问题;用户可以在一个对话框中选择帐户,密码将通过onActivityResult传递给应用程序。为了做到这一点,我遵循了谷歌的指南 但我无法将新电子邮件和密码保存为新凭据。我总是

我没有使用FirebaseUI。使用FirebaseUI,我在为应用程序用户创建新帐户后,成功地将电子邮件和密码存储到智能锁中

我不得不删除FirebaseUI,因为它不允许精确控制通过静默登录登录哪个帐户,我依靠静默登录在一个用户可以在设备上拥有的多个帐户之间切换

使用
CredentialsClient
检索这些密码没有问题;用户可以在一个对话框中选择帐户,密码将通过
onActivityResult
传递给应用程序。为了做到这一点,我遵循了谷歌的指南

但我无法将新电子邮件和密码保存为新凭据。我总是收到错误
com.google.android.gms.common.api.CommonStatusCodes.SIGN_REQUIRED
,并以
com.google.android.gms.common.api.ApiException
的形式显示消息
Passphrase REQUIRED

这是我的代码:

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);
        }
    }
});
CredentialsOptions=new-CredentialsOptions.Builder()
.forceEnableSaveDialog()
.build();
CredentialsClient mCredentialsClient=Credentials.getClient(MainActivity.activity,options);
凭证凭证=新凭证.Builder(“email@example.com")
.setPassword(“伪密码”)
.build();
mCredentialsClient.save(凭证).addOnCompleteListener(新的OnCompleteListener(){
@覆盖已完成的公共void(@NonNull任务){
if(task.issusccessful()){
LogWrapper.i(标记“凭证已保存”);
}
else if(task.getException()ResolvableApiException实例){
ResolvableApiException rae=(ResolvableApiException)task.getException();
LogWrapper.e(标记,“保存密码时RAE异常:”,RAE);
}
否则{
异常e=task.getException();
LogWrapper.e(标记“保存密码时异常:”,e);
}
}
});
我在那台设备上有三个谷歌账户,其中一个配置了用于同步的密码,另外两个没有

使用密码短语,你可以使用谷歌的云存储和同步你的数据 不让谷歌阅读的Chrome数据。您的付款方式和 来自Google Pay的地址不使用密码短语加密

密码短语是可选的。您的同步数据始终受 在运输过程中进行加密

我不确定此错误消息是否是由于此原因造成的,这是所需的密码短语。但我还是想知道为什么FirebaseUI在存储凭证时没有问题,甚至在没有询问的情况下就存储到正确的帐户中,而这个帐户不使用密码短语

我还通过FirebaseUI的Google登录登录了该帐户,我想在其中保存凭据,然后执行上面的代码,以查看该登录用户是否会将应用程序设置为登录到该Google帐户的状态,正如错误消息所期望的那样,并愿意将一些电子邮件和密码凭据保存到该帐户中。那没什么区别

我读过Firebase的,但我找不到我所做的有什么真正的区别

它与应用程序中显示的基本相同

所以问题是:需要登录什么?为什么我会收到这个信息


更新:我已经下载并编译了,在那里我得到了相同的错误,所以这似乎是一些更普遍的问题

这是安卓10上的。我也在另一台安卓9设备上试用过,我也遇到了同样的问题

这个API是否被称为“自动填充服务”的东西“弃用”?我在“工具”下的“语言与输入”中找到了一个选项,其中有一个来自谷歌的自动填充服务,我可以选择一个帐户,将凭证存储到其中。这被配置为使用没有密码短语的帐户,FirebaseUI在其中正确存储凭据。我认为在三星设备上,它还提供了额外的自动填充服务

那就是: