将Smart Lock与Firebase Auth Email + Password帐户一起使用

时间:2019-12-30 09:24:56

标签: android firebase-authentication google-smartlockpasswords

我没有使用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帐户,其中一个配置了用于同步的密码,另外两个则没有。

Keep your info private

  

使用密码短语,您可以使用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

0 个答案:

没有答案