Nova API de Login do Google

Os Serviços de Identificação do Google (SIG) são um novo conjunto de APIs que oferece aos usuários login e inscrição fácil e segura, em um pacote fácil de implementar para desenvolvedores. Este documento detalha uma nova API de Login do Google (parte do SIG) que pode ser usada para iniciar o fluxo de login ou inscrição quando um usuário toca no botão "Fazer login com o Google". Essa API pode ser usada no lugar das APIs de Login do Google para fluxos de login.

Use essa API somente quando o usuário mostrar explicitamente que pretende fazer login com o Google. Por exemplo, use essa API quando o usuário clicar no botão "Fazer login com o Google" no app.

Não use essa API para solicitar que o usuário faça login na inicialização do app ou em resposta a outro acionador, como a adição de um item ao carrinho de compras. Nesses casos, use o login e inscrição com um toque.

Quando você iniciar o fluxo do Login do Google com a nova API, ela exibirá esta interface:

Login do Google

Antes de começar

Configure um projeto do Console de APIs do Google e configure seu projeto do Android Studio.

Fazer uma solicitação de login

Para iniciar um fluxo de Login do Google usando a API Identity, crie um objeto GetSignInRequest. Em seguida, em um objeto SignInClient, chame getSignInIntent. Essa chamada é assíncrona e, caso seja concluída, vai fornecer um PendingIntent para iniciar a caixa de diálogo.

    private static final int REQUEST_CODE_GOOGLE_SIGN_IN = 1; /* unique request id */

    private void signIn() {
        GetSignInIntentRequest request =
            GetSignInIntentRequest.builder()
                .setServerClientId(getString(R.string.server_client_id))
                .build();

        Identity.getSignInClient(activity)
            .getSignInIntent(request)
            .addOnSuccessListener(
                    result -> {
                        try {
                            startIntentSenderForResult(
                                    result.getIntentSender(),
                                    REQUEST_CODE_GOOGLE_SIGN_IN,
                                    /* fillInIntent= */ null,
                                    /* flagsMask= */ 0,
                                    /* flagsValue= */ 0,
                                    /* extraFlags= */ 0,
                                    /* options= */ null);
                        } catch (IntentSender.SendIntentException e) {
                            Log.e(TAG, "Google Sign-in failed");
                        }
                    })
            .addOnFailureListener(
                    e -> {
                        Log.e(TAG, "Google Sign-in failed", e);
                    });
    }

Processar resultados de login

No onActivityResult, recupere um SignInCredential. O objeto SignInCredential retornado de getSignInCredentialFromIntent contém informações sobre um login válido. Se o usuário não fizer login por algum motivo, uma ApiException será gerada.

    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode == Activity.RESULT_OK) {
            if (requestCode == REQUEST_CODE_GOOGLE_SIGN_IN) {
                try {
                    SignInCredential credential = Identity.getSignInClient(this).getSignInCredentialFromIntent(data);
                    // Signed in successfully - show authenticated UI
                    updateUI(credential);
                } catch (ApiException e) {
                    // The ApiException status code indicates the detailed failure reason.
                }
            }
        }
    }
private ActivityResultLauncher<IntentSenderRequest> loginResultHandler = registerForActivityResult(new ActivityResultContracts.StartIntentSenderForResult(), result -> {
    // handle intent result here
});

O resultado de um login bem-sucedido sempre retorna o nome completo, o e-mail e o URL da foto do perfil do usuário. Se precisar de mais informações, direcione os usuários a um fluxo completo de informações de perfil.