FirebaseAuth.AuthStateListener.onAuthStateChanged(mAuth) not working as expected

Viewed 2682

Currently figuring out working with Firebase Auth in Android (MVP). My flow goes something like this:

Activity > Presenter > Interactor > AuthHelper
Activity < Presenter < Interactor < AuthHelper

The Auth Helper class is the sole class that directly interacts with the FirebaseAuth instance. My question is about how the AuthStateListener works in this scenario:

  • Interactor has FirebaseAuth.AuthStateListener
  • Interactor initializes Auth Helper class, passing the AuthStateListener

    class MyInteractor implements FirebaseAuth.AuthStateListener {
    
        FirebaseAuth.AuthStateListener listener;
    
        public MyInteractor(){
            MyHelper myHelper = new MyHelper(this);
    
            listener = new FirebaseAuth.AuthStateListener() {
                @Override
                public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                    Log.d("TAG", "onAuthStateChanged called");
                }
            };
        }
    
        public void signOut(){
            myHelper.signOut();
        }
    }
    
  • Helper passes the FirebaseAuthInstance to the listener

    class MyHelper {
    
        private static FirebaseAuth mAuth;
    
        public MyHelper(FirebaseAuth.AuthStateListener listener){
            mAuth = FirebaseAuth.getInstance();
            listener.onAuthStateChanged(mAuth);
        }
    
        public void signOut(){
            mAuth.signOut();
        }
    }
    
  • myHelper.signOut() is called

Expected result:

onAuthStateChanged() in the interactor would trigger.

Received result:

onAuthStateChanged() is not triggered.

I instead tried a different approach where I passed the mAuth after calling signOut():

public void signOut(){
    mAuth.signOut();
    listener.onAuthStateChanged(mAuth);
}

This triggers the onAuthStateChanged. Am I missing something here?

1 Answers
Related