Nueva API de Acceso con Google

Google Identity Services (GIS) es un nuevo conjunto de APIs que brinda a los usuarios un un acceso y registro 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 puede usarse para lo siguiente: iniciar el flujo de acceso o registro cuando un usuario presione un botón de "Acceder con Google" . Esta API se puede usar en lugar de las APIs de Acceso con Google existentes para y flujos de acceso.

Debes usar esta API solo cuando el usuario muestre explícitamente la intención de acceder. con Google. Por ejemplo, usa esta API cuando hagan clic en un botón "Acceder con Google" de la app en la app.

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

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

Acceso con Google

Antes de comenzar

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

Haz una solicitud de acceso

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

Controla los resultados de acceso

En onActivityResult, recupera un SignInCredential. El SignInCredential El objeto que muestra getSignInCredentialFromIntent contiene información sobre un acceso válido. Si el usuario no puede acceder por algún motivo, se Se arroja 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 exitoso siempre devuelve el nombre completo, el correo electrónico y la URL de la foto de perfil. Si necesitas información adicional, puedes dirigir a los usuarios en un flujo completo de información de perfil.