Ответ 1
Нет необходимости в методе .await()
, чтобы получить пользователя firebase.
Вместо этого используйте FirebaseAuth.AuthStateListener
.
Итак, вы вводите знак firebase с чем-то вроде этого:
FirebaseAuth.getInstance()signInWithCredential(credential)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
Log.d(TAG, "login success");
} else {
Log.d(TAG, "login error");
}
}
});
И реализуем AuthStateListener
, который тригрерован при каждом изменении пользовательского состояния:
private FirebaseAuth.AuthStateListener authStateListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initAuthStateListener();
}
private void initAuthStateListener() {
authStateListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user == null) {
//user is not logged in
} else {
//user is logged in
//logic to finish the activity and proceed to the app can be put here
}
}
};
}
@Override
protected void onStart() {
super.onStart();
FirebaseAuth.getInstance().addAuthStateListener(authStateListener);
}
@Override
protected void onStop() {
super.onStop();
FirebaseAuth.getInstance().removeAuthStateListener(authStateListener);
}
Примечание. onAuthStateChanged
является тригером, когда AuthStateListener
добавляется в экземпляр auth firebase.
Также убедитесь, что параметр Prevent creation of multiple accounts with the same email address
установлен на консоли firebase (аутентификация → МЕТОД СИГНАЛА → Дополнительно → Одна учетная запись на адрес электронной почты (Изменить)).