Как очистить удаленное уведомление в вашем приложении?
Есть ли способ очистить удаленное уведомление от баннера уведомлений при смахивании вниз с верхней части экрана iPhone. Я попытался установить номер значка на ноль:
application.applicationIconBadgeNumber = 0
в делегате didFinishLaunchingWithOptions
, а также didReceiveRemoteNotification
, но это не очистило уведомления. Благодарю.
9 ответов
Вам нужно установить IconBadgeNumber на 0 и отменить текущие уведомления. Я никогда не делал в Swift, но я думаю, что код для этого будет следующим:
application.applicationIconBadgeNumber = 0
application.cancelAllLocalNotifications()
В iOS 10 выше всего решения устарели
"cancelAllLocalNotifications()" устарело в iOS 10.0: используйте UserNotifications Framework's -[UNUserNotificationCenter removeAllPendingNotificationRequests]
Используйте приведенный ниже код, чтобы отменить уведомление и сбросить счетчик значков
Для iOS 10, Swift 3.0
cancelAllLocalNotifications
устарел с iOS 10.
@available(iOS, introduced: 4.0, deprecated: 10.0, message: "Use UserNotifications Framework's -[UNUserNotificationCenter removeAllPendingNotificationRequests]") open func cancelAllLocalNotifications()
Вам нужно будет добавить это утверждение импорта,
import UserNotifications
Получить центр уведомлений. И выполнить операцию, как показано ниже
application.applicationIconBadgeNumber = 0 // For Clear Badge Counts
let center = UNUserNotificationCenter.current()
center.removeAllDeliveredNotifications() // To remove all delivered notifications
center.removeAllPendingNotificationRequests() // To remove all pending notifications which are not delivered yet but scheduled.
Если вы хотите удалить одно или несколько конкретных уведомлений, вы можете добиться этого с помощью метода ниже.
center.removeDeliveredNotifications(withIdentifiers: ["your notification identifier"])
Надеюсь, поможет..!!
Я должен увеличить, а затем уменьшить счетчик значков, чтобы он работал:
application.applicationIconBadgeNumber = 1
application.applicationIconBadgeNumber = 0
application.cancelAllLocalNotifications()
Любой , кто ищет быстрый код 4 и выше
application.applicationIconBadgeNumber = 0
UNUserNotificationCenter.current().removeAllDeliveredNotifications()
Это для сценария, когда приложение принудительно завершается пользователем:
Прежде всего, отправьте ненулевой значок, если вы хотите отправлять пользователям уведомления о днях рождения с помощью push-уведомлений, например:
{
"aps": {
"alert": {
"title": "Hey! Urgent Reminder",
"body": "Do not forget my wife SURPRISE BIRTHDAY PARTY"
},
"badge": 1
}
}
После этого, когда нет необходимости показывать уведомления на устройстве, вы можете отправить тихое уведомление с нулевым значком, которое очистит значок и уведомления, даже если приложение было принудительно завершено пользователем, ноdidReceiveRemoteNotification
не будет вызван, потому что приложение завершено. полезная нагрузка для тихого push-уведомления:
{
"aps" : {
"content-available" : 1,
"badge" : 0,
"Priority" : 10
}
}
После отправки эта полезная нагрузка автоматически очистит значок и удалит push-уведомление из Центра уведомлений.
Не. Если перед отправкой тихого уведомления значок был равен нулю, уведомления не удаляются.
Свифт 3
В вашем AppDelegate.swift
файл под didFinishLaunchingWithOptions
добавлять:
application.applicationIconBadgeNumber = 0
При запуске вашего приложения будет удален значок iOS (красный кружок в верхнем правом углу значка приложения).
Swift 4 и 5
import UserNotifications
...
...
...
UNUserNotificationCenter.current().removeAllDeliveredNotifications()
Проведя несколько тестов на iOS 14, я не смог заставить это работать. Я тестировал установку счетчика значков на 0 и уменьшение его безуспешности.
В ноябре 2019 года ниже представлено рабочее решение для меня со Swift 4. Сначала вам нужно проверить версию устройства, чтобы удалить все уведомления, но не нужно проверять, чтобы сбросить счетчик значков.
override func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]? ) -> Bool {
//--------
application.applicationIconBadgeNumber = 0
if #available(iOS 10.0, *) {
let center = UNUserNotificationCenter.current()
center.removeAllDeliveredNotifications()
center.removeAllPendingNotificationRequests()
} else {
application.cancelAllLocalNotifications()
}
//------
}