Intereting Posts
Почему значки, установленные с Notification.Builder.setSmallIcon в Android Lollipop, отображаются как белый квадрат? Room Persistence @Relation работает на Java, но не в Колине Android Studio не может импортировать модули после обновления Сбросить TextView вверх Настраиваемый метод getView адаптера listview, который вызывается несколько раз и не имеет когерентного порядка Есть ли встроенные / стандартные звуки, которые можно использовать в приложении? Android цикл бесконечного ListView? Eclipse не распознает «R.id …» с Android Как Xamarin для Android (Mono для Android) отличается от разработки на базе Android? Android: обрезать изображение после его съемки с камерой с фиксированным соотношением сторон Проблема TarsosDSP и SurfaceView с несколькими потоками Заполнение цвета в многоугольнике, а точки, пересекающиеся в Android Один OnClickHandler для нескольких кнопок Уведомление о облачных сообщениях Firebase, которое не получено устройством Для Android SDK требуется Android Developer Toolkit версии 14.0.0 или выше. … Пожалуйста, обновите ADT до последней версии

Firebase: Как сохранить зарегистрированного пользователя Android?

Я использую Firebase SimpleLogin, чтобы включить аутентификацию по электронной почте / паролю. Создание пользователей и последующий вход в систему работают нормально. Однако всякий раз, когда я покидаю приложение (хотя бы на несколько секунд), пользователь никогда не регистрируется в моем возвращении, т. Е. ..

authClient.checkAuthStatus(new SimpleLoginAuthenticatedHandler())... 

Всегда возвращает нулевого пользователя.

Я не выхожу из системы через API. Также я установил количество дней входа пользователя в систему 21 в консоли Firebase.

В JS-документах я упоминал о параметре «помнить меня», но я не вижу эквивалента для Android / Java.

Хотите узнать, не хватает ли я чего-либо в документах или если Android не подходит?

Спасибо за вашу помощь,

Нил.

Изменить: добавлен образец кода.

Создание пользователя ….

 public void registerUserForChat(final MyApplication application, String email, String password) { Firebase ref = new Firebase(FIREBASE_URL); SimpleLogin authClient = new SimpleLogin(ref); authClient.createUser(email, password, new SimpleLoginAuthenticatedHandler() { @Override public void authenticated(com.firebase.simplelogin.enums.Error error, User user) { if(error != null) { Log.e(TAG, "Error attempting to create new Firebase User: " + error); } else { Log.d(TAG, "User successfully registered for Firebase"); application.setLoggedIntoChat(true); } } }); } 

Логин пользователя….

 public void loginUserForChat(final MyApplication application, String email, String password) { Log.d(TAG, "Attempting to login Firebase user..."); Firebase ref = new Firebase(FirebaseService.FIREBASE_URL); final SimpleLogin authClient = new SimpleLogin(ref); authClient.checkAuthStatus(new SimpleLoginAuthenticatedHandler() { @Override public void authenticated(com.firebase.simplelogin.enums.Error error, User user) { if (error != null) { Log.d(TAG, "error performing check: " + error); } else if (user == null) { Log.d(TAG, "no user logged in. Will login..."); authClient.loginWithEmail(email, password, new SimpleLoginAuthenticatedHandler() { @Override public void authenticated(com.firebase.simplelogin.enums.Error error, User user) { if(error != null) { if(com.firebase.simplelogin.enums.Error.UserDoesNotExist == error) { Log.e(TAG, "UserDoesNotExist!"); } else { Log.e(TAG, "Error attempting to login Firebase User: " + error); } } else { Log.d(TAG, "User successfully logged into Firebase"); application.setLoggedIntoChat(true); } } }); } else { Log.d(TAG, "user is logged in"); } } }); } 

Поэтому метод loginUserForChat сначала проверяет, есть ли зарегистрированный пользователь и, если нет, выполняет вход в систему. Обратите внимание, что каждый раз, когда я запускаю приложение, журнал, который я вижу, является ….

  1. Попытка входа в систему пользователя Firebase …
  2. Нет входа в систему. Вход в систему …
  3. Пользователь успешно вошел в систему Firebase

Если я выйду из приложения, даже на несколько секунд, и вернусь – я вижу тот же журнал.

Одна вещь, которую я заметил, это то, что вызов checkAuthStatus не принимает никаких учетных данных пользователя – я предполагаю, что он просто проверяет любого локально зарегистрированного пользователя?

Очень признателен.

Solutions Collecting From Web of "Firebase: Как сохранить зарегистрированного пользователя Android?"

[Engineer at Firebase] Чтобы прозрачно обрабатывать постоянные сессии в клиенте Firebase Simple Login Java, вам нужно использовать конструктор с двумя аргументами, который принимает контекст Android, то есть SimpleLogin(com.firebase.client.Firebase ref, android.content.Context context) каждый раз, когда вы создаете экземпляр клиента Simple Login Java.

См. https://www.firebase.com/docs/java-simple-login-api/javadoc/com/firebase/simplelogin/SimpleLogin.html для полной ссылки на API.

Правильный способ сделать это – использовать аутентификацию oAuth:

 1. The user logs in. 2. You generate an access token(oAuth2). 3. Android app saves the token locally. 4. Each time the comes back to the auth, he can use the token to to log in, unless the token has been revoked by you, or he changed his password. 

К счастью, у firebase есть своя поддержка для этого, docs:

https://www.firebase.com/docs/security/custom-login.html https://www.firebase.com/docs/security/authentication.html

Другой способ – попробуйте этот код в вашем onCreate :

 FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); if (user != null) { // User is signed in Intent i = new Intent(LoginActivity.this, MainActivity.class); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(i); } else { // User is signed out Log.d(TAG, "onAuthStateChanged:signed_out"); }