Вам необходимо включить функцию фоновых режимов и проверить режим удаленных уведомлений.Чтобы удалить уведомление в фоновом режиме, вам необходимо отправить новое уведомление без предупреждения, например {"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)
}