Cómo recordar a tus usuarios

A todos les gusta cuando recuerdas sus nombres. Una de las medidas más simples y eficaces que puedes hacer para que tu app sea más atractiva es recordar quién es tu usuario, en especial cuando cambia de dispositivo o comienza a usar una tablet y un teléfono. Pero, ¿cómo sabes quiénes son tus usuarios? ¿Y cómo los reconoces en un dispositivo nuevo?

Para muchas apps, la respuesta son las API de AccountManager. Con el permiso del usuario, puedes usar el administrador de cuentas para recuperar los nombres que el usuario almacenó en su dispositivo.

La integración con las cuentas del usuario te permite realizar una variedad de acciones, como las siguientes:

  • Autocompletar formularios con la dirección de correo electrónico del usuario
  • Recuperar un ID que está vinculado a un usuario, no a un dispositivo

Determina si AccountManager es adecuado para ti

Por lo general, las aplicaciones intentan recordar al usuario usando una de estas tres técnicas:

  1. Pídele al usuario que ingrese un nombre de usuario.
  2. Recuperar un ID de dispositivo único para recordar el dispositivo.
  3. Recuperar una cuenta integrada de AccountManager.

La opción (1) es problemática. En primer lugar, pedirle al usuario que ingrese algo antes de usar la app hace que esta sea menos atractiva automáticamente. En segundo lugar, no hay garantía de que el nombre de usuario que elijan sea único.

La opción (2) es menos molesta, pero es difícil de lograr. Y lo que es más importante, solo te permite recordar al usuario en un dispositivo. Imagina la frustración de alguien que cambia a un dispositivo nuevo y se da cuenta de que tu app ya no lo recuerda.

La técnica (3) es la preferida. El administrador de cuentas te permite obtener información sobre las cuentas que se almacenan en el dispositivo del usuario. Usar el administrador de cuentas te permite recordar a tu usuario, sin importar cuántos dispositivos tenga, con solo presionar un par de veces más tu IU.

Cómo decidir qué tipo de cuenta usar

Los dispositivos Android pueden almacenar varias cuentas de muchos proveedores diferentes. Cuando consultas AccountManager sobre nombres de cuenta, puedes filtrar por tipo de cuenta. El tipo de cuenta es una string que identifica de manera única la entidad que emitió la cuenta. Por ejemplo, las Cuentas de Google tienen el tipo com.google, mientras que Twitter usa com.twitter.android.auth.login.

Cómo solicitar el permiso GET_ACCOUNTS

Para obtener una lista de cuentas en el dispositivo, tu app necesita el permiso GET_ACCOUNTS. Agrega una etiqueta <uses-permission> a tu archivo de manifiesto para solicitar este permiso:

<manifest ... >
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    ...
</manifest>

Cómo informar a los usuarios y obtener el consentimiento

Para obtener la lista de cuentas de usuario, llama a getAccounts() o getAccountsByType(). Sin embargo, ten en cuenta que la API muestra datos personales y sensibles del usuario y, cada vez que tu app acceda a datos personales y sensibles, los recopile, los use o los comparta, debes divulgar claramente ese hecho a los usuarios. En el caso de las apps publicadas en Google Play, las políticas que protegen los datos del usuario requieren que hagas lo siguiente:

  1. Divulga al usuario cómo la app accede a los datos personales y sensibles, los recopila, los usa o los comparte. Obtén más información sobre la divulgación y el consentimiento aceptables.
  2. Proporciona una política de privacidad en la que se describa el uso que haces de estos datos dentro y fuera del dispositivo.

Para obtener más información, consulta la Política de Google Play sobre datos del usuario.

Cómo consultar a AccountManager para obtener una lista de cuentas

Una vez que decidas qué tipo de cuenta te interesa, debes consultar las cuentas de ese tipo. Llama a AccountManager.get() para obtener una instancia de AccountManager. Luego, usa esa instancia para llamar a getAccountsByType().

Kotlin

val am: AccountManager = AccountManager.get(this) // "this" references the current Context

val accounts: Array<out Account> = am.getAccountsByType("com.google")

Java

AccountManager am = AccountManager.get(this); // "this" references the current Context

Account[] accounts = am.getAccountsByType("com.google");

Se muestra un array de objetos Account. Si hay más de un Account en el array, presenta un diálogo para que el usuario seleccione uno.

Cómo usar el objeto de cuenta para personalizar tu app

El objeto Account contiene el nombre de una cuenta, que, en el caso de las Cuentas de Google, es una dirección de correo electrónico. Puedes usar esta información de varias maneras, incluidas las siguientes:

  • Como sugerencias en formularios, para que el usuario no tenga que ingresar información de la cuenta por su cuenta
  • Como clave en tu propia base de datos en línea de información de uso y personalización

Cómo decidir si es suficiente el nombre de una cuenta

El nombre de una cuenta es una buena forma de recordar al usuario, pero el objeto Account por sí solo no protege tus datos ni te otorga acceso a nada más que el nombre de la cuenta del usuario. Si tu app necesita permitir que el usuario se conecte a Internet para acceder a datos privados, necesitas algo más seguro: la autenticación. Obtén información sobre cómo autenticarte en servicios en línea existentes y cómo escribir un autenticador personalizado para que puedas instalar tus propios tipos de cuentas.