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

Posted

技术标签:

【中文标题】如何设置重复本地通知的开始和结束时间?【英文标题】:How to set the time of start and end of the repeat local notification? 【发布时间】:2018-06-12 08:26:03 【问题描述】:

我尝试使用UNCalendarNotificationTrigger(dateMatching:, repeats:) 重复通知,但此方法只能在特定时间重复。

我也试过UNTimeIntervalNotificationTrigger(timeInterval:, repeats:),按时间间隔重复通知,但是这个方法不能设置推送通知的开始时间。

而且这两种方法似乎没有地方设置结束推送通知的时间。

我想从一个特殊的时间开始,并定期重复通知。我该怎么办?

【问题讨论】:

你能展示你的代码吗? 看到这个post,它可能对你有帮助。 我认为你最好的选择可能是放弃“重复”参数,只是从开始时间循环到结束时间来安排单独的通知。 @pinch 详细应该怎么做?你能给我看一些示例代码吗? 【参考方案1】:

而不是使用repeats 参数,您可以从开始时间循环到结束时间来安排单独的通知。

let notifIDPrefix = "mynotif"
let notifCategory = "com.mydomain.mynotif" // this should have been registered with UNUserNotificationCenter

func scheduleNotifs(from startDate: Date, to endDate: Date, with interval: TimeInterval) 
    var curDate = startDate
    var count: Int = 0
    while curDate.compare(endDate) != .orderedDescending 
        scheduleNotif(with: "\(notifIDPrefix)_\(count)", date: curDate)
        curDate = curDate.addingTimeInterval(interval)
        count += 1
    


private func scheduleNotif(with identifier: String, date: Date) 

    let content = UNMutableNotificationContent()
    content.title = "My Title"
    content.body = " "
    content.categoryIdentifier = notifCategory
    content.sound = UNNotificationSound.default()

    let triggerTime = Calendar.current.dateComponents([.year, .day, .hour, .minute, .second], from: date)
    let trigger = UNCalendarNotificationTrigger(dateMatching: triggerTime, repeats: false)
    let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger)

    let center = UNUserNotificationCenter.current()
    center.add(request)  (error : Error?) in
        if let theError = error 
            print(theError.localizedDescription)
        
    

以下将安排 3 个通知(从现在开始的 1、2 和 3 分钟)。

    let startDate = Date().addingTimeInterval(60)
    let endDate = startDate.addingTimeInterval(60 * 2)
    let interval: TimeInterval = 60
    scheduleNotifs(from: startDate, to: endDate, with: interval)

【讨论】:

谢谢,不过,iPhone 最多可以安排 64 条通知。如果我从开始时间开始设置结束时间很长,间隔很短,会不会导致一些通知无法推送? 嗯,好点子。不理想,但您可能会在您的应用程序进入前台时重新安排所有通知。显然,如果他们从不运行该应用程序,您最终会到达 64 的末尾。您可以安排一个后台任务定期运行,以保持您的下一个 64(或更少)计划 developer.apple.com/library/archive/documentation/iPhone/…。我认为您可以在“UIBackgroundModes”中指定“获取”模式。就像我说的,不理想。我认为另一种选择是远程推送通知。 有什么解决办法吗?我不想将通知限制为 64 - 而是使用重复功能。但是,如前所述,我需要能够设置特定的开始日期,然后定期重复通知。

以上是关于如何设置重复本地通知的开始和结束时间?的主要内容,如果未能解决你的问题,请参考以下文章

在 iPhone OS4 SDK 中设置重复本地通知的结束日期

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

如何将本地通知重复间隔设置为自定义时间间隔?

安排本地通知从明天开始每天重复

使用cordova本地通知和离子设置重复间隔的特定数据和时间

如何将本地通知重复间隔设置为自定义时间间隔?