iOS 通知触发器:每两周和/或每季度

Posted

技术标签:

【中文标题】iOS 通知触发器:每两周和/或每季度【英文标题】:iOS Notification Trigger: fortnightly and/or quarterly 【发布时间】:2017-01-03 10:15:53 【问题描述】:

我似乎无法找到任何适用于这种确切情况的 Apple 文档,并且我尝试了各种方法来做到这一点,但我一直空无一物。

我想安排一个重复通知(ios 10+ 所以UNCalendarNotificationTrigger 或同等学历)。 这些是本地通知不是推送通知。

我的目标:

安排重复的通知:

每两周一次(例如,每星期二) 每季度一次(例如,每 3 个月一次

我目前的方法:

这些触发器运行良好,并且易于实现(在 Swift Playground 中运行代码)。

// Every day at 12pm
var daily = DateComponents()
daily.hour = 12
let dailyTrigger = UNCalendarNotificationTrigger(dateMatching: daily, repeats: true)
dailyTrigger.nextTriggerDate() // "Jan 4, 2017, 12:00 PM"

// Every Tuesday at 12pm
var weekly = DateComponents()
weekly.hour = 12
weekly.weekday = 3
let weeklyTrigger = UNCalendarNotificationTrigger(dateMatching: weekly, repeats: true)
weeklyTrigger.nextTriggerDate() // "Jan 10, 2017, 12:00 PM"

// The 1st of every month at 12pm
var monthly = DateComponents()
monthly.hour = 12
monthly.day = 1
let monthlyTrigger = UNCalendarNotificationTrigger(dateMatching: monthly, repeats: true)
monthlyTrigger.nextTriggerDate() // "Feb 1, 2017, 12:00 PM"

// Every 1st of February at 12pm
var yearly = DateComponents()
yearly.hour = 12
yearly.day = 1
yearly.month = 2
let yearlyTrigger = UNCalendarNotificationTrigger(dateMatching: yearly, repeats: true)
yearlyTrigger.nextTriggerDate() // "Feb 1, 2017, 12:00 PM"

但是……

我似乎无法让fortnightlyquarterly 触发器正常工作。

// Every second Tuesday at 12pm
// ... There is no "date.fortnight", is this possible?

// The 1st of every quarter at 12pm
var quarterly = DateComponents()
quarterly.hour = 12
quarterly.day = 4
// Values: 1, 2, 3 or 4 all produce the same "nextTriggerDate" - why?
quarterly.quarter = 4 
let quarterlyTrigger = UNCalendarNotificationTrigger(dateMatching: quarterly, repeats: true)
quarterlyTrigger.nextTriggerDate()

所以,明确地说,我的问题是:

    是否可以获得每两周重复一次的通知? 我们如何获得每季度一次的触发器?

由于DateComponents() 有一个quarter 单元,我假设quarterly 触发器是可能的。然而,对于每两周一次的提醒,我什至不确定这是否可能......

任何见解将不胜感激!

【问题讨论】:

我们对季度触发器有答案了吗? 【参考方案1】:

我没有看到任何触发两周通知的直接选项。我的建议。

1) 是否可以获得每两周重复一次的通知?

我提出了两个选择:

    我们可以使用UNTimeIntervalNotificationTrigger 以两周的时间间隔重复通知吗?下面的例子

    let timeInterValFor2Weeks = 1190507.790425003
    
    let intervalTrigger = UNTimeIntervalNotificationTrigger(timeInterval: timeInterValFor2Weeks, repeats: true)//"Jan 3, 2017, 5:24 PM"
    
    intervalTrigger.nextTriggerDate() //"Jan 17, 2017, 12:05 PM"
    

    安排两个UNCalendarNotificationTrigger 触发器,应该在一个月的第一天和第三天触发。例如,它应该在每月的第一个星期日和第三个星期日发出通知。

    var fortnightPart1 = DateComponents()
    fortnightPart1.weekday = 1 //(Day..here Sunday)
    fortnightPart1.weekdayOrdinal = 2 //= n == (nth Day in the month...here 2nd Sunday in every month month)
    fortnightPart1.hour = 12
    
    let fortnightTrigger = UNCalendarNotificationTrigger(dateMatching: fortnightPart1, repeats: true)
    fortnightPart1.nextTriggerDate()
    

2) 我们如何每季度触发一次?

如果没有可用的直接选项,那么我建议与上述相同的解决方案。

【讨论】:

给了你赏金,因为你是唯一一个愿意回复的人:谢谢!我想我只会使用EventKit 并制作日历事件而不是通知。它更灵活一些。 我的本地通知不起作用。我花了 2 天时间才找出一个愚蠢的错误,而不是在日期组件中使用 WEEKDAY,我使用了 DAY。

以上是关于iOS 通知触发器:每两周和/或每季度的主要内容,如果未能解决你的问题,请参考以下文章

Cron 作业每 x 周和特定日期运行一次 [关闭]

iOS 11-每 x 分钟重复一次的用户本地通知

如何在 Azure Logic 应用程序中为每两分钟触发器安排天数和小时数?

本地通知 - 重复间隔/自定义时间不起作用

iOS静默推送通知在后台状态下每次都不会触发

如何在 iOS 中触发通知时打开警报视图?