0

Я написал приложение для Android, которое использует анонимную аутентификацию firebase и записывает в базу данных firebase из службы переднего плана. Я использую onDisconnect().removeValue() для очистки данных, созданных моим приложением, когда веб-камера закрыта. Когда пользователь активно взаимодействует с приложением, вызов onDisconnect() вызывает триггеры, как ожидалось (это означает, что мои правила безопасности в порядке). Однако, когда обслуживание переднего плана остается включенным в течение длительного периода времени (например, на ночь, экран выключается и т. Д.), Вызов onDisconnect() никогда не запускается снова. Приложение продолжает работать после пробуждения (связь с сервером Firebase и т. Д.), Но когда приходит время закрыть приложение (после периода простоя), кажется, что вызов onDisconnect() был каким-то образом потерян.Как правильно использовать Firebase из службы переднего плана в Android

Я читал, что анонимные сеансы аутентификации спокойно обновляются с помощью SDK firebase каждый час. Возможно ли, что это происходит в активности (и убивается операционной системой, но сохраняется поддержка переднего плана), поэтому сервер отбрасывает обратный вызов на onDisconnect? Если это так, можно ли сохранить эту функциональность в службе переднего плана?

ответ

0

У Firebase была ошибка недавно (не уверен, что она исправлена), где, когда она повторно проверяется каждый час, она теряет onDisconnect(), потому что у нее больше нет разрешения на изменение этого узла. Это приводит к дублированию.

Некоторые возможные решения:

  1. Присоединить метку времени и проверить, если последняя временная метка в течение часа, и если это так, то удалите его при добавлении нового.

  2. Удалите требования аутентификации для записи в узле, чтобы отслеживать разъединения (это не было бы безопасно, хотя, в зависимости от ваших потребностей).

Вот еще несколько альтернатив, и лучшее объяснение проблемы с членом команды Firebase: here.

+0

Спасибо @Aubtin. Хорошо знать, что это не проблема с моим кодом, и что команда Firebase знает об этой проблеме. –

0

Процессы приложений для Android могут жить бесконечно. Когда пользователь перестает использовать приложение, Android может продолжать поддерживать работоспособность, чтобы ускорить загрузку, если и когда пользователь вернется. Вы можете думать, что это оптимизация, и вы должны ожидать, что это произойдет иногда. Вы не должны пытаться контролировать это поведение - пусть Android управляет этим для вас.

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

Смежные вопросы