miércoles, 20 de junio de 2012

Android - Account Manager (Manejar Cuentas)


Android - Account Manager - Parte I

1. Introducción
Por defecto, Android incorpora un gestor de cuenta, que se utiliza para almacenar las credenciales del usuario y sincronizar con el servidor, si es necesario. Su uso ha sido alentada por el Google en Android  I / O 2011:






2. Nociones básicas
El gerente de cuentas es un servicio centralizado que ofrece el sistema Android. . Cualquier aplicación puede obtener la lista de cuentas y solicitar al usuario utilizar sus tokens de autenticación Básicamente contiene una lista de cuentas, cada una se identifica por:


  • Nombre de la cuenta : El nombre de usuario utilizado para entrar, por ejemplo, jiahaoliuliu
  • Tipo de cuenta : El tipo de la cuenta. Por ejemplo, com.google
Todas las cuentas deben ser únicos en un dispositivo. Esto es, para un dispositivo determinado, no puede haber dos cuentas que tienen el mismo nombre de cuenta y tipo de cuenta.

Para cada una de las cuentas, hay un conjunto de datos relacionados con ella:
  • Contraseña : La contraseña de la cuenta. Podría ser vacía ("").
  • AuthTokens : La cadena que utiliza el servidor para identificar al usuario, en lugar de la contraseña. Normalmente, el token de autenticación es temporal y será vencido después de un tiempo. Todos los tokens de autenticación tienen un tipo, llamado AuthTokenType. Esto es debido a una cuenta podrían ser utilizados para varios servicios, y para cada uno de los servicios que podría haber fichas diferentes auth. Por ejemplo, la cuenta de Google podría ser utilizado para Gmail y Youtube. El authTokenType de Gmail es "mail" y la authTokenType de YouTube es YouTube. Visite esta página web para más información.
  • UserDatas:  Además, el usuario puede guardar los datos del usuario como el par de claves / valor de tipo String. Esto es útil cuando los datos adicionales están asociados con la cuenta de los cuales no son ni la contraseña de token de autenticación.
3. Permisos
Hay varias permiso necesario para interactuar con el administrador de cuentas:
  • android.permission.GET_ACCOUNTS
Este permiso se utiliza para obtener la lista de cuentas y comprobar si una cuenta específica tiene una función específica. (Las características no se habló en este post.)
  • android.permission.USE_CREDENTIALS
Este permiso se utiliza para obtener e invalidar fichas autenticación.
  • android.permission.AUTHENTICATE_ACCOUNTS
Este permiso se utiliza para modificar la información relacionada con la cuenta, como por ejemplo la contraseña, los datos de los usuarios, los tokens de autenticación, etc También se utiliza para crear las cuentas y obtener la contraseña.
  • android.permission.MANAGE_ACCOUNTS
Este permiso se utiliza para agregar o quitar cuentas. Podría ser necesaria cuando la aplicación utiliza las funciones avanzadas de la aplicación, como las credenciales de actualización o propiedades de edición.


4. Gestión de datos con el administrador de cuentas
4.1 Gestor de cuentas
El gerente de cuentas es un servicio centralizado. Las aplicaciones no pueden crear un nuevo administrador de cuentas, pero conseguir la sola existencia de pasar el contexto. Es

Accountmanager Accountmanager = AccountManager.get (Contexto)

Donde el contexto es el contexto de la aplicación.

4.2 Cuentas 
4.2.1 Agregar una nueva cuenta
La forma más sencilla de agregar una nueva cuenta es utilizar el método de:
  • boolean addAccountExplicitly (cuenta de la cuenta, String contraseña, Paquete de datos de usuario)
Avisos de la Cuenta de la clase puede ser fácilmente construido con:

Cuenta = Cuenta nueva (nombre de usuario, accountType)

Ambos parámetros son String.

4.2.2 Obtener una cuenta
La aplicación puede obtener información acerca de todas las cuentas del sistema. Hay dos métodos principales:
  • Cuenta [] getAccount ()
  • Cuenta [] getAccountsByType (tipo String)
El primer método recibe todas las cuentas en el administrador de cuentas y la segunda, obtener sólo las cuentas que coinciden con un tipo específico.

Todas las cuentas tienen dos campos:
  • Nombre : account.name accesible a través de
  • Tipo : acceso account.type utilizando
Por lo tanto, una manera fácil de obtener una cuenta de tipo "com.jiahaoliuliu" que tiene el nombre de usuario "jiahaoliuliu" es la siguiente:

        Cuenta [] = cuentas Accountmanager getAccountsByType ("com.jiahaoliuliu").;
        Cuenta miCuenta = null;
        para la (cuenta de la cuenta: las cuentas) {
            si (account. nombre . equalsIgnoreCase ("jiahaoliuliu")) {
                MyAccount = cuenta;
                romper ;
            }
        }

