почему мой currentUser всегда равен нулю, если я авторизируюсь с помощью facebook в firebase аутентификации? - PullRequest
0 голосов
/ 11 января 2020

на странице входа в систему, я использую эти 2 кода ниже:

    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, используя этот код, но у меня проблема при попытке войти через Facebook. auth.signInWithCredential(credential).addOnSuccessListener на самом деле срабатывает, поэтому я предполагаю, что могу успешно войти в систему, используя facebook на странице входа в систему

, но на другом экране (фрагмент), когда я хочу получить доступ к текущему пользователю, чтобы получить идентификатор пользователя, он всегда равен нулю вот так

val userFirebaseAuth = FirebaseAuth.getInstance().currentUser

Я не понимаю, почему userFirebaseAuth всегда равно нулю?

1 Ответ

0 голосов
/ 12 января 2020

По моему опыту, текущий пользователь не всегда сразу , доступный в приложении, запускается с холодного запуска. Аутентификация Firebase может занять некоторое время, чтобы инициализировать и обновить sh идентификатор пользователя, если это необходимо. Поскольку вы не знаете, сколько времени это займет, вы должны использовать прослушиватель, чтобы определить первый возможный момент, когда текущий пользователь будет абсолютно известен и проверен SDK. Полезно прочитать о: Как работает Firebase AuthStateListener?

Создайте новый 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 к AuthStateListener .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...