2016-05-30 5 views
0

Я хочу, чтобы иметь возможность передать намерение деятельности, основанной на если Войти изменения состояния для пользователяFireBase аутентификация Auth изменение состояния

я должен следующие AuthStateListener в OnCreate способа LoginActivity

Если пользователь вошел в систему, то я хочу, чтобы они были направлены в MainActivity

Однако если пользователь выходит из системы, то они должны Гото в LoginActivity

проблема возникает, когда они подписаны о ut, он застревает в бесконечном цикле, постоянно стреляя в LoginActivity.

Есть ли способ сообщить, где находится пользователь (какая деятельность), когда изменяется состояние auth. Таким образом, я мог бы поместить подписанный из намерения вызов в течение если заявление, чтобы проверить, если они уже в 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, вам не нужно беспокоиться о начале этого действия, вместо этого вы можете очистить пользовательский интерфейс, например, поля входа (имя пользователя/пароль). – 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); 
Смежные вопросы