android - Come mantenere l'utente connesso sempre "connesso al server"




android save session (4)

La tua domanda non sembra chiara.

1) cosa intendi per sempre connesso al server?
2) Che tipo di cose devi fare se l'utente è connesso al server?

Posso suggerirti di utilizzare SharedPreferences se vuoi che l'utente sia connesso in qualsiasi momento nella tua app, non è necessario memorizzare le credenziali dell'utente in SharedPreferences , puoi memorizzare userId, indirizzo email e quel tipo di dettagli. SharePreferences

Se si desiderano informazioni su base temporale come necessità di aggiornare i dati ogni giorno o ogni ora, è possibile chiamare l'API utilizzando AlarmManager per un determinato periodo di tempo. AlarmManager

Ancora vuoi alcune informazioni per informare l'utente su nuove modifiche / aggiornamenti, è possibile utilizzare le notifiche push. GCM e FCM

Nota :

Firebase Cloud Messaging (FCM) è la nuova versione di GCM.

Sto lavorando su un'app, dove volevo che l'utente continuasse a loggarsi significa sempre connesso al server dopo aver effettuato correttamente l'accesso (proprio come l'app di Facebook). Ho provato a google questo, ma non ho trovato alcuna logica corretta di questo. Molti siti Web suggeriscono di utilizzare SharedPreference mantenendo il cred di accesso dell'utente. su SheredPreference non è una buona idea e non ha fornito alcuna risposta per rimanere connesso al server. Sono piuttosto bloccato con questa idea. Ho solo bisogno di logica per implementarlo. Qualsiasi suggerimento e codice di esempio sono i benvenuti.

Sono Android noob.


Prova questo suo lavoro per me ..

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);
    }

}

e in ogni nuovo schermo hai solo bisogno di incollare questo codice ..

 SessionManager session;

incolla questo codice in onCreate ()

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

Prima di tutto non capisco l'uso dei termini stay connected to server e stay logged in nel tuo caso. Ma alla mia comprensione risponderò a questo.

  1. Per rimanere loggati, come in, non chiedere sempre le credenziali, si suppone di ottenere un token univoco dal server e di memorizzarlo insieme ad altri dettagli di accesso (tranne la password) in SharedPreferences o in qualche database. Ogni volta che l'utente apre l'app, usa il token ricevuto come parametro di autenticazione (puoi anche fare riferimento al metodo del giuramento). Ciò eliminerà le possibilità di perdite di password e il token sarà specifico per il dispositivo, proprio come le sessioni.

  2. Resta connesso al server, come in, ricevi notifiche istantanee, invia e ricevi messaggi? Quando l'app è aperta, usa i socket, ecco come si fa, quando l'app è chiusa, puoi usare FCM.


Memorizzare le credenziali dell'utente sul dispositivo non è un buon modo di progettare. È possibile memorizzare la password di Hash , che è anche negata come buona tecnica di progettazione dell'applicazione. Secondo facebook e google questi giganti tecnologici utilizzano il token di accesso-logout di Authentication . Una volta che l'utente accede al server genera token per un particolare utente che viene quindi memorizzato sul dispositivo e sul server. La prossima volta che l'utente arriva su App è stata effettuata una richiesta per verificare che il token sia valido o meno, se valido - accesso concesso altrimenti no.

Un progetto di base di questo processo

Tutorial:







stay-logged-in