Приложение для пейджера - Когда приложение убито - Прослушайте изменения в базе данных и отправьте уведомление - PullRequest
0 голосов
/ 25 апреля 2020

Как часть моего изучения Firebase Google и Android (Kotlin), я пришел к простой идее приложения, которую я хотел бы реализовать, и фактически опубликовал sh в магазине Google.

Идея состоит в том, что вы создаете группу, присоединяетесь к людям и отправляете короткие заранее определенные сообщения в виде уведомлений pu sh всем участникам группы. Вроде как пейджер или чат-приложение.

  • Создание пользователей и групп выполняется с помощью Firebase Cloud Firestore -> , эта часть прекрасно работает
  • Для части уведомлений, внутри группы, я вставляю объект уведомления в коллекции Group и слушатель базы данных на стороне моего приложения, который создает уведомление, простая реализация, подобная этой:
val docRef = DatabaseController.db.collection(NaggerGlobalNotifications.TABLE_NAME)
        docRef.addSnapshotListener { snapshot, e ->
            if (e != null) {
                Log.w(TAG, "Listen failed.", e)
                return@addSnapshotListener
            }

            for (dc in snapshot!!.documentChanges) {
                when (dc.type) {
                    DocumentChange.Type.ADDED -> {
                        val newNotification = dc.document.toObject<MyNotification>()
                        NotificationsController.createNotification(
                            this,
                            newNotification.title,
                            newNotification.message
                        )
                    }
                }
            }
        }

«NotificationsController.createNotification» создает уведомление с использованием стандартного NotificationCompat .Builder, который прекрасно работает.

Теперь идет часть, с которой я борюсь

Мой первоначальный план состоял в том, чтобы Служба работала с этим слушателем в фоновом режиме. , Как только какое-то уведомление добавляется на мой узел Firebase Cloud Firestore, слушатель ловит его и отправляет уведомление на телефоны участников группы.

Это прекрасно работает, когда приложение работает. Когда приложение убито, уведомления перестают работать.

Я попробовал решение, описанное здесь: https://fabcirablog.weebly.com/blog/creating-a-never-ending-background-service-in-android, но я оказался здесь: Прослушайте изменения базы данных Firebase, когда приложение закрыто . В общем, предложенное исправление работало за исключением ...

Кажется, что невозможно прослушивать изменения базы данных Firebase в фоновом режиме

Я мог бы реализовать это как своего рода задача таймера, чтобы вызывать Firebase DB каждые 30 секунд или использовать сообщения FCM вместо базы данных, но возникает вопрос:

  • В случае вызова таймера - если бы у меня был миллион пользователей, и каждые 30 секунд будет миллион звонков в firebase для получения обновлений. Должен ли я быть миллионером, чтобы покупать такую ​​пропускную способность с помощью Google Firebase?
  • В случае FCM - запуск сообщений FCM возможен только с использованием консоли Firebase или с необходимостью настройки выделенного сервера (я думаю?) -> хорошо для больших компаний, но не для такого разработчика, как я: (

В общем, то, что я здесь ищу, это всего лишь руководство .

Приложение похоже на приложение чата с предопределенными короткими сообщениями (например, не более 100 символов), и я полагаю, что Я пытаюсь реализовать это с наименьшими затратами на оборудование. Возможно, я дурак sh здесь, чтобы поверить, что это возможно без огромных серверов.

Спасибо за любые советы!

Керан

1 Ответ

1 голос
/ 25 апреля 2020

Вы можете использовать Облачные функции для Firebase

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

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

Свободный режим:

Вызовы>> 125K / month

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