繁体   English   中英

如何取消用户通知

[英]How to cancel UserNotifications

如何禁用/取消已设置的通知?

这是我的日程安排功能。

func scheduleNotif(date: DateComponents, completion: @escaping (_ Success: Bool) -> ()) {

    let notif = UNMutableNotificationContent()

    notif.title = "Your quote for today is ready."
    notif.body = "Click here to open an app."

    let dateTrigger = UNCalendarNotificationTrigger(dateMatching: date, repeats: true)
    let request = UNNotificationRequest(identifier: "myNotif", content: notif, trigger: dateTrigger)

    UNUserNotificationCenter.current().add(request, withCompletionHandler: { error in

        if error != nil {
            print(error)
            completion(false)
        } else {
            completion(true)
        }
    })
}

要取消所有待处理的通知,您可以使用:

UNUserNotificationCenter.current().removeAllPendingNotificationRequests()

如需取消特定通知,

UNUserNotificationCenter.current().getPendingNotificationRequests { (notificationRequests) in
   var identifiers: [String] = []
   for notification:UNNotificationRequest in notificationRequests {
       if notification.identifier == "identifierCancel" {
          identifiers.append(notification.identifier)
       }
   }
   UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: identifiers)
}

相同的UNNotification标识方式基于创建UNNotificationRequest时传递的identifier

在你上面的例子中,

let request = UNNotificationRequest(identifier: "myNotif", content: notif, trigger: dateTrigger)

您实际上已将identifier硬编码为"myNotif" 这样,无论何时您想删除已设置的通知,您都可以执行以下操作:

UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: "myNotif")

但是,请注意,当您对标识符进行硬编码时,每次向UNUserNotificationCenter添加request ,实际上都会替换通知。

例如,如果您在 1 分钟后安排了"myNotif" request ,但您调用另一个函数在 1 小时后安排"myNotif" ,它将被替换。 因此,只有一小时后的最新"myNotif"才会出现在pendingNotificationRequest

正如这里提到的您可以使用以下代码取消所有通知:

UIApplication.sharedApplication().cancelAllLocalNotifications()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM