CredentialManager: как реализовать вход через Google?
Делал вход по туториалу. Получился следующий код:
// Это логируется, значит выполнение кода идёт.
Log.i("sign-in", "begin!");
GetGoogleIdOption googleIdOption = new GetGoogleIdOption.Builder()
.setFilterByAuthorizedAccounts(true)
.setServerClientId("CLIENT_ID")
.build();
GetCredentialRequest request = new GetCredentialRequest.Builder()
.addCredentialOption(googleIdOption)
.build();
CredentialManager credentialManager = CredentialManager.create(WelcomeActivity.this);
credentialManager.getCredentialAsync(
WelcomeActivity.this,
request,
new CancellationSignal(),
new Executor() {
@Override
public void execute(Runnable command) {
}
},
new CredentialManagerCallback<GetCredentialResponse, GetCredentialException>() {
@Override
public void onResult(GetCredentialResponse result) {
handleSignIn(result);
}
@Override
public void onError(GetCredentialException e) {
// handleFailure(e);
Log.e("sign-in", "ERROR");
}
});
}
});
public void handleSignIn(GetCredentialResponse result) {
// Handle the successfully returned credential.
Credential credential = result.getCredential();
if (credential instanceof PublicKeyCredential) {
String responseJson = ((PublicKeyCredential) credential).getAuthenticationResponseJson();
// Share responseJson i.e. a GetCredentialResponse on your server to validate and authenticate
} else if (credential instanceof PasswordCredential) {
String username = ((PasswordCredential) credential).getId();
String password = ((PasswordCredential) credential).getPassword();
// Use id and password to send to your server to validate and authenticate
} else if (credential instanceof CustomCredential) {
if (GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL.equals(credential.getType())) {
// Use googleIdTokenCredential and extract id to validate and
// authenticate on your server
GoogleIdTokenCredential googleIdTokenCredential = GoogleIdTokenCredential.createFrom(((CustomCredential) credential).getData());
} else {
// Catch any unrecognized custom credential type here.
Log.e("TAG", "Unexpected type of credential");
}
} else {
// Catch any unrecognized credential type here.
Log.e("TAG", "Unexpected type of credential");
}
}
Но ничего не происходит! Только микро-зависание приложения. У меня есть подозрение, что в getCredentialAsync() нужно какие-то другие Executor и CancellationSigna передать. Но какие - загадка, нигде толком не написано.