不同日期的本地通知 Swift 3

Posted

技术标签:

【中文标题】不同日期的本地通知 Swift 3【英文标题】:Local Notification on different dates Swift 3 【发布时间】:2017-06-14 00:27:23 【问题描述】:

我想在每年的特定日期触发本地通知,但所有通知都有不同的标题和正文,这是我编写的代码,效果很好,但仅适用于一个通知,第二部分是在收到通知后我的应用图标有 1,表示那里有一个通知如何删除它?..

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
        // Override point for customization after application launch.

        UIApplication.shared.statusBarStyle = .default
            UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) (allowed, error) in
                UNUserNotificationCenter.current().delegate = self
        scheduleNotification()
        return true
    



 func scheduleNotification() 

     var date = DateComponents()
     date.year = 2017
     date.month = 6
     date.day = 12
     date.hour = 22
     date.minute = 39

            let trigger = UNCalendarNotificationTrigger(dateMatching: date, repeats: false)
            let content = UNMutableNotificationContent()
            content.title = "Schedule Notification"
            content.body = "Today is my Birthday"
            content.sound = UNNotificationSound.default()
            content.badge = 1
            let request = UNNotificationRequest(identifier: "textNotification", content: content, trigger: trigger)
            UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
            UNUserNotificationCenter.current().add(request) (error) in
                if let error = error 
                    print("error: \(error)")
                
   

提前感谢和感谢

【问题讨论】:

您需要安排多个通知;每个所需日期一个。如果您不想标记应用图标,请不要设置 badge 属性 感谢@Paulw11,让您快速回复.. 【参考方案1】:

对于重复通知,您必须安排多个通知。你可以这样做。

func scheduleNotification(_ title:String, body:String, dateComponents :DateComponents)         
    let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: false)
    let content = UNMutableNotificationContent()
    content.title = title
    content.body = body
    content.sound = UNNotificationSound.default()
    content.badge = 1
    let request = UNNotificationRequest(identifier: "textNotification", content: content, trigger: trigger)
    UNUserNotificationCenter.current().add(request) (error) in
        if let error = error 
            print("error: \(error)")
        
    

并使用上述功能来安排多个这样的通知。

var date = DateComponents()
date.year = 2017
date.month = 6
date.day = 12
date.hour = 22
date.minute = 39    

UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
scheduleNotification("Schedule Notification", body: "Today is my Birthday", dateComponents: date)
scheduleNotification("Schedule Notification 2", body: "Today is my Birthday 2", dateComponents: date2)
scheduleNotification("Schedule Notification 3", body: "Today is my Birthday 3", dateComponents: date3)

第二部分您的问题如何删除徽章图标。在 applicationDidFinishLaunching 或 applicationDidBecomeActive 的某处添加以下代码。

UIApplication.shared.applicationIconBadgeNumber = 0;

【讨论】:

它不起作用,我创建了一个名为 notificationLauncher() 的新函数,在这个函数中我创建了三个不同的日期组件,然后我调用了带有标题、正文和组件参数的 scheduleNotification 函数,然后我调用了这个函数在应用程序委托 applicationDidFinisgLaunchingWithOptions :( 即使我尝试使用多个函数来调用多个通知,只有单个通知不起作用,但我什至没有收到一个通知:( 你收到的是第一个通知还是第三个?? 我在尝试多个通知时没有收到任何通知,但是当我尝试单个通知时我能够收到它... 上面的代码不起作用,这只适用于最后一个计划日期(小时,分钟)【参考方案2】:

为每个通知设置不同的标识符会给您所需的结果。

notificationType - 是您在安排通知时可以传递的任何字符串

let request = UNNotificationRequest(identifier: "Medicine Local Notification\(notificationType)", content: content, trigger: trigger)

【讨论】:

以上是关于不同日期的本地通知 Swift 3的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 的日期选择器上设置本地通知时间

将本地通知设置为 swift 3 前 1 天或 2 天前

每周特定日期的本地通知

应用程序关闭时如何发送本地通知(swift)?

定期快速触发本地通知

ios本地通知同时通知但不同日期的不同警报消息