Удаленный пользователь Firebase не удаляет метаданные или метаданные Firebase не работают - PullRequest
0 голосов
/ 09 февраля 2019

Мне нужно аутентифицировать пользователя с помощью 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, поэтому он не получил необходимых деталей,

1 Ответ

0 голосов
/ 17 февраля 2019

Как я выяснил, это огненная ошибка, из-за которой метаданные не работают из-за различий (несколько секунд или из-за разногласий).Все еще тестирую все ситуации, но следующий код выглядит так, как он должен работать, без необходимости заменять его другим ошибочным кодом:

mAuthListner = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                if (firebaseAuth.getCurrentUser() != null) {
                    FirebaseUserMetadata metadata = mAuth.getCurrentUser().getMetadata();
                    **if (Math.abs(metadata.getCreationTimestamp() - metadata.getLastSignInTimestamp()) <5000L){**
                        if (prefManager.isFirstTimeLaunch()) {
                            startActivity(new Intent(MainActivity.this, NewUserActivity.class));
                        }

                        else{

                            startActivity(new Intent(MainActivity.this, UserProfile.class));
                            finishAffinity();



                    }

                }
                else{
                        startActivity(new Intent(MainActivity.this, UserProfile.class));
                        finishAffinity();
                    }




                }

            }
        };

Надеюсь, это поможет !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...