使用Kotlin和Firebase通过onAuthStateChanged回调触发sendEmailVerification

时间:2017-07-13 05:04:36

标签: android firebase firebase-authentication listener kotlin

我正在开始一个新的Android项目并决定使用 Kotlin Firebase ,现在我可以使用createUserWithEmailAndPassword成功创建用户在我的SignupActivity上,我的用户在createUserWithEmailAndPassword完成后成功登录。

现在我正在尝试使用FirebaseAuth.AuthStateListener使用onAuthStateChanged(FirebaseAuth auth)在{{3}}上触发的回调事件进一步使用,但我在onCreate(savedInstanceState: Bundle?)函数内创建的侦听器不是被触发并且我缺乏将Java代码转换为Kotlin的经验并没有帮助我找出根本问题。

我有一些基于Java的示例代码,如下所示:

Java示例

onCreate(...//
mAuthListener = new FirebaseAuth.AuthStateListener() {
    @Override
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
        FirebaseUser user = firebaseAuth.getCurrentUser();
        if (user != null) {
            // User is signed in
            // NOTE: this Activity should get onpen only when the user is not signed in, otherwise
            // the user will receive another verification email.
            sendVerificationEmail();
        } else {
            // User is signed out

        }
        // ...
    }
};

我的Kotlin代码

    FirebaseAuth.AuthStateListener { auth ->
        val user = auth.currentUser
        if(user != null){
            // User is signed in
            Log.d(TAG, "Signed in")
            Toast.makeText(this, "User", Toast.LENGTH_LONG).show();
            sendVerificationEmail()
        }else{
            // User is signed out
            Log.d(TAG, "Signed out")
            Toast.makeText(this, "Null", Toast.LENGTH_LONG).show();
        }
    }

我将一些日志和Toast元素用于调试目的,但它们都没有被触发,我认为 FirebaseAuth.AuthStateListener 中缺少onAuthStateChanged但我不知道我知道如何解决它。

如果有人能就我的错误给我一些建议,那将非常感激。

提前致谢。

1 个答案:

答案 0 :(得分:3)

这是帮助我的,在调用addAuthStateListener时注意括号 - 对kotlin不熟悉我使用了{ }卷曲的那些:

    public override fun onStart() {
      super.onStart()
      firebaseAuth.addAuthStateListener(authStateListener)
    }

    public override fun onPause() {
       super.onPause()
       firebaseAuth.removeAuthStateListener(authStateListener)
    }