Мне нужно аутентифицировать пользователя с помощью firebase (Google или Facebook).Затем я хочу, чтобы пользователь добавил еще несколько подробностей о нем в NewUserActivity, а затем ввел основное ядро приложения.Для проверки его запуска в первый раз я использую
prefManager.isFirstTimeLaunch
Это работает нормально, без проблем, но у меня есть ошибка.Если пользователь удаляет и переустанавливает приложение, как обычно, он запускает приложение в первый раз.Поэтому мне нужно проверить, есть ли у него уже аккаунт.Я использую
FirebaseUserMetadata metadata = mAuth.getCurrentUser().getMetadata();
if (metadata.getCreationTimestamp() == metadata.getLastSignInTimestamp())
Таким образом, предполагается, что пользователь не новый (уже имел учетную запись).
Мой полный проверочный код:
mAuthListner = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
if (firebaseAuth.getCurrentUser() != null) {
FirebaseUserMetadata metadata = mAuth.getCurrentUser().getMetadata();
if (metadata.getCreationTimestamp() == metadata.getLastSignInTimestamp()) {
if (prefManager.isFirstTimeLaunch()) {
startActivity(new Intent(MainActivity.this, NewUserActivity.class));
}
}
else
{
startActivity(new Intent(MainActivity.this, UserProfile.class));
finishAffinity();
}
}
}
};
ПРОБЛЕМА:
Код всегда ВСЕГДА в UserProfile Activity.Таким образом, даже если пользователь новый, он не переходит в NewUserActivity, чтобы добавить детали, и, поскольку в UserProfile Activity нет необходимых деталей, выдается пустое исключение.
Как я понимаю, проблема в том, что этот код
if (metadata.getCreationTimestamp() == metadata.getLastSignInTimestamp())
не работает.Без этой строки приложение работает нормально, КРОМЕ если пользователь удалит и переустановит приложение.В этом случае он похож на нового пользователя.
Вообще говоря, это очень обычный сценарий аутентификации пользователя в firebase, сначала добавить некоторые детали в действие, а затем всегда быть в профиле.
У меня была эта часть кода долгое время без проблем.Странное поведение началось неделю назад без всякой причины.Так что я почти убежден в своей проблеме с базой данных.
Разъяснение
Нет необходимости в logcat, поскольку нулевое исключение должно делать этот код ВСЕГДА переходить в UserProfile, поэтому он не получил необходимых деталей,