web-dev-qa-db-fra.com

Activité de connexion Android et redirection d'activité à domicile

Je gère la session en utilisant les préférences partagées dans mon application. Si l'utilisateur est connecté, il doit afficher l'activité d'accueil, sinon, il doit indiquer l'activité de connexion.

Avec l'aide de http://www.androidhive.info/2012/08/Android-session-management-using-shared-preferences/

J'ai essayé de créer une page d'accueil et de rediriger l'activité de connexion si l'utilisateur n'est pas connecté.

Est-ce exact? Ou existe-t-il une meilleure solution?.

Merci, Bennet.

15
Bennet

Voici ce que je fais lors de la connexion de l'utilisateur:

     private static final String APP_SHARED_PREFS = "asdasd_preferences";
     SharedPreferences sharedPrefs;
     Editor editor;
     private boolean isUserLoggedIn;

    sharedPrefs = getApplicationContext().getSharedPreferences(APP_SHARED_PREFS, Context.MODE_PRIVATE);
    isUserLoggedIn = sharedPrefs.getBoolean("userLoggedInState", false);
    editor = sharedPrefs.edit();
    editor.putBoolean("userLoggedInState", true);
    editor.putInt("currentLoggedInUserId", userId);
    editor.commit();

    Intent signupSuccessHome = new Intent(this, Home.class);
    signupSuccessHome.putExtra("reqFrom", "login");
    startActivity(signupSuccessHome);
    finish();

dans l'activité de base que toutes mes activités s'étendent (elle contient la barre d'actions et le menu déroulant), j'ai le contrôle suivant: (la principale activité est mon écran de connexion/enregistrement. Si l'utilisateur n'est pas connecté, je les y envoie )

@Override
protected void onResume() {
    sharedPrefs = getApplicationContext().getSharedPreferences(APP_SHARED_PREFS, Context.MODE_PRIVATE);
    isUserLoggedIn = sharedPrefs.getBoolean("userLoggedInState", false);
    if (!isUserLoggedIn) {
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
        finish();
    }
    super.onResume();
}

@Override
protected void onRestart() {
    sharedPrefs = getApplicationContext().getSharedPreferences(APP_SHARED_PREFS, Context.MODE_PRIVATE);
    isUserLoggedIn = sharedPrefs.getBoolean("userLoggedInState", false);
    if (!isUserLoggedIn) {
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
        finish();
    }
    super.onRestart();
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    sharedPrefs = getApplicationContext().getSharedPreferences(APP_SHARED_PREFS, Context.MODE_PRIVATE);
    isUserLoggedIn = sharedPrefs.getBoolean("userLoggedInState", false);
    currentlyLoggedInUser = sharedPrefs.getInt("currentLoggedInUserId", 0);
    currentlyLoggedInUserString = Integer.toString(currentlyLoggedInUser);
    if (!isUserLoggedIn) {
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
        finish();
    }

et pour empêcher l'utilisateur de revenir à l'écran de connexion: dans Login.Java:

    isUserLoggedIn = sharedPrefs.getBoolean("userLoggedInState", false);
    if (isUserLoggedIn) {
        Intent intent = new Intent(this, Home.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
        finish();
    }

dans Home.Java:

@Override
public void onBackPressed() {
    Intent intent = new Intent(this, Home.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
    finish();
    super.onBackPressed();
}
10
J. K.

En ce qui concerne mon expérience, j'utilise également les préférences partagées pour la redirection de page de connexion/page d'accueil. La seule différence est que ma première page est un écran d’accueil que je montre pendant une certaine durée. Après cela, je vérifie l'état de connexion avec les préférences partagées et effectue la redirection nécessaire. 

Un point doit être noté ici, cependant, certains serveurs exigent que vous envoyiez une nouvelle demande de connexion après une certaine durée (valeur configurable envoyée par le serveur dans le cadre de la réponse de connexion). Donc, vous voudrez peut-être jeter un coup d'œil à cela. Dans une autre de mes applications, je dois envoyer une demande de connexion chaque fois que l'application est lancée. Je stocke donc simplement les valeurs de connexion (nom d'utilisateur/mot de passe) dans les préférences partagées après la première connexion et effectue la partie de connexion en mode silencieux (sans montrant l’écran de connexion) après l’écran de démarrage. Tout dépend donc de vos besoins. Mais dans toutes mes applications, j'ai utilisé uniquement les préférences partagées. 

Peut-être que quelqu'un d'autre peut suggérer une meilleure approche. 

0
Rajeev