使用谷歌智能锁进行oauth登录方法

时间:2018-05-19 10:02:42

标签: android google-smartlockpasswords

我在我的一个Android应用程序中使用谷歌智能锁。对于涉及 oauth 的登录方法,我在将智能锁集成到我的应用程序时遇到了一些问题。我使用 google facebook oauth作为登录方法,并返回oauth令牌和oauth秘密,我将其发送到我的服务器进行身份验证。

现在,如何为这些方法实施Google智能锁?

如何使用智能锁保存这些凭据,以便稍后读取凭据时,我可以检索它们并使用它们进行身份验证?

是否可以使用自定义oauth方法实施Google智能锁定功能?我查看了互联网上的许多来源,但找不到任何解决方案。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

使用当前的Smart Lock API无法存储令牌,但您可以存储用户选择的帐户类型。例如,要记住用户在Google上使用OAuth,请创建如下凭据:

Credential credential = new Credential.Builder(gsa.getEmail())
        .setAccountType(IdentityProviders.GOOGLE)
        .setName(gsa.getDisplayName())
        .setProfilePictureUri(gsa.getPhotoUrl())
        .build();

您可以定义自己的帐户类型。如果提供的电子邮件地址与设备上的Google帐户匹配,则可以自动存储此条目;否则,用户需要确认使用哪个Google帐户保存数据。

然后,您可以稍后在其他设备上或在用户会话过期后检索此信息,并自动启动此OAuth提供的登录流程。例如,Google:

mCredentialRequest = new CredentialRequest.Builder()
    .setAccountTypes(IdentityProviders.GOOGLE)
    .build();

mCredentialsClient.request(mCredentialRequest).addOnCompleteListener(
      new OnCompleteListener<CredentialRequestResponse>() {
          @Override
          public void onComplete(@NonNull Task<CredentialRequestResponse> task) {

              if (task.isSuccessful()) {
onCredentialRetrieved(task.getResult().getCredential());
                  return;
              }
          }
      });

private void onCredentialRetrieved(Credential credential) {
    String accountType = credential.getAccountType();
    if (accountType.equals(IdentityProviders.GOOGLE)) {
        // The user has previously signed in with Google Sign-In. Silently
        // sign in the user with the same ID.
        // See https://developers.google.com/identity/sign-in/android/
        GoogleSignInOptions gso =
                new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                        .requestEmail()
                        .build();

        GoogleSignInClient signInClient = GoogleSignIn.getClient(this, gso);
        Task<GoogleSignInAccount> task = signInClient.silentSignIn();
        // ...
    }
}

如文档中所述:https://developers.google.com/identity/smartlock-passwords/android/retrieve-credentials