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

时间:2017-07-21 03:04:46

标签: android firebase firebase-authentication

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

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

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();
        }
    }
    
  • 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。我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:6)

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

FirebaseAuth.getInstance().addAuthStateListener(listener)

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

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