FirebaseAuth.AuthStateListener.onAuthStateChanged(mAuth)无法按预期工作

AL.*_*AL. 3 android firebase firebase-authentication

目前正在计算使用Android(MVP)中的Firebase Auth.我的流程是这样的:

Activity > Presenter > Interactor > AuthHelper
Activity < Presenter < Interactor < AuthHelper
Run Code Online (Sandbox Code Playgroud)

Auth Helper类是直接与FirebaseAuth实例交互的唯一类.我的问题是AuthStateListener在这种情况下的工作原理:

  • Interactor有 FirebaseAuth.AuthStateListener
  • Interactor初始化Auth Helper类,通过 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();
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 助手传递FirebaseAuthInstance给听众

    class MyHelper {
    
        private static FirebaseAuth mAuth;
    
        public MyHelper(FirebaseAuth.AuthStateListener listener){
            mAuth = FirebaseAuth.getInstance();
            listener.onAuthStateChanged(mAuth);
        }
    
        public void signOut(){
            mAuth.signOut();
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • myHelper.signOut() 叫做

预期结果:

onAuthStateChanged() 在交互器中会触发.

收到的结果:

onAuthStateChanged() 没有触发.

我尝试了一种不同的方法,我mAuth在调用之后通过了signOut():

public void signOut(){
    mAuth.signOut();
    listener.onAuthStateChanged(mAuth);
}
Run Code Online (Sandbox Code Playgroud)

这触发了onAuthStateChanged.我在这里错过了什么吗?

AL.*_*AL. 7

经过几次研究,我意识到了这一点

FirebaseAuth.getInstance().addAuthStateListener(listener)
Run Code Online (Sandbox Code Playgroud)

是我真正需要用于我的流程而不是FirebaseAuth.AuthStateListener(mAuth).我误解了它的工作方式,最终咬我.

引用此答案作为主要保护程序.