¿Para qué debo usar el AccountManager de Android?

154

He visto AccountManager en el SDK de Android y que se usa para almacenar información de la cuenta. Por lo tanto, no puedo encontrar ninguna discusión general sobre para qué está destinada. ¿Alguien sabe de alguna discusión útil sobre cuál es la intención detrás de AccountManager y qué le compra? ¿Alguna opinión sobre para qué tipo de cuentas es adecuada? ¿Sería aquí donde pondría la información de la cuenta de su usuario para un servicio web general?

Phil
fuente
Tenga en cuenta que estoy apuntando a 2.1 y superior, por lo que puedo usar AccountManager si es una opción sensata
Phil
77
Hay una sección sobre esta pregunta en esta publicación: udinic.wordpress.com/2013/04/24/…
Udinic
@Udinic - Gracias. ¡Mucha ayuda!
Chad Bingham
Este tema se trata en este sitio: www.digigene.com/android/accounts-in-android/
Ali Nem
También hay una biblioteca para la administración de cuentas en Android aquí .
Ali Nem

Respuestas:

94

Esta pregunta es un poco vieja, pero creo que sigue siendo de buen interés.

AccountManager, SyncAdapterY ContentProvidervan de la mano.

Pero puedes:

Con AccountManager/ SyncAdapter/ ContentProvider:

  • AccountManager ofrece a los usuarios un punto central (Configuración> Cuentas) para definir sus credenciales
  • Android decide cuándo se puede realizar la sincronización a través de SyncAdapter. Esto puede ser bueno para optimizar la batería (por ejemplo, no se realiza la sincronización cuando la red está inactiva)
  • ContentProvideres una forma conveniente de compartir datos entre aplicaciones Nota: existen otros métodos de comunicación entre procesos en Android .
  • ContentProviderprograma el acceso de base de datos en un subproceso de fondo La AsyncQueryHanlderayuda para consultar el ContentProvideren un subproceso en segundo plano, la prevención de errores de aplicación que no responde (ANR), mientras que no requieren que usted resuelva expresamente roscado.
  • ContentProviderse vincula con ContentResolverel observador: esto significa que es fácil notificar las vistas cuando se cambia el contenido

En pocas palabras : el marco AccountManager/ SyncAdapter/ ContentProviderayuda si desea sincronizar datos de un recurso web. Se requieren implementaciones falsas / tontas en la API 7. También

  • Si solo desea almacenar datos, debe considerar un mecanismo más simple para el almacenamiento de datos
  • Si solo necesita buscar un único recurso, puede usar un AsyncTaskLoader
  • Si desea cargar imágenes de forma asincrónica, puede usar bibliotecas especializadas como Square Picasso
  • Si solo desea ejecutar algún código en un momento dado, puede considerar un Servicio / Alarma
  • solo disponible desde API> = 7 (esto ya no importa)

Finalmente, si usa un SyncAdapter, considere seriamente Firebase Cloud Messaging (anteriormente Google Cloud Messaging) también conocido como "notificaciones push" para tener actualizaciones más recientes y un uso optimizado de la batería.

rds
fuente
1
En la muestra de SDK, AccountAuthentificatorActivity es la única pieza opcional.
rds
Todavía no estoy familiarizado con estas clases, pero ¿es posible que estas clases agreguen una cuenta con llamadas a funciones sin interacción del usuario? Como, por ejemplo, agregar una cuenta de Microsoft Exchange, una cuenta de Google, una cuenta POP3 / IMAP. Gracias.
dackyD
gracias @rds pero según tu explicación, no parece que el código de muestra sea suficiente. Parece que también necesito implementar un SyncAdapter y un ContentProvider para alcanzar mis objetivos.
Corrígeme
Absolutamente correcto. Era el significado de mi primer párrafo, van juntos y es imposible usar uno sin los otros.
rds
23

La clase AccountManager está integrada con sus cuentas telefónicas. Entonces, si sigue todas las guías y lo hace funcionar correctamente, verá sus cuentas en el menú "Configuración-> cuentas y sincronización". Desde allí puede personalizarlos o incluso eliminarlos. Además, el AccountManager tiene un caché de los tickets de autenticación para sus cuentas. Esto también se puede usar si no planea sincronizar su cuenta (que yo sepa).

Si no desea que sus cuentas aparezcan en ese menú, no debe usar AccountManager y almacenar los datos de las cuentas en otro lugar (tal vez en las preferencias compartidas) http://developer.android.com/guide/topics/data/data -storage.html

Charla
fuente
14

De http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/ :

