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.

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

  1. SQLite
  2. Preferencias compartidas. (Nunca lo usé, pero estoy asumiendo que podemos usar esto)
  3. 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?

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.

  • Retrofit sigue olvidando mis cookies :( Android
  • Hacer un login con facebook usando Facebook SDK 3.0
  • Android: Persistencia de la sesión de servidor mediante cookie al realizar llamadas HTTP
  • ¿La forma preferida de conectar AudioEffect a la mezcla global?
  • Android: inicia sesión en el sitio web y conserva sesión / cookie mediante DefaultHttpClient
  • Autorización para Android de Facebook - no puede iniciar sesión cuando se instala la aplicación oficial de Facebook
  • Iniciar sesión en appengine desde el cliente android
  • Patrón de diseño de inicio de sesión de aplicaciones de Android
  • ¿Cómo puedo administrar la sesión en el inicio / cierre de sesión de Android?
  • Android detecta si una aplicación entró en el fondo
  • Parámetros incorrectos: BadParametersError: Los parámetros eran incorrectos. Queríamos capacidades requeridas en la cuadrícula de Selenium mientras ejecuta Appium
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.