Как удалить определенное удаленное уведомление, если приложение закрыто или в фоновом режиме - PullRequest
0 голосов
/ 23 сентября 2019

В моем приложении есть служба чата, при получении нового уведомления я хочу удалить уведомления между user1 и user2, кроме нового.

Я могу сделать это, когда приложение находится на переднем плане, вызвав:

        UNUserNotificationCenter.current().getDeliveredNotifications { notifications in
        print("count: \(notifications.count)")
        for notif in notifications {
            let nUserInfo = notif.request.content.userInfo
            let nType = Int(nUserInfo[AnyHashable("type")] as! String)
            if nType == type {
                let notifId = notif.request.identifier
                if notifId != notification.request.identifier {
                    center.removeDeliveredNotifications(withIdentifiers: [notif.request.identifier])
                }
            }
        }

где тип - это настраиваемое значение.Как это сделать, когда приложение находится в фоновом режиме или закрыто пользователем.

1 Ответ

0 голосов
/ 23 сентября 2019

Вам необходимо включить функцию фоновых режимов и проверить режим удаленных уведомлений.Чтобы удалить уведомление в фоновом режиме, вам необходимо отправить новое уведомление без предупреждения, например {"aps": {"content-available": 1}, "del-id": "1234"}, где content-available означает (вы можете узнать больше здесь Apple push service )

Включите этот ключ со значением 1 для настройки уведомления о фоновом обновлении.Когда этот ключ присутствует, система запускает ваше приложение в фоновом режиме и доставляет уведомление своему делегату приложения.Информацию о настройке и обработке уведомлений о фоновом обновлении см. В разделе Настройка уведомления о фоновом обновлении.

и del-id будет идентификатором уведомления, которое вы хотите удалить, вы также можете использовать массив.Вы также можете поместить эту информацию вместе с уведомлением о вашем сообщении.

В вашем AppDelegate.swift вам нужно будет добавить этот метод, чтобы удалить уведомление в фоновом режиме.В вашем случае вы можете отправить идентификатор уведомления, которое вы не хотите удалять, и использовать свой метод для удаления всех доставленных уведомлений, кроме сообщения с идентификатором, который вы отправили в своем последнем уведомлении.

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        guard let idToDelete = userInfo["del-id"] as? String else {
            completionHandler(.noData)
            return
        }

        UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: [idToDelete])
        completionHandler(.noData)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...