Как часть моего изучения 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 здесь, чтобы поверить, что это возможно без огромных серверов.
Спасибо за любые советы!
Керан