Nueva API de Acceso con Google

Google Identity Services (GIS) es un nuevo conjunto de APIs que proporciona a los usuarios acceso y registro fáciles y seguros, en un paquete fácil de implementar para los desarrolladores. En este documento, se detalla una nueva API de Acceso con Google (parte de GIS) que se puede usar para iniciar el flujo de acceso o registro cuando un usuario presiona un botón de "Acceder con Google". Se puede usar esta API en lugar de las APIs de Acceso con Google existentes para los flujos de acceso.

Debes usar esta API solo cuando el usuario muestre explícitamente su intent de acceder con Google. Por ejemplo, usa esta API cuando hagan clic en el botón “Acceder con Google” de tu app.

No debes usar esta API para solicitarle al usuario que acceda cuando inicie la app o en respuesta a otro activador, como agregar un artículo al carrito de compras. Para estos casos de uso, utiliza el acceso y registro con One Tap.

Cuando inicies el flujo de Acceso con Google con la API nueva, se mostrará la siguiente IU:

Acceso con Google

Antes de comenzar

Configura un proyecto en la Consola de APIs de Google y tu proyecto de Android Studio.

Realiza una solicitud de acceso

Para iniciar un flujo de Acceso con Google con la API de Identity, compila un objeto GetSignInRequest. Luego, en un objeto SignInClient, llama a getSignInIntent. Esta llamada es asíncrona y, cuando se realiza correctamente, proporcionará un PendingIntent para iniciar el 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);
                    });
    }

Cómo controlar los resultados de acceso

En onActivityResult, recupera un SignInCredential. El objeto SignInCredential que muestra getSignInCredentialFromIntent contiene información sobre un acceso válido. Si el usuario no puede acceder por algún motivo, se genera una ApiException.

    @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
});

El resultado de un acceso correcto siempre muestra el nombre completo, el correo electrónico y la URL de la foto de perfil del usuario. Si necesitas información adicional, puedes dirigir a los usuarios a un flujo completo de información de perfil.