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 передать. Но какие - загадка, нигде толком не написано.


Ответы (0 шт):