studio start sessions data close application android session server stay-logged-in

start - sessions in android application



Cómo mantener al usuario conectado siempre "Conectado con el servidor" (5)

En primer lugar, lo ideal sería generar un token cuando un usuario inicie sesión (la aplicación de Facebook también usa oauth token), que luego debería almacenarse en su dispositivo y en el servidor. No es una buena idea almacenar incluso la dirección de correo electrónico o cualquier otra información del usuario en el teléfono.

Crear y mantener una sesión en el servidor. Luego, permita que la aplicación se conecte a la nave nodriza, es decir, el servidor después de un intervalo establecido y envíe un mensaje "Estoy vivo". Si recibe el mensaje del lado del servidor, aumenta el tiempo de la sesión.

De esta forma, el usuario permanece conectado para siempre, pero solo si el usuario permanece activo.

Tanto el servidor como la aplicación deben verificar primero la sesión y el token antes de enviar o recibir datos. Esto garantiza que el usuario esté autorizado, que la aplicación no se haya cerrado por la fuerza y ​​que el usuario siga conectado. Por favor, pregunte más si desea algo más.

Estoy trabajando en una aplicación, donde quería que el usuario siga conectado significa que siempre está conectado al servidor después de iniciar sesión correctamente (al igual que la aplicación de Facebook). Traté de googlear esto pero no encontré ninguna lógica correcta de esto. Muchos sitios web sugieren usar SharedPreference pero manteniendo la credibilidad del inicio de sesión del usuario. en SheredPreference no es una buena idea y no proporcionó ninguna respuesta para permanecer conectado al servidor. Estoy un poco atrapado con esta idea. Solo necesito lógica para implementar esto. Cualquier sugerencia y código de ejemplo son bienvenidos.

Soy novato de Android.


En primer lugar, no entiendo que el uso de términos esté stay connected to server y stay logged in en su caso. Pero a mi entender, responderé esto.

  1. Para permanecer conectado, como en, para no solicitar las credenciales cada vez, se supone que debe obtener un token único del servidor y almacenarlo junto con otros detalles de inicio de sesión (excepto contraseña) en SharedPreferences o en alguna base de datos. Siempre que el usuario abra la aplicación, use el token recibido como un parámetro de autenticación (también puede referir el método de juramento). Esto eliminará las posibilidades de que se filtre la contraseña y el token será específico para el dispositivo al igual que las sesiones.

  2. Permanezca conectado al servidor, como en, reciba notificaciones instantáneas, envíe y reciba mensajes? Cuando se abre la aplicación, use conectores, así es como se hace, cuando la aplicación se cierra, puede usar FCM.


Tu pregunta no parece clara.

1) ¿qué quieres decir con siempre conectado al servidor?
2) ¿Qué tipo de cosas necesitas hacer si el usuario está conectado al servidor?

Puedo sugerirle que use SharedPreferences si desea que el usuario inicie sesión todo el tiempo en su aplicación, sin necesidad de almacenar credenciales de usuario en SharedPreferences , puede almacenar ID de usuario, dirección de correo electrónico y ese tipo de detalles. SharePreferences

Si desea información sobre la base del tiempo, como la necesidad de actualizar los datos diariamente o cada hora, puede llamar a la API utilizando el AlarmManager por un tiempo determinado. AlarmManager

Aún así, si desea información para notificar al usuario sobre nuevos cambios / actualizaciones, puede usar las notificaciones automáticas. GCM y FCM

Nota :

Firebase Cloud Messaging (FCM) es la nueva versión de GCM.


Almacenar las credenciales del usuario en el dispositivo no es una buena forma de diseñar. Puede almacenar la contraseña Hash , que también se deniega como una buena técnica de diseño de la aplicación. De acuerdo con facebook y google, estos gigantes tecnológicos usan el token de Authentication inicio de sesión-cierre de sesión. Una vez que el usuario inicia la sesión, el servidor genera un token para un usuario en particular que luego se almacena en su dispositivo y en el servidor. La próxima vez que el usuario acceda a la aplicación se ha realizado una solicitud para verificar que el token sea válido o no, en caso de que sea válido: el acceso concedido no es válido.

Un diseño básico de este proceso

Tutorial :


Prueba esto es su trabajo para mí ..

sessionManager.java

package com.example.sachin.splashlogin; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import java.util.HashMap; public class SessionManager { SharedPreferences pref; // Editor for Shared preferences Editor editor; // Context Context _context; // Shared pref mode int PRIVATE_MODE = 0; // Sharedpref file name private static final String PREF_NAME = "SocialPref"; // All Shared Preferences Keys private static final String IS_LOGIN = "IsLoggedIn"; // User name (make variable public to access from outside) public static final String KEY_NAME = "email"; // Email address (make variable public to access from outside) public static final String KEY_ID = "user_id"; // Constructor public SessionManager(Context context){ this._context = context; pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE); editor = pref.edit(); } /** * Create login session * */ public void createLoginSession(String email, String userid){ // Storing login value as TRUE editor.putBoolean(IS_LOGIN, true); // Storing name in pref editor.putString(KEY_NAME, email); // Storing email in pref editor.putString(KEY_ID, userid); // commit changes editor.commit(); } /** * Check login method wil check user login status * If false it will redirect user to login page * Else won''t do anything * */ public void checkLogin(){ // Check login status if(!this.isLoggedIn()){ // user is not logged in redirect him to Login Activity Intent i = new Intent(_context, com.example.sachin.splashlogin.Login.class); // Closing all the Activities i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // Add new Flag to start new Activity i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // Staring Login Activity _context.startActivity(i); } } /** * Get stored session data * */ public HashMap<String, String> getUserDetails(){ HashMap<String, String> user = new HashMap<String, String>(); // user name user.put(KEY_NAME, pref.getString(KEY_NAME, null)); // user email id user.put(KEY_ID, pref.getString(KEY_ID, null)); // return user return user; } /** * Clear session details * */ public void logoutUser(){ // Clearing all data from Shared Preferences editor.clear(); editor.commit(); editor.putBoolean(IS_LOGIN, false); // After logout redirect user to Loing Activity Intent i = new Intent(_context, Login.class); // Closing all the Activities i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // Add new Flag to start new Activity i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // Staring Login Activity //_context.startActivity(i); } /** * Quick check for login * **/ // Get Login State public boolean isLoggedIn(){ return pref.getBoolean(IS_LOGIN, false); } }

y en cada pantalla nueva solo necesitas pegar este código ...

SessionManager session;

pegue este código en onCreate ()

session = new SessionManager(getApplicationContext()); HashMap<String, String> user = session.getUserDetails(); struid = user.get(SessionManager.KEY_NAME);