Как определить, подписан ли пользователь 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();
...
}
}