我在我的一个android应用程序中使用了google智能锁。我在集成智能锁到我的应用程序中涉及oauth的登录方法时遇到了一些问题。我使用谷歌,脸书 oauth作为登录方法,他们返回一个oauth令牌和一个oauth秘密,我发送到我的服务器进行身份验证。
现在,我如何为这些方法实现google智能锁呢?
如何使用智能锁保存这些凭据,以便以后读取凭据时可以检索它们并使用它们进行身份验证?
有没有可能用定制的oauth方法实现google智能锁功能?我查看了互联网上的许多资源,但找不到任何解决这个问题的方法。任何帮助都将不胜感激。
发布于 2018-05-30 08:31:41
无法使用当前的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 provide的登录流。例如,使用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
https://stackoverflow.com/questions/50424032
复制相似问题