При входе в систему с помощью Facebook-аутентификации FireBase функция getCurrentUser () возвращает ноль - PullRequest
0 голосов
/ 29 ноября 2018

Я изо всех сил пытаюсь передать CurrentUser, когда я вхожу в систему с Facebook (с аутентификацией через firebase).Он работал раньше, но когда я сейчас захожу в свое приложение, currentuser продолжает возвращать ноль.

Я думаю, это может быть потому, что я уже вошел в приложение с Facebook, но аутентификация на базе firebase видит меня какновый пользователь.Однако я не уверен.

Мой onStart на странице входа выглядит следующим образом:

@Override
public void onStart() {
    super.onStart();

    // Check if user is signed in (non-null) and update UI accordingly.
    mAuth.addAuthStateListener(mAuthListener);
    FirebaseUser currentUser = mAuth.getCurrentUser();
    if (currentUser != null && AccessToken.getCurrentAccessToken() != null) {
        Log.d(TAG, "onComplete: We run this 2" + currentUser + mAuth);
        ItemHolder.getInstance().setUser(mAuth.getCurrentUser());
        updateUI();
    }
    else{
        Log.d(TAG, "onComplete: else run in onstart");
    }
}

Объект ItemHolder - это одноэлементный файл, используемый для хранения информации о пользователе.Тем не менее, он никогда не достигает этого, потому что пользователь всегда имеет значение null.

Я добавил AuthStateListener, и он говорит, что не существует currentuser.Моя проблема в том, что я понятия не имею, как получить currentUser, когда он продолжает возвращать ноль?Все остальное в моих действиях входа в систему следует предоставленному краткому руководству Firebase, чтобы войти через Facebook.

1 Ответ

0 голосов
/ 29 ноября 2018

Хорошо, я исправил свою проблему.

Поэтому я попытался добавить currentUser, чтобы фактически отделить его от метода updateUi ().Тогда казалось, что моя проблема была в том, что я обновил пользовательский интерфейс в своем facebookCallback (), который, казалось, изменил активность перед фактической обработкой имени входа.

Так что теперь мой код выглядит следующим образом:

private void facebookCallback() {
    FBLoginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            Log.d(TAG, "onComplete: onSuccess");
            handleFacebookAccessToken(loginResult.getAccessToken());
        }

А

private void handleFacebookAccessToken(AccessToken token) {
    AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        FirebaseUser user = mAuth.getCurrentUser();
                        Log.d(TAG, "onComplete: We run this");
                        updateUI(user);
                    }
                    else{
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInWithCredential:failure", task.getException());
                        Toast.makeText(LogInActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                    }
                }
            });
}
...