iOS: как удалить удаленные уведомления, если приложение не активно? - PullRequest
0 голосов
/ 15 октября 2018

Я хочу удалить удаленные уведомления, чтобы они не добавлялись в Центр уведомлений (например, когда вы получаете видеовызов в WhatsApp или Messenger, отображается только последнее уведомление).

Я пыталсявызов (в didReceiveRemoteNotification):

let center = UNUserNotificationCenter.current()
center.removeDeliveredNotifications(withIdentifiers: ["notification_identifier"])

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

Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

После некоторых исследований и благодаря ответу Paulw1 я обнаружил, что есть два способа сделать это:

Только дистанционное управление

Уведомления могут быть свернуты удаленно, вы только должны отправить уведомление с apns-collapse-id в качестве заголовка запроса.Обратите внимание, что он поддерживается только в HTTP / 2.Дополнительная информация здесь .

Тихое удаленное + локальное уведомление

Другой способ заключается в отправке удаленного уведомления в автоматическом режиме с такой полезной нагрузкой:

{
  "type": "notification_type",
  "aps" : {
    "content-available": 1
  }
}

Он будет вызывать didReceiveRemoteNotification, даже если состояние приложения inactive или background.Затем я создаю локальный запрос уведомления (необходимо использовать UserNotifications, доступный с iOS10):

let content = UNMutableNotificationContent()
content.body = "Notification message"
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 0.25, repeats: false)
let request = UNNotificationRequest(identifier: "identifierToUpdate", content: content, trigger: trigger)
self.center.add(request, withCompletionHandler: nil)

Ключом для обновления предыдущего уведомления является использование того же идентификатора запроса.

0 голосов
/ 15 октября 2018

Не вдаваясь в подробности вашего кода, рассмотрим func applicationDidEnterBackground(_ application: UIApplication) и func applicationWillEnterForeground(_ application: UIApplication)

Это методы в делегате приложения, которые обрабатывают жизненный цикл приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...