目前正在计算使用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
。我在这里错过了什么吗?
答案 0 :(得分:6)
经过几次研究,我意识到了
FirebaseAuth.getInstance().addAuthStateListener(listener)
是我真正需要用于我的流而不是FirebaseAuth.AuthStateListener(mAuth)
。我误解了它的工作方式,最终咬了我。
引用this answer作为主要保护程序。