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

3

目前正在研究在Android(MVP)中使用Firebase Auth。 我的流程大致如下:

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

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

  • 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

期望结果:

在交互器中,onAuthStateChanged()将被触发。

收到的结果:

onAuthStateChanged()未被触发。

我尝试了另一种方法,在调用signOut()后传递了mAuth

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

这会触发 onAuthStateChanged。这里有什么我漏掉了吗?

我可以看到演示者和活动吗? - UmarZaii
它在 Helper 类中被调用(参见 MyHelper 类),从那个调用中,我期望触发 interactor 中的 onAuthStateChanged() - AL.
我的意思是你在哪里调用了公共的void signOut()方法。不是mAuth.signOut()。你在哪里调用这个方法? - UmarZaii
谢谢,请这么做。我正在努力弄清楚 :) - UmarZaii
嗨@BobSnyder,感谢您的关注。我已经成功实现了我想要的行为(我已经在下面添加了答案)。干杯! - AL.
显示剩余4条评论
1个回答

8
在进一步的研究后,我意识到:
FirebaseAuth.getInstance().addAuthStateListener(listener)

我真正需要使用的是FirebaseAuth.IdTokenListener(mAuth)而不是FirebaseAuth.AuthStateListener(mAuth)。我误解了它的工作方式,结果让我受到了打击。

参考这个答案作为主要救援。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接