Моя цель - получать уведомления каждый раз, когда база данных Firebase обновляется после того, как пользователь выходит из приложения.Основная проблема в том, что каждый раз, когда я закрываю приложение, я получаю уведомление, которое я уже видел.Значок уведомления и значок не исчезают после нажатия на это уведомление.Уведомление иногда значительно задерживается.Я использую обозреватель для новых сообщений в обозревателе Firebase, который помещен в метод AppDelegate «applicationWillResignActive»:
func applicationWillResignActive(_ application: UIApplication) {
UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
UNUserNotificationCenter.current().removeAllDeliveredNotifications()
let curr = Auth.auth().currentUser?.uid
/* to and curr are UIDs of users (I am checking if a user is allowed to see the message, this shouldn't be the problem */
let val = (snap.value as? NSDictionary)?["body"] as? String ?? ""
if to == curr {
ref.child("Users").queryOrderedByKey().observe(.value, with: { (snap) in
for s in snap.children {
let w = s as! DataSnapshot
if w.key == from {
let v = w.value as? NSDictionary
let name = v?["nickname"] as? String ?? "N/A"
self.notify(name: name, text: val)
}
}
})
}
Внутри блока я вызываю этот метод для отображения уведомления:
func notify(name: String, text:String){
UNUserNotificationCenter.current().removeAllDeliveredNotifications()
UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: ["new-message"]) // l
let un = UNMutableNotificationContent()
un.title = "\(name)"
un.body = "\(text)"
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false) // at least 60 if repeating//
let request = UNNotificationRequest(identifier: "new-message", content: un, trigger: trigger)
UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
}
IЯ уже пытался вызвать метод ниже, чтобы избавиться от полученных уведомлений в viewWillAppear в каждом из моих ViewControllers, но безуспешно.
func fixNotif(){
NotificationCenter.default.addObserver(self, selector: #selector(self.resign), name: UIApplication.willResignActiveNotification, object: nil)
}
@objc func resign(){
NotificationCenter.default.removeObserver(self)
}
Спасибо за ваше время.