La vinculación de cuentas se puede completar directamente en tu app para dispositivos móviles, lo que permite que los usuarios vinculen sus cuentas en tu servicio con sus Cuentas de Google. El vínculo establecido otorga a Google acceso a los datos que el usuario acepta compartir.
Estos son algunos de los beneficios para los usuarios:
- Los usuarios pueden iniciar y completar el proceso de vinculación de cuentas en tu app, un entorno con el que ya están familiarizados.
- Los usuarios no requieren credenciales de acceso porque ya se autenticaron en el dispositivo y en tu app para dispositivos móviles.
Los desarrolladores pueden disfrutar los siguientes beneficios:
- Controla dónde promocionar e iniciar la vinculación de cuentas en tu aplicación para dispositivos móviles, por ejemplo, en la configuración del usuario, en los anuncios intersticiales o después de que un usuario accede a tu aplicación para dispositivos móviles. Agrega varios puntos de entrada para iniciar la vinculación de cuentas, lo que ayuda a que esta sea más fácil de encontrar, lo que aumenta la participación y la cantidad de cuentas vinculadas.
- Aumento en el porcentaje de conversiones, ya que los usuarios pueden completar el proceso de vinculación en menos pasos que el flujo estándar de OAuth basado en la Web.
- Se requiere un esfuerzo de ingeniería bajo para implementar el vínculo desde tu plataforma (Android), ya que este flujo aprovecha tu implementación existente de OAuth2.0, siempre y cuando ya tengas una implementada.
- Porcentajes de abandono reducidos, ya que los usuarios no necesitan volver a ingresar sus credenciales de acceso y pueden completar el proceso en menos pasos. Las tasas de abandono pueden llegar al 80% en flujos en los que los usuarios deben recuperar e ingresar sus credenciales de acceso.
Cómo funciona
La vinculación desde tu plataforma se completará en los siguientes pasos:
- El usuario debe hacer clic en un activador de vinculación (o activarlo) en tu aplicación para dispositivos móviles.
- El usuario selecciona la Cuenta de Google que desea vincular.
- El usuario selecciona una Cuenta de Google existente en el dispositivo para vincularla o accede con una cuenta nueva.
- Se le muestran pantallas de consentimiento alojadas en Google y debe aceptar continuar o cancelar el proceso para detener la vinculación.
- Se le muestra tu pantalla de consentimiento al usuario y debe aceptar continuar o cancelar el proceso para detener el proceso de vinculación.
- 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:
- Una app para Android
- Tener, administrar y mantener un servidor de OAuth 2.0 que admita el flujo de código de autorización de OAuth 2.0
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 las versiones más recientes de los Servicios de Google Play en tu host de desarrollo:
- Abre Android SDK Manager.
En SDK Tools, busca Servicios de Google Play.
Si el estado de estos paquetes no es Installed, selecciónalos y haz clic en Install Packages.
Cómo configurar tu app
En tu archivo
build.gradle
de nivel de proyecto, incluye el repositorio Maven de Google en las seccionesbuildscript
yallprojects
.buildscript { repositories { google() } } allprojects { repositories { google() } }
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' }
Cómo agregar compatibilidad con vínculos desde tu plataforma
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.
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 APIKotlin
// 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();
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()
yonConsentRejectedOrCanceled()
si el usuario acepta, rechaza o cancela tu consentimiento, respectivamente.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 que el vínculo se vincula correctamente, p.ej., mostrar un aviso, activar un cambio de estado de activación o redireccionamiento del 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 realizado correctamente la vinculación, deberías darles a los usuarios un ejemplo de lo que deben 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.
Referencia
Documentación de referencia de la API de autenticación de Android