Уведомление всплывает сразу после закрытия приложения и иногда значительно задерживается - PullRequest
0 голосов
/ 15 октября 2018

Моя цель - получать уведомления каждый раз, когда база данных 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)
}

Спасибо за ваше время.

...