Inicia la vinculación de la Cuenta de Google directamente desde tu plataforma.

La vinculación de cuentas se puede completar directamente dentro de su aplicación móvil, lo que permite a sus usuarios vincular su cuenta en su servicio con su cuenta de Google. El enlace establecido otorga a Google acceso a los datos que el usuario consiente en compartir.

Este enfoque mejora el rendimiento de la vinculación de cuentas, ya que capta a los usuarios dentro del contexto conocido de tu app en lugar de una conversación con Asistente. Se puede integrar en la integración de usuarios, la configuración y otras plataformas de apps, lo que crea oportunidades de descubrimiento y participación para tu acción de Asistente de Google. Por ejemplo, después de la vinculación, podrías ofrecer llevar al usuario directamente a tu acción.

Los beneficios para los usuarios incluyen:

  • Los usuarios pueden iniciar y completar el proceso de vinculación de cuentas en su aplicación, un entorno con el que ya están familiarizados.
  • Los usuarios no requieren credenciales de inicio de sesión porque ya se han autenticado en el dispositivo y en su aplicación móvil.

Los beneficios para los desarrolladores incluyen:

  • Controle dónde promocionar e iniciar la vinculación de cuentas en su aplicación móvil, por ejemplo, en la configuración del usuario, en intersticiales o después de que un usuario inicie sesión en su aplicación móvil. Agregar múltiples puntos de entrada para iniciar la vinculación de cuentas ayuda a que la vinculación de cuentas sea más reconocible, lo que resulta en una mayor participación y número de cuentas vinculadas.
  • Aumento en la tasa de conversión ya que los usuarios pueden completar el proceso de vinculación en menos pasos que el flujo OAuth estándar basado en la web .
  • Se requiere poco esfuerzo de ingeniería para implementar Link desde su plataforma (Android) porque este flujo aprovecha su implementación existente de OAuth2.0, asumiendo que ya tiene una implementada.
  • Tasas de abandono reducidas porque los usuarios no necesitan volver a ingresar sus credenciales de inicio de sesión y pueden completar el proceso en menos pasos. Las tasas de abandono pueden llegar al 80 % en flujos en los que los usuarios deben recordar e ingresar sus credenciales de inicio de sesión.

Cómo funcionan

La vinculación desde tu plataforma se completará en los siguientes pasos:

  1. El usuario debe hacer clic en un activador de vinculación (o activarlo) en su aplicación para dispositivos móviles.
  2. El usuario selecciona la Cuenta de Google que desea vincular.
    1. El usuario selecciona una Cuenta de Google existente en el dispositivo para vincularla o accede con una cuenta nueva.
  3. Se le muestran pantallas de consentimiento alojadas en Google y debe aceptar continuar o cancelar el proceso para detener la vinculación.
  4. Se le muestra tu pantalla de consentimiento al usuario y debe aceptar continuar o cancelar el proceso para detener el proceso de vinculación.
  5. El vínculo se establece entre la cuenta del usuario, en tu servicio y su Cuenta de Google.

Figura 1: Vínculo desde tu flujo de plataforma

Requisitos

Para implementar la función de vínculo desde tu plataforma, necesitarás lo siguiente:

Configuración

Antes de continuar con los pasos que se indican a continuación, debes haber completado el proceso de registro de la vinculación de cuentas.

Configura tu entorno de desarrollo

Obtén la versión más reciente de los Servicios de Google Play en tu host de desarrollo:

  1. Abre Android SDK Manager.
  1. En SDK Tools, busca Servicios de Google Play.

  2. Si el estado de estos paquetes no es Installed, selecciónalos y haz clic en Install Packages.

Cómo configurar tu app

  1. En tu archivo build.gradle de nivel de proyecto, incluye el repositorio Maven de Google en las secciones buildscript y allprojects.

    buildscript {
        repositories {
            google()
        }
    }
    
    allprojects {
        repositories {
            google()
        }
    }
    
  2. Agrega las dependencias para la API "Link with Google" al archivo Gradle de nivel de la app de tu módulo, que suele ser app/build.gradle:

    dependencies {
      implementation 'com.google.android.gms:play-services-auth:21.2.0'
    }
    

El vínculo de tu flujo de la plataforma hará que Google guarde un token de acceso proporcionado por tu servicio. Se debe recibir el consentimiento antes de devolver el token al usuario.