La primera pieza del rompecabezas se llama Autenticador de cuenta, que define cómo aparecerá la cuenta del usuario en la configuración "Cuentas y sincronización". La implementación de un Autenticador de cuenta requiere 3 piezas: un servicio que devuelve una subclase de AbstractAccountAuthenticator del método onBind, una actividad para solicitar al usuario que ingrese sus credenciales y un archivo xml que describe cómo debe verse su cuenta cuando se muestra al usuario. También deberá agregar el permiso android.permission.AUTHENTICATE_ACCOUNTS a su AndroidManifest.xml.

Macarse
fuente
3
Es un buen artículo, pero ¿cree que el AccountManager es solo para cuentas que sincronizan contactos y correo electrónico, o podemos / debemos usarlo para cualquier cosa que tenga ID de usuario y contraseñas?
Phil
@ Phil: nunca he usado AccountManager, así que no puedo decírtelo. Recuerde que esto viene con 2.0, por lo que si está dispuesto a ejecutar en dispositivos con SDK más bajo, tendrá que encontrar otra forma de manejar el inicio de sesión.
Macarse
66
Puede usar el administrador de cuentas para cualquier tipo de cuenta, sincronizando cualquier tipo de datos que almacene de cualquier manera. Consulte github.com/maxpower47/PinDroid para ver un ejemplo de cómo usarlo para sincronizar marcadores con una base de datos sqlite.
maxpower47
7

El AccountManageres bueno por las siguientes razones:

  • Primero es almacenar múltiples nombres de cuenta con diferentes niveles de acceso a las funciones de la aplicación en un solo tipo de cuenta. Por ejemplo, en una aplicación de transmisión de video, uno puede tener dos nombres de cuenta: uno con acceso de demostración a un número limitado de videos y el otro con acceso de mes completo a todos los videos. AccountsSin embargo, esta no es la razón principal para usarlo , ya que puede administrarlo fácilmente en su aplicación sin la necesidad de este aspecto elegante Accounts...
  • La otra ventaja de usar Accountses deshacerse de la autorización tradicional con nombre de usuario y contraseña cada vez que el usuario solicita una función autorizada, porque la autenticación se realiza en segundo plano y se le solicita al usuario su contraseña solo en ciertas condiciones, lo que Llegaré a eso más tarde.
  • El uso de la Accountsfunción en Android también elimina la necesidad de definir el propio tipo de cuenta. Probablemente haya encontrado las aplicaciones que usan cuentas de Google para obtener autorización, lo que ahorra la molestia de crear una nueva cuenta y recordar sus credenciales para el usuario.
  • Accounts se puede agregar de forma independiente a través de Configuración → Cuentas
  • La autorización de usuario multiplataforma se puede gestionar fácilmente mediante Accounts. Por ejemplo, el cliente puede acceder al material protegido al mismo tiempo en su dispositivo Android y PC sin la necesidad de inicios de sesión recurrentes.
  • Desde el punto de vista de la seguridad, el uso de la misma contraseña en cada solicitud al servidor permite posibles escuchas en conexiones no seguras. El cifrado de contraseña no es suficiente aquí para evitar el robo de contraseña.
  • Finalmente, una razón importante para usar la Accountsfunción en Android es separar a las dos partes involucradas en cualquier negocio que dependa del Accountsllamado autenticador y propietario del recurso, sin comprometer las credenciales del cliente (usuario). Los términos pueden parecer bastante vagos, pero no te rindas hasta que leas el siguiente párrafo ...…

Permítanme detallar esto último con un ejemplo de una aplicación de transmisión de video. La Compañía A es titular de un negocio de transmisión de video en contrato con la Compañía B para proporcionar a sus miembros ciertos servicios de transmisión premium. La empresa B emplea un método de nombre de usuario y contraseña para reconocer a su usuario. Para que la Compañía A reconozca a los miembros premium de B, una forma sería obtener la lista de ellos de B y utilizar un mecanismo similar de coincidencia de nombre de usuario / contraseña. De esta manera, el autenticador y el propietario del recurso son los mismos (Compañía A). Además de la obligación de los usuarios de recordar una segunda contraseña, es muy probable que establezcan la misma contraseña que el perfil de su Compañía B para usar los servicios de A. Esto obviamente no es favorable.

Para mitigar las deficiencias anteriores, se introdujo OAuth. Como estándar abierto para la autorización, en el ejemplo anterior, OAuth exige que la autorización sea realizada por la Compañía B (autenticador) emitiendo un token llamado Token de acceso para los usuarios elegibles (terceros) y luego proporcionando a la Compañía A (propietario del recurso) la ficha Entonces, ninguna ficha significa que no hay elegibilidad.

He elaborado más sobre esto y más AccountManagersobre mi sitio web aquí.

Esta es una aplicación simple usando AccountManager

Ali Nem
fuente