Как определить, подписан ли пользователь Firebase с использованием аутентификации facebook

Я использую firebase из Google, и у меня есть некоторые проблемы с аутентификацией пользователя. После входа в facebook я получаю FirebaseUser в AuthStateListener, но как я могу определить, зарегистрирован ли этот пользователь через facebook или по-другому?

ОБНОВЛЕНИЕ Как @Frank van Puffelen сказал FirebaseAuth.getInstance(). GetCurrentUser(). GetProviderId() должен возвращать "facebook", но в моем случае он возвращает "firebase". Теперь я не могу понять, в чем причина такого поведения. Когда я получил FacebookToken, я делаю что-то вроде этого:

        AuthCredential credential = FacebookAuthProvider.getCredential(facebookToken.getToken());
        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {

                        // If sign in fails, display a message to the user. If sign in succeeds
                        // the auth state listener will be notified and logic to handle the
                        // signed in user can be handled in the listener.
                        if (!task.isSuccessful()) {

                        }

                    }
                });

И после того, как до вызова метода onComplete(), мой AuthStateListener получает пользователя, какой идентификатор провайдера не является "facebook", как и должно быть. Я делаю что-то неправильно? Я следил за официальной документацией Google

Ответ 1

В версии 3.x и более поздних версий один пользователь может быть подписан с несколькими провайдерами. Таким образом, концепция единого идентификатора провайдера уже не существует. Фактически, когда вы звоните:

FirebaseAuth.getInstance().getCurrentUser().getProviderId()

Он всегда будет возвращать firebase.

Чтобы определить, был ли пользователь подписан с Facebook, вам нужно будет проверить данные провайдера:

for (UserInfo user: FirebaseAuth.getInstance().getCurrentUser().getProviderData()) {
  if (user.getProviderId().equals("facebook.com")) {
    System.out.println("User is signed in with Facebook");
  }
}

Ответ 2

В моем приложении я использую учетную запись анонимного Firebase, и когда я подключаю firebase auth с учетной записью Facebook или учетной записью Google, которую я проверяю,

for (UserInfo user: FirebaseAuth.getInstance().getCurrentUser().getProviderData()) {

            if (user.getProviderId().equals("facebook.com")) { 
               //For linked facebook account
               Log.d("xx_xx_provider_info", "User is signed in with Facebook");


            } else if (user.getProviderId().equals("google.com")) { 
               //For linked Google account
                Log.d("xx_xx_provider_info", "User is signed in with Google");
            }

}

Ответ 3

В ответном намерении есть информация.
Обратитесь к следующему фрагменту:
Код ответа - это "телефон", "google.com", "facebook.com" или "twitter.com".

    'import com.firebase.ui.auth.AuthUI;
    import com.firebase.ui.auth.IdpResponse;
    .....
    @Override
    protected void onActivityResult(final int requestCode, int resultCode, Intent 
    data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == RC_SIGN_IN) {

            progressBar.setVisibility(View.VISIBLE);

            IdpResponse response = IdpResponse.fromResultIntent(data);

            if (resultCode == RESULT_OK) { 
                String providerCode = response.getProviderType();
                ... 
            }  
      }