我的应用程序中有一个通知表的 FirebasechildAdded
事件侦听器,我想在应用程序处于后台时触发推送通知。
这是听众:
@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 来解决这个问题,并遇到了这样的帖子:
是否可以使用 Firebase 云消息传递 (FCM) 直接从设备将 PushNotifications 发送到特殊的 UDID?
但是,我并没有尝试从一个用户向另一个用户发送推送通知,而是尝试UNNotificationRequest
从数据库侦听器中激活一个。
我还发现了这篇文章:
FCM 后台通知在 iOS 中不起作用,
但同样,这与我的用例不同,因为它在FIRMessaging
框架内使用。
那么,是否可以在应用程序在后台时运行此数据库侦听器?如果没有,我是否可以让 Firebase Cloud Messenger 观察表格中的变化并发送通知?