2016-05-30 100 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);