在登录页面中,我在下面使用这两个代码:
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?
答案 0 :(得分:0)
根据我的经验,从冷启动开始,当前用户并不总是立即可用。如果需要,Firebase身份验证可能需要一些时间来初始化和刷新用户的ID令牌。由于您不知道要花多长时间,因此您应该使用侦听器确定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);