4.2.3 Eliminar una cuenta
Las cuentas podría ser eliminado por:
  • AccountManagerFuture <boolean> removeAccount (Cuenta, AccountManagerCallback <boolean> de devolución de llamada, el controlador de controlador)
Tenga en cuenta que para cada cuenta, podría haber algunos ajustes que impiden que la cuenta que desea eliminar. Por lo tanto, no garantiza el éxito.

4.3 Contraseña
La contraseña es un conjunto de datos muy sensibles que no deben ser almacenados en ella. Uno de los problemas de seguridad tan grande es que guarda la contraseña en texto plano, sin ningún tipo de cifrado.Revise la sección de seguridad de la segunda parte de este mensaje para obtener más información.

4.3.1 Configuración de la contraseña
Para una determinada cuenta, la contraseña puede establecerse de dos maneras:
  • Cuando la cuenta se crea por primera vez, utilizando el método

boolean addAccountExplicitly (cuenta de la cuenta, String contraseña, Paquete de datos de usuario)

  • Después de que la cuenta ha sido creada

void setPassword (Cuenta cuenta, String password)

4.3.2 Obtener la contraseña
La contraseña puede ser recuperada por el método:

Cadena getPassword (Cuenta)

4.3.3 Borrar la contraseña
No hay un método específico utilizado para eliminar la contraseña.

void clearPassword (Cuenta)

El método anterior tiene el mismo efecto que:

setPassword (Cuenta, null)

4,4 Auth fichas
Como ya he explicado antes, una cuenta es posible que un conjunto de fichas autenticación, cada uno para un servicio específico, identificado por el authTokenType.

4.4.1 Establecer el token de autenticación
Para configurar un token de autenticación, el método de seguimiento se podría utilizar:
  • anular setAuthToken (Cuenta, String authTokenType, String authType)
4.4.2 Obtener el token de autenticación
Hay varias manera de obtener los tokens de autenticación. La forma más sencilla es utilizar el seguimiento uno:
  • AccountManagerFuture <Bundle> getAuthToken (Cuenta, String authTokenType, boolean notifyAuthFailure, AccountManagerCallback <Bundle> de devolución de llamada, el controlador de controlador)
Aquí es un buen ejemplo de uso:

4.4.3 invalidar el token de autenticación
Debido a que normalmente las fichas de autenticación tiene una fecha de caducidad, es una buena práctica para invalidar un token de autenticación cuando no es válida. Para hacerlo así, hay un método específico:
  • void invalidateAuthToken (String accountType, String authtoken)
Tenga en cuenta que el uso debe entrar en el authtoken completa para invalidarlo.

4.5 Los datos de usuario
Además, la aplicación puede introducir cualquier información adicional relacionada con la cuenta mediante el uso de los datos del usuario. Es sólo un mapa de clave / valor que todos ellos son de cadena.

4.5.1 Establecer los datos del usuario
Como la contraseña, los datos del usuario puede ser establecido cuando la cuenta se está creando o más tarde, cuando la cuenta ya existe.
  • boolean addAccountExplicitly (cuenta de la cuenta, String contraseña, Paquete userData)
  • void setUserData (cuenta de la cuenta, clave String, String value)
4.5.2 Obtener los datos de los usuarios
Sólo hay un método para obtener los datos del usuario.
  • Cadena getUserData (cuenta de cuenta, clave String)
4.6 El receptor cuenta actualizada
El gerente de cuentas ofrece la posibilidad de añadir un detector de actualización de la cuenta para actuar cuando una cuenta se ha actualizado. El oyente se aplican a la instancia actual de la Accountmanager.
  • void addOnAccountsUpdatedListener (escucha OnAccountsUpdateListener, controlador de controlador, boolean updateImmediately)
  • void removeOnAccountsUpdatedListener (escucha OnAccountsUpdatedListener)
Es importante notar que mientras que una instancia del gestor de cuentas se está escuchando, no va a ser recogido por el gerente de cuenta, ni el contexto utilizado para recuperarlo. Para evitar fugas de memoria, es importante eliminar el oyente si no se va a utilizar. Por ejemplo, OnDestroy () .

5. Conclusión parcial
El gerente de cuentas es muy útil disponer de todas las cuentas centralizadas en un solo lugar, pero tiene algunos inconvenientes.

No hay comentarios:

Publicar un comentario