Sigue los pasos que se indican a continuación para obtener el consentimiento del usuario y mostrar un token de código de autenticación a través del SDK de Servicios de Google Play.

  1. Compila un PendingIntent que pueda iniciar tu actividad de consentimiento: la API de Play Services inicia el consentimiento. Deberás proporcionar un PendingIntent (que se denominará consentPendingIntent para mayor claridad) cuando se llame a la API

    Kotlin

    // Build a PendingIntent that can launch the consent activity
    val consentPendingIntent = buildConsentPendingIntent()
    

    Java

    // Build a PendingIntent that can launch your consent activity
    PendingIntent consentPendingIntent =
              buildConsentPendingIntent();
    
  2. Crea la actividad correspondiente para manejar el intent de consentimiento

    Kotlin

      class ConsentActivity : AppCompatActivity
    
      private fun onConsentAccepted() {
          // Obtain a token (for simplicity, we’ll ignore the async nature
          // of the following call)
          val token = getToken()
          val intent = Intent()
                      .putExtra(SaveAccountLinkingTokenRequest.EXTRA_TOKEN,
                                token)
          setResult(Activity.RESULT_OK, intent)
          finish()
      }
    
      private fun onConsentRejectedOrCanceled() {
          setResult(Activity.RESULT_CANCELED)
          finish()
      }
    

    Java

      public class ConsentActivity extends AppCompatActivity {
        ...
        private void onConsentAccepted() {
          // Obtain a token (for simplicity, we’ll ignore the async nature of
          // the following call
          String token = getToken();
          Intent intent = new Intent();
          intent.putExtra(SaveAccountLinkingTokenRequest.EXTRA_TOKEN, token);
          setResult(Activity.RESULT_OK, intent);
          finish();
        }
    
        private void onConsentRejectedOrCanceled() {
          setResult(Activity.RESULT_CANCELED, null);
          finish();
        }
     }
    
    

    Suponemos que se llama a los métodos onConsentAccpeted() y onConsentRejectedOrCanceled() si el usuario acepta, rechaza o cancela tu consentimiento, respectivamente.

  3. Crea una solicitud para guardar el token y, entre otros parámetros de configuración, pasa el PendingIntent creado en el paso 1.

    Kotlin

      // Create an ActivityResultLauncher which registers a callback for the
      // Activity result contract
      val activityResultLauncher = registerForActivityResult(
        ActivityResultContracts.StartIntentSenderForResult())
        { result ->
          if (result.resultCode == RESULT_OK) {
            // Successfully finished the flow and saved the token
          } else {
            // Flow failed, for example the user may have canceled the flow
          }
        }
    
      // Build token save request
      val request = SaveAccountLinkingTokenRequest.builder()
        .setTokenType(SaveAccountLinkingTokenRequest.TOKEN_TYPE_AUTH_CODE)
        .setConsentPendingIntent(consentPendingIntent)
        .setServiceId("service-id-of-and-defined-by-developer")
        //Set the scopes that the token is valid for on your platform
        .setScopes(scopes)
        .build()
    
       // Launch consent activity and retrieve token
       Identity.getCredentialSavingClient(this)
         .saveAccountLinkingToken(request)
         .addOnSuccessListener( saveAccountLinkingTokenResult -> {
            if (saveAccountLinkingTokenResult.hasResolution()) {
              val pendingIntent = saveAccountLinkingTokenResult
                                  .getPendingIntent()
              val intentSenderRequest = IntentSenderRequest
                                        .Builder(pendingIntent).build()
              activityResultLauncher.launch(intentSenderRequest)
            } else {
               // This should not happen, let’s log this
               Log.e(TAG, "Failed to save token");
            }
          })
          .addOnFailureListener(e -> Log.e(TAG, “Failed to save token”, e))
    

    Java

      // Create an ActivityResultLauncher which registers a callback for the
      // Activity result contract
      ActivityResultLauncher<IntentSenderRequest>
          activityResultLauncher =
          registerForActivityResult(new ActivityResultContracts
                                        .StartIntentSenderForResult(),
                                    result -> {
          if (result.getResultCode() == RESULT_OK) {
              // Successfully finished the flow and saved the token
          } else {
              // Flow failed, for example the user may have canceled the flow
          }
      });
    
     // Build token save request
     SaveAccountLinkingTokenRequest request =
        SaveAccountLinkingTokenRequest.builder()
            .setTokenType(
                SaveAccountLinkingTokenRequest.TOKEN_TYPE_AUTH_CODE)
            .setConsentPendingIntent(consentPendingIntent)
            .setServiceId("service-id-of-and-defined-by-developer")
            //Set the scopes that the token is valid for on your platform
            .setScopes(scopes)
            .build();
    
      // Launch consent activity and retrieve token
      Identity.getCredentialSavingClient(this)
          .saveAccountLinkingToken(request)
          .addOnSuccessListener(
              saveAccountLinkingTokenResult -> {
                if (saveAccountLinkingTokenResult.hasResolution()) {
                  // Launch the resolution intent
                  PendingIntent pendingIntent =
                      saveAccountLinkingTokenResult.getPendingIntent();
                  IntentSenderRequest intentSenderRequest =
                      new IntentSenderRequest.Builder(pendingIntent).build();
                  activityResultLauncher.launch(intentSenderRequest);
                } else {
                  // This should not happen, let’s log this
                  Log.e(TAG, "Failed to save token");
                }
              })
          .addOnFailureListener(e -> Log.e(TAG, "Failed to save token", e));
      ```
    

Los pasos anteriores le solicitan el consentimiento al usuario y le muestran un código de autorización a Google.

Prácticas recomendadas

  • Tu app debe indicar al usuario el estado del vínculo a través de un botón, un botón de activación o un elemento visual similar.

    Figura 1: Imagen de estado del vínculo de muestra

  • Debes notificar al usuario después de un vínculo exitoso, p.ej., mostrar un aviso, activar un cambio de estado de activación o redireccionar al usuario a una página de éxito de vínculo independiente.

  • Solicita a los usuarios de la app que vinculen sus cuentas, idealmente en función de indicadores sólidos de que la vinculación podría beneficiar a esos usuarios.

  • Una vez que se haya vinculado correctamente la cuenta, deberías darles a los usuarios un ejemplo de qué hacer con la cuenta vinculada (p.ej., si acabas de vincular un servicio de transmisión de música, pídele a Asistente de Google que reproduzca música).

  • Permitir que los usuarios administren sus cuentas vinculadas, incluida la opción de desvincularlas. Dirígelos a su página de administración de Cuentas vinculadas de Google, es decir, https://myaccount.google.com/accountlinking.

Reference

Documentación de referencia de la API de autenticación de Android