目前正在研究在 Android (MVP) 中使用 Firebase Auth。我的流程是这样的:

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

Auth Helper 类是唯一直接与 FirebaseAuth 实例交互的类。我的问题是关于 AuthStateListener 在这种情况下如何工作:
  • 交互器有 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();
        }
    }
    
  • Helper 将 FirebaseAuthInstance 传递给监听器
    class MyHelper {
    
        private static FirebaseAuth mAuth;
    
        public MyHelper(FirebaseAuth.AuthStateListener listener){
            mAuth = FirebaseAuth.getInstance();
            listener.onAuthStateChanged(mAuth);
        }
    
        public void signOut(){
            mAuth.signOut();
        }
    }
    
  • myHelper.signOut() 被称为

  • 预期结果:

    交互器中的 onAuthStateChanged() 将触发。

    收到结果:
    onAuthStateChanged() 未触发。

    相反,我尝试了一种不同的方法,在调用 mAuth 后传递了 signOut() :
    public void signOut(){
        mAuth.signOut();
        listener.onAuthStateChanged(mAuth);
    }
    

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

    最佳答案

    经过更多的研究,我意识到

    FirebaseAuth.getInstance().addAuthStateListener(listener)
    

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

    引用 this answer 作为主要保护程序。

    关于android - FirebaseAuth.AuthStateListener.onAuthStateChanged(mAuth) 未按预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45228320/

    10-12 04:04