我在我的一个Android应用程序中使用谷歌智能锁。对于涉及 oauth 的登录方法,我在将智能锁集成到我的应用程序时遇到了一些问题。我使用 google , facebook oauth作为登录方法,并返回oauth令牌和oauth秘密,我将其发送到我的服务器进行身份验证。
现在,如何为这些方法实施Google智能锁?
如何使用智能锁保存这些凭据,以便稍后读取凭据时,我可以检索它们并使用它们进行身份验证?
是否可以使用自定义oauth方法实施Google智能锁定功能?我查看了互联网上的许多来源,但找不到任何解决方案。 任何帮助将不胜感激。
答案 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