studio - ¿Para qué debería usar Android AccountManager?
oauth android studio (4)
Desde 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 de "Cuentas y sincronización". La implementación de un Autenticador de cuentas 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 necesitarás agregar el permiso android.permission.AUTHENTICATE_ACCOUNTS a tu AndroidManifest.xml.
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 una discusión general sobre a qué se destina. ¿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 su cuenta de usuario para un servicio web general?
El AccountManager
es bueno por las siguientes razones:
- Lo primero es almacenar varios nombres de cuentas 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 una cantidad limitada de videos y el otro con acceso de mes completo a todos los videos. Sin embargo, este no es el motivo principal para usar
Accounts
, ya que puede administrarlo fácilmente en su aplicación sin la necesidad de este aspecto deAccounts
aspecto elegante ... - La otra ventaja del uso de
Accounts
es deshacerse de la autorización tradicional con nombre de usuario y contraseña cada vez que el usuario solicita una función autorizada, ya que la autenticación se realiza en segundo plano y al usuario se le pide su contraseña solo en ciertas condiciones, lo abordaré más tarde. - El uso de la función
Accounts
en Android también elimina la necesidad de definir el propio tipo de cuenta. Es probable que haya encontrado las aplicaciones que utilizan las cuentas de Google para la autorización, lo que ahorra la molestia de crear una nueva cuenta y recordar sus credenciales para el usuario. -
Accounts
se pueden agregar de forma independiente a través de Configuración → Cuentas - La autorización de usuario multiplataforma se puede administrar fácilmente usando
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 una posible escucha en conexiones no seguras. El cifrado de contraseña no es suficiente aquí para evitar el robo de contraseñas.
- Finalmente, una razón importante para usar la función
Accounts
en Android es separar a las dos partes involucradas en cualquier negocio dependiente deAccounts
, denominado autenticador y propietario de recursos, 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 la titular de una empresa de transmisión de video en contrato con la Compañía B para proporcionar a sus miembros ciertos servicios de transmisión de video premium. La Compañía B emplea un método de nombre de usuario y contraseña para reconocer a su usuario. Para que la empresa A reconozca a los miembros premium de B, una manera sería obtener la lista de ellos de B y utilizar un mecanismo similar de coincidencia de nombre de usuario / contraseña. De esta forma, el autenticador y el propietario del recurso son los mismos (Compañía A). Además de la obligación del usuario de recordar una segunda contraseña, es muy probable que establezcan la misma contraseña que el perfil de su empresa B para usar los servicios de A. Esto obviamente no es favorable.
Para disipar las deficiencias anteriores, se introdujo OAuth. Como un estándar abierto para autorización, en el ejemplo anterior, OAuth exige que la autorización sea hecha por la Compañía B (autenticador) al emitir un token denominado Token de acceso para los usuarios elegibles (terceros) y luego proporcionar a la Compañía A (propietario del recurso) el token Entonces, ningún token significa que no hay elegibilidad.
He elaborado más sobre esto y más en AccountManager
en mi sitio web here.
Esta pregunta es un poco vieja, pero creo que todavía es de interés.
AccountManager
, SyncAdapter
y ContentProvider
van de la mano.
- No puede tener un
SyncAdapter
sin unaAccount
en elAccountManager
. - No puede tener un
SyncAdapter
sin unContentProvider
.
Pero puedes:
- use
ContentProvider
sin los demás. - utilice
AccountManager
sin los demás (pero no puede usar unAccountManager
sinSyncAdapter
antes de Android 2.2 / Froyo API 8)
Con AccountManager
/ SyncAdapter
/ ContentProvider
:
-
AccountManager
proporciona a los usuarios un punto central (Configuración> Cuentas) para definir sus credenciales - Android decide cuándo se puede sincronizar a través de
SyncAdapter
. Esto puede ser bueno para optimizar la batería (no se realiza sincronización cuando la red está inactiva, por ejemplo) -
ContentProvider
es una forma conveniente de compartir datos entre aplicaciones. Nota: hay otros métodos de comunicación entre procesos en Android . -
ElContentProvider
programa el acceso a la base de datos en un hilo de fondo.AsyncQueryHanlder
ayuda a consultar elContentProvider
en un hilo de fondo, evitando errores de la Aplicación No Responsiva (ANR) sin requerir el manejo explícito de threading. -
ContentProvider
vincula con el observador deContentResolver
: esto significa que es fácil notificar las vistas cuando se cambia el contenido
En AccountManager
SyncAdapter
: el marco AccountManager
/ SyncAdapter
/ ContentProvider
ayuda si desea sincronizar datos de un recurso web. Las implementaciones Fake / Dumb son requeridas en 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
AsyncTaskLoader
- Si desea cargar imágenes de forma asíncrona, puede utilizar 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 SyncAdapter
, considere seriamente Firebase Cloud Messaging (anteriormente Google Cloud Messaging) también conocido como "notificaciones push" para tener actualizaciones más recientes y uso optimizado de la batería.
La clase AccountManager está integrada con sus cuentas telefónicas. Por lo tanto, 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 tickets de autenticación para sus cuentas. Esto también puede usarse si no planea sincronizar su cuenta (hasta donde yo sé).
Si no desea que sus cuentas aparezcan en ese menú, no debe usar AccountManager y almacenar los datos de las cuentas en otra parte (quizás en las preferencias compartidas) http://developer.android.com/guide/topics/data/data -storage.html