У меня есть прослушиватель событий Firebase childAdded
для таблицы уведомлений в моем приложении, и я хотел бы запускать push-уведомления, когда приложение находится в фоновом режиме.
Вот слушатель:
@objc func observeNotificationsChildAddedBackground() {
self.notificationsBackgroundHandler = FIREBASE_REF!.child("notifications/\(Defaults.userUID!)")
self.notificationsBackgroundHandler!.queryOrdered(byChild: "date").queryLimited(toLast: 99).observe(.childAdded, with: { snapshot in
let newNotificationJSON = snapshot.value as? [String : Any]
if let newNotificationJSON = newNotificationJSON {
let status = newNotificationJSON["status"]
if let status = status as? Int {
if status == 1 {
self.sendPushNotification()
}
}
}
})
}
func sendPushNotification() {
let content = UNMutableNotificationContent()
content.title = "Here is a new notification"
content.subtitle = "new notification push"
content.body = "Someone did something which triggered a notification"
content.sound = UNNotificationSound.default()
let request = UNNotificationRequest(identifier: "\(self.notificationBackgroundProcessName)", content: content, trigger: nil)
NotificationCenter.default.post(name: notificationBackgroundProcessName, object: nil)
UNUserNotificationCenter.current().delegate = self
UNUserNotificationCenter.current().add(request){ error in
if error != nil {
print("error sending a push notification :\(error?.localizedDescription)")
}
}
}
Это отлично работает, когда приложение находится на переднем плане. Затем я добавляю фонового наблюдателя в свое приложение, которое делегирует applicationWillResignActive
метод для наблюдения за ним в фоновом режиме:
func applicationWillResignActive(_ application: UIApplication) {
NotificationCenter.default.addObserver(self, selector: #selector(MainNavViewController.observeNotificationsChildAdded), name: notificationBackgroundProcessName, object: nil)
}
Но обозреватель событий не запускается, когда приложение находится в фоновом режиме. Я заглянул в Firebase Cloud Messenger, чтобы решить эту проблему, и наткнулся на такие сообщения:
однако я не пытаюсь отправить push-уведомление от одного пользователя другому, я пытаюсь активировать UNNotificationRequest
из прослушивателя базы данных.
Я также нашел это сообщение: Фоновые уведомления FCM не работают в iOS, но опять же, это отличается от моего варианта использования, потому что он используется в рамках FIRMessaging
.
Итак, можно ли запустить этот прослушиватель базы данных, когда приложение работает в фоновом режиме? Если нет, могу ли я заставить Firebase Cloud Messenger отслеживать изменения в таблице и отправлять уведомление?