带有开始和结束时间的每日本地通知

Posted

技术标签:

【中文标题】带有开始和结束时间的每日本地通知【英文标题】:Daily LocalNotification with Start & End Time 【发布时间】:2019-05-15 06:32:28 【问题描述】:

我希望notification 每天重复,但要给出开始时间、结束时间和频率(固定)。

假设开始时间是上午 10 点,结束时间是下午 6 点,频率是每 3 小时一次,那么它应该分别在上午 10 点、下午 1 点、下午 4 点触发通知。

注意:- 应用程序有 3 个其他本地 notification(具有不同的标题和正文),因此需要区分通知,因为用户可以随时停止这些通知。

尝试使用DLLocalNotification,但它没有解决我的问题。

DLNotificationScheduler().repeatsFromToDate (identifier: String, alertTitle: String, alertBody: String, fromDate: Date, toDate: Date, interval: Double, repeats: RepeatingInterval, category: String = " ", sound: String = " ")

任何帮助将不胜感激

【问题讨论】:

【参考方案1】:

要发布带有重复的本地通知,您可以使用以下代码:

let content = UNMutableNotificationContent()
        content.title = "Pizza Time!!"
        content.body = "Monday is Pizza Day"
        content.categoryIdentifier = "pizza.reminder.category"

        //Date component trigger
        var dateComponents = DateComponents()
        //example for Gregorian calendar. Every Monday at 11:30AM
        dateComponents.hour = 11
        dateComponents.minute = 30
        dateComponents.weekday = 2
        // for testing, notification at the top of the minute.
        dateComponents.second = 0

        let trigger = UNCalendarNotificationTrigger(
            dateMatching: dateComponents,
            repeats: true)


        let request = UNNotificationRequest(identifier: "pizza.reminder", content: content, trigger: trigger)
        UNUserNotificationCenter.current().add(request)  (error) in
            if let error = error 
                print("error in pizza reminder: \(error.localizedDescription)")
            
        

您可以通过为每种类型定义不同的标识符来添加多种类型的通知。

要停止本地通知,

UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: ["pizza.reminder"])

要获取本地未发布通知的通知,您可以使用以下代码

UNUserNotificationCenter.current().getPendingNotificationRequests 
            (requests) in
            displayString += "count:\(requests.count)\t"
            for request in requests
                displayString += request.identifier + "\t"
            
            print(displayString)
        

这些东西足以添加一些逻辑并满足您的要求。 欲了解更多信息,您可以关注:

https://makeapppie.com/2017/01/31/how-to-repeat-local-notifications/

【讨论】:

它可能每天重复,但我需要每天重复 3-4 次,直到用户关闭通知(即,今天上午 10 点、下午 1 点、下午 4 点、下午 7 点、明天......) - 这是针对 1 个通知,同样,该应用程序有 2 个类似的通知(Notification2 可能在今天上午 9 点、中午 12 点、下午 3 点、今天下午 6 点、明天... Notification3-下午 4 点、今天晚上 10 点、明天...)为此我可以使用不同的标识符,但是如何在这些时间间隔之间每天重复它们?同样,用户无法更改频率,他可以更改每个通知的开始和结束时间或关闭。

以上是关于带有开始和结束时间的每日本地通知的主要内容,如果未能解决你的问题,请参考以下文章

如何设置重复本地通知的开始和结束时间?

iOS中结束日期之前的本地通知

iPhone : 每日本地通知

iOS 上的每日本地通知

如何根据 CVcalendar 中的特定时间进行每日本地通知?

如何安排本地通知