2016-05-30 19 views
0

Ich möchte eine Absicht zu einer Aktivität passieren können, basierend auf, wenn die Login-Statusänderungen für den BenutzerFirebase Authentifizierung Auth Zustand geändert

i innerhalb der OnCreate Methode des LoginActivity zu folgenden AuthStateListener haben

wenn der Benutzer in dann angemeldet ist, möchte ich sie an die MainActivity

jedoch weitergeleitet werden, wenn der Benutzer dann abgemeldet wird sie die LoginActivity

das Problem kommt zu goto brauchen, wenn sie angemeldet sind o ut, es bleibt in einer Endlosschleife stecken und feuert konstant die LoginActivity ab.

Gibt es eine Möglichkeit zu sagen, wo sich der Benutzer befindet (welche Aktivität), wenn sich der Authentifizierungsstatus ändert. Auf diese Weise kann ich den abgemeldeten Absicht Anruf innerhalb eines if-Anweisung zu überprüfen, ob sie bereits am LoginAcitvity ist, so dass die Schleife zu verhindern

mAuthListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      FirebaseUser user = firebaseAuth.getCurrentUser(); 
      if (user != null) { 
       // User is signed in 
       Intent intent = new Intent(getBaseContext(), MainActivity.class); 
       //intent.putExtra("EXTRA_SESSION_ID", sessionId); 
       startActivity(intent); 
       Log.d("LOG_Login", "onAuthStateChanged:signed_in:" + user.getUid()); 
      } else { 
       // User is signed out 
       String className = this.getClass().getSimpleName(); 
       if (!(className == "LoginActivity")) { 
        Intent intent = new Intent(getBaseContext(), LoginActivity.class); 
        //intent.putExtra("EXTRA_SESSION_ID", sessionId); 
        startActivity(intent); 
       } 

       Log.d("LOG_Login", "onAuthStateChanged:signed_out"); 
      } 
      // ... 
     } 
    }; 
+0

Von welchem ​​'Activity' läuft der' FirebaseAuth'-Code? Wenn Sie sich in Ihrer LoginActivity befinden, brauchen Sie sich keine Gedanken über das Starten dieser Aktivität zu machen, stattdessen können Sie die Benutzeroberfläche löschen, zum Beispiel die Login-Felder (Benutzername/Passwort). – ishmaelMakitla

+0

Der FirebaseAuth wird in der LoginActivity OnCreate aufgerufen. Der Benutzer kann sich jedoch von einer anderen Aktivität abmelden. Wenn ja, möchte ich sie zurück zum Anmeldebildschirm senden. Wenn ich den Vorsatz auszeichne, wenn der Status auf "Abgemeldet" wechselt, bleibt der Benutzer auf dem aktuellen Bildschirm. – PowerMan2015

+0

Bin ich der Meinung, dass ich diesen AuthListener nur einmal hinzufügen muss oder muss ich ihn für jede Aktivität wiederholen? – PowerMan2015

Antwort

0

Die Antwort am Ende ziemlich logisch war

ich die bewegte Firebase-Auth-Aufruf an meine Hauptaktivität und Änderung des Prozesses, um eine Absicht an die Login-Aktivität weiterzuleiten, anstatt umgekehrt. Dadurch werden Endlosschleifen vermieden.

mAuthListener = new FirebaseAuth.AuthStateListener() { 
      @Override 
      public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
       FirebaseUser user = firebaseAuth.getCurrentUser(); 
       if (user != null) { 
        // User is signed in 
        // Intent intent = new Intent(getBaseContext(), MainActivity.class); 
        //intent.putExtra("EXTRA_SESSION_ID", sessionId); 
        // startActivity(intent); 
        // Log.d("LOG_Login", "onAuthStateChanged:signed_in:" + user.getUid()); 
       } else { 
        // User is signed out 
        String className = this.getClass().getName(); 
        if (!(className == "LoginActivity")) { 
         Intent intent = new Intent(getBaseContext(), LoginActivity.class); 
         // intent.putExtra("EXTRA_SESSION_ID", sessionId); 
         startActivity(intent); 
        } 

        Log.d("LOG_Login", "onAuthStateChanged:signed_out"); 
       } 
       // ... 
      } 
     }; 

     mAuth.addAuthStateListener(mAuthListener); 
Verwandte Themen