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 funciona

El vínculo desde tu plataforma se completa en los siguientes pasos:

  1. El usuario hará clic en un activador de vinculación (o se activará) en tu app para dispositivos móviles.
  2. El usuario selecciona la Cuenta de Google que desea vincular.
    1. El usuario debe seleccionar una Cuenta de Google existente en el dispositivo para vincularla o acceder con una cuenta nueva
  3. Se le mostrarán pantallas de consentimiento alojadas en Google al usuario y este deberá aceptar continuar o cancelar el proceso para detener el proceso de vinculación.
  4. El usuario verá tu pantalla de consentimiento y deberá 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: Vinculación desde el flujo de la plataforma

Requisitos

Para implementar el vínculo desde tu plataforma, necesitas 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 Google Play Services.

  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 el 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 de "Vincular con 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.0.0'
    }
    

El Vínculo del flujo de tu plataforma generará un token de acceso que proporciona tu servicio y que guardará Google. Se debe recibir el consentimiento antes de mostrar el token para el usuario.

Sigue los pasos que se indican a continuación para obtener el consentimiento del usuario y devolver 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 Servicios de Play 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 controlar 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 que se creó en el paso 1 anterior.

    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 solicitan el consentimiento del usuario y devuelve un código de autorización a Google.

Prácticas recomendadas

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

    Figura 1: Imagen de ejemplo de estado de vínculo

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

  • Deberías considerar la posibilidad de invitar a los usuarios de la aplicación a que vinculen las cuentas. Lo ideal sería que lo hagan en función de indicadores importantes de que la vinculación podría beneficiar a esos usuarios.

  • Después de realizar la vinculación correctamente, deberías brindarles 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).

  • Permite que los usuarios administren sus cuentas vinculadas, incluida la opción de desvincularlas. Dirígelo 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