2016-05-30 102 views
0

我希望能夠意圖傳遞給,如果基於活動的用戶火力驗證驗證狀態改變

登錄狀態的改變,我必須在LoginActivity的OnCreate方法中的以下AuthStateListener

如果用戶在登錄,然後我希望他們被轉發到在MainActivity

但是,如果用戶將被註銷那麼他們需要到該LoginActivity

,當他們簽署的問題就來了Ø它陷入了一個無限循環,不斷激發着LoginActivity的意圖。

當auth狀態發生變化時,有什麼方法可以告訴用戶在哪裏(哪個活動)。這樣,我可以把內已簽署了意向通話if語句來檢查,如果他們已經在LoginAcitvity,從而防止環路

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

哪個'活動'是你的'FirebaseAuth'代碼運行?如果它在你的LoginActivity中,那麼你不需要擔心啓動這個活動,而是你可以清除UI,例如登錄字段(用戶名/密碼)。 – ishmaelMakitla

+0

FirebaseAuth在LoginActivity OnCreate中被調用。但用戶可以從其他活動退出。如果他們這樣做,我想將它們發回到登錄屏幕。當狀態更改爲退出結果時,將用戶留在當前屏幕 – PowerMan2015

+0

上註釋掉意圖,我認爲我只需添加一次AuthListener或者需要爲每個活動重複該操作? – PowerMan2015

回答

0

答案是在年底相當邏輯

我感動Firebase Auth呼叫我的主要活動,並修改流程以將意圖轉發到登錄活動,而不是其他方式。這避免了任何無限循環

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