Diseño y desarrollo de Android – Enfoques y mejores prácticas
Bueno. Empecé a desarrollar una aplicación para Android para nuestra aplicación web empresarial. Acaba de iniciar el diseño de la actividad de la pantalla de inicio de sesión.
Esta aplicación está completamente impulsada por la API RESTFul.
- Cómo utilizar la sesión para trabajar entre php webservices y android
- Gestión de sesiones de Android
- Inicio de sesión de Android - autenticador de cuentas vs autenticación manual
- Inicio de sesión de Android - Mejor implementación
- Mantener sesión de cookie en Android
Me gustaría entender cómo desarrollar la función de inicio de sesión / cierre de sesión en la aplicación. Hasta donde yo entiendo, no hay concepto de Sesión en el mundo de las aplicaciones. Además, para la API, necesitamos enviar nombre de usuario y contraseña con cada solicitud (Autenticación básica). Así que al parecer, tenemos que mantener las credenciales de inicio de sesión en algún lugar en el almacenamiento local para enviar junto con cada solicitud.
Esto es lo que entiendo de mi conocimiento básico de Android.
Cuando el usuario introduce la información de inicio de sesión y presiona el botón, haremos una llamada HTTP a la API. Si las credenciales de inicio de sesión son válidas, tendremos que almacenar las credenciales localmente. Las opciones son
- SQLite
- Preferencias compartidas. (Nunca lo usé, pero estoy asumiendo que podemos usar esto)
- Bundle (No estoy seguro de si esta es una opción)
¿Alguna otra alternativa?
Quiero asegurarme de seguir la mejor práctica, sin sacrificar desde la perspectiva de rendimiento y arquitectura.
Y para el cierre de sesión, creo que sólo necesito borrar las credenciales almacenadas localmente y mostrar actividad de inicio de sesión.
¿Existen enfoques diferentes y mejores?
- ¿Cómo mantener el inicio de sesión del servidor en toda la aplicación nativa de Android?
- Sesión de inicio de sesión - Actividades
- El recuento de sesión se multiplica cuando uso Google Analytics Android SDK v4
- Reemplazo de código de Facebook obsoleto para Android
- Disminuir la verbosidad del registro interno de ORMlite o deshabilitarla
- Funcionalidad de cierre de sesión en android
- Longitud de sesión corta en Google Analytics para Android
- Uso de cookies con solicitudes de Retrofit Robospice
Yo sugeriría hacer uso de la función de cuentas de Android.
Este blog tiene una buena guía paso a paso en todos los bits que necesita para poner juntos.
La idea general es que proporcione al AccountManager el nombre de usuario / contraseña de los usuarios y lo dejará en el AccountManager para almacenarlos de forma segura.
Cuando se necesita un token de autenticación, se solicita al AccountManager uno y se devuelve un token en caché o se devuelve el código (pasando el nombre de usuario / contraseña) y se realiza la llamada a su servicio de autenticación para obtener un token nuevo .
Creo que la contraseña de almacenamiento en la aplicación es mala idea, mejor enfoque es sólo hacer la solicitud con credenciales de usuario en la primera vez cuando el usuario obtener el inicio de sesión el servidor de devolver un token de acceso guardar este token de acceso en SharedPreferences
para resto del propósito, solicitud.
Sesión: Cree su propia clase para mantener la sesión. Hackbook es un buen ejemplo para ello.
Generalmente, hay tres formas en que puede persistir datos en Android: SQLite, SharedPreferences
y lectura / escritura en un archivo a la E / S de Java. SQLite es óptimo para los datos relacionales, pero debido a que sólo necesita almacenar las credenciales del usuario, le recomiendo que utilice SharedPreferences. Me parece un simple modelo de datos de clave-valor.
SharedPreferences
es básicamente una encapsulación de E / S de archivos directos, es decir, la implementación subyacente sigue siendo la lectura y escritura de archivos, pero simplificada para los pares clave-valor. No sé mucho acerca del cifrado, pero puede que tenga que manejarlo antes de almacenar la contraseña en un objeto SharedPreferences
(también considere la sugerencia de JaiSoni: use un token de acceso). Sin embargo, asegúrese de que si crea las SharedPreferences
y la establece en MODE_PRIVATE
, otras aplicaciones no tendrán acceso al archivo prefs compartido.
Creo que esto es prácticamente una implementación estándar. Si miras esta página, realmente solo hay mucho que puedes hacer: http://developer.android.com/guide/topics/data/data-storage.html
También puedo señalar que una de las complejidades con la E / S de archivos directos es que usted tendrá que decidir dónde desea almacenar el archivo – interna o externa de memoria (por ejemplo, la tarjeta SD) – y, por tanto, comprobar su Disponibilidad (no todos los dispositivos tienen ranuras para tarjetas SD, ya veces la memoria interna está registrada como memoria externa en el dispositivo). Así que ir con prefs compartido.
Para desconectarse, esto podría ser útil: Borrar las preferencias compartidas
¿Por qué necesita persistir la credencial de inicio de sesión en un archivo o base de datos? ¿Quieres iniciar sesión automáticamente después de reiniciar tu aplicación? Si la persistencia no es necesaria, puede poner las credenciales en un miembro estático de java.
- "Servicios del sistema no disponibles para Actividades antes de onCreate ()" ¿Mensaje de error?
- ¿Hay disponible una API de Google Transit?