Firebaseリスナを使用してローカル通知をトリガしようとしています。私はpostを見つけましたが、多くのことで説明しようとしていることを正確に述べていますが、私はその投稿にコメントする評判はなく、どこにいても欲しいものを達成する方法は示されていません。アプリがバックグラウンドのときにFirebaseリスナをメモリに残す
元のポスターはこれを言います。
私はそれを理解しました。私は別のアプローチを使用しなければなりませんでしたが、私は Firebaseデータベースオブザーバを取得して、 背景の通知をトリガすることができました。
データベースオブザーバを含むオブジェクトが がメモリから割り当て解除されない限り、引き続き監視されトリガされます。私は自分のプロジェクトのために何をすべきかのように混乱していますどこ
class GlobalDatabaseDelegate {
static let dataBase = DataBase()
}
これは、次のとおりです。だから私は はこのような静的なデータベースオブジェクト プロパティを含むグローバルなクラスを作成しました。私のデータベース参照を含むDataBase()に似たクラスを作成しなければならないことは私の理解である。問題は、データベースリスナーを含むクラスオブジェクトを作成する方法を理解できないことです。
let userRef = FIRDatabase.database.reference().child("users")
そして、私はすべてのユーザーがデータベースに追加観察し、その後、ローカル通知をトリガーにしたい:
は、例えば、私の参照があると言います。私はそうするためのコードを書くことができます。それを自分のオブジェクトクラスにどのように組み込んで静的にするのかは分かりません。
少し遅くなったことを私に許してください。どんな助けも非常に高く評価されるでしょう。
ポストの残りの部分は次のとおりです。
extension DataBase: UNUserNotificationCenterDelegate {
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping() -> Void) {
print("Tapped in notification")
}
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
print("Notification being triggered")
completionHandler([.alert,.sound,.badge])
}
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)")
}
}
}
}
を本質的に:私もそれはこのよう をプッシュnotiticationsを送ることができるように UNUserNotificationCenterDelegateをするデータベースクラスを拡張し
私は、アプリがバックグラウンドにあるときにfirebaseリスナーをメモリに保持しようとしています。
これはリスナーをメモリに保持しません – Sente
アップル社がこの作業を中止したアップデートがありましたので、私は数日前に同じ問題に遭遇しました。私は今それがもはや働いていることを反映するために投稿を更新しました。 – shektek
それは価値があった。 Firebaseのプッシュ通知を使用する方法を学ばなければならないでしょう。 – Sente