gpt4 book ai didi

android - 如果我在Firebase身份验证中使用Facebook登录,为什么我的currentUser始终为null?

转载 作者:行者123 更新时间:2023-12-02 13:44:55 25 4
gpt4 key购买 nike

在登录页面中,我使用以下两个代码:

    facebookLoginButton.setOnClickListener {
facebookLoginManager.logInWithReadPermissions(this, Arrays.asList("email", "public_profile"))
}

private fun setUpFacebookLogin() {

facebookLoginManager.registerCallback(callbackManager, object : FacebookCallback<LoginResult> {

override fun onSuccess(loginResult: LoginResult) {
Log.d(TAG, "facebook:onSuccess:$loginResult")
handleFacebookAccessToken(loginResult.accessToken)
}

override fun onCancel() {
Log.d(TAG, "facebook:onCancel")
progressBar.visibility = View.GONE

}

override fun onError(error: FacebookException) {
Log.d(TAG, "facebook:onError", error)
progressBar.visibility = View.GONE
mActivity.longToast("Gagal masuk dengan akun Facebook, silahkan periksa koneksi internet Anda, atau gunakan akun Google atau email yang lain.")

}
})

}

private fun handleFacebookAccessToken(token: AccessToken) {

Log.d(TAG, "handleFacebookAccessToken:$token")

val credential = FacebookAuthProvider.getCredential(token.token)

auth.signInWithCredential(credential).addOnSuccessListener {

Log.d(TAG, "facebook signInWithCredential:success")

val user = auth.currentUser ?: return@addOnSuccessListener
checkUserBasicDataInFirestore(user)

}.addOnFailureListener {exception ->

progressBar.visibility = View.GONE
Log.d(TAG, "facebook signInWithCredential failed: ${exception.localizedMessage}")
mActivity.longToast(exception.localizedMessage)
}


}

我实际上可以使用这些代码将用户注册为firebase auth,但是尝试使用Facebook登录时出现问题。 auth.signInWithCredential(credential).addOnSuccessListener实际上是触发的,所以我假设我可以在登录页面中使用Facebook成功登录

但是在另一个屏幕(片段)中,当我要访问当前用户以获取uid时,它始终为null,例如
val userFirebaseAuth = FirebaseAuth.getInstance().currentUser

我不明白为什么 userFirebaseAuth总是为null?

最佳答案

根据我的经验,从冷启动开始,当前用户并不总是在应用启动时立即可用。如果需要,Firebase身份验证可能需要一些时间来初始化和刷新用户的ID token 。由于您不知道需要多长时间,因此您应该使用侦听器来确定SDK绝对知道并验证了当前用户的第一个可能时刻。阅读以下内容是个好主意:How does the firebase AuthStateListener work?

创建一个新的AuthStateListener:

mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// Sign in logic here.
}
}
};

然后根据需要添加和删除它:
FirebaseAuth.getInstance().addAuthStateListener(mAuthListener);
FirebaseAuth.getInstance().removeAuthStateListener(mAuthListener);

同时检查 API documentation on AuthStateListener

关于android - 如果我在Firebase身份验证中使用Facebook登录,为什么我的currentUser始终为null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59693911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com