在 iOS 延迟重复的用户通知

Delay a repeated User Notification on iOS

在 iOS 上安排用户通知时,是否可以在执行日期匹配时向 UNCalendarNotificationTrigger 添加初始延迟?

例如:3天后,开始每天发送一次本地通知。

我之所以要实现这个是因为我的通知方案使用了不同的通知主体——前几天被安排为不重复的,每次都有不同的副本,n天后我想要一个重复的通知开始。

根据关于 SO 主题的许多讨论,这是不可能的。

您可以在 for 循环中为特定日期创建一定数量的本地通知,我相信每个应用程序的限制是 50 - 然后当应用程序在 3 天后在前台打开时,您将有机会删除他们并使用重复通知。

这不是最优雅的解决方案,但如果您必须这样做,那么这是唯一的方法,而且应该足够了,如果用户在排队通知的 50 天左右内没有打开应用程序,他们可能会赢无论如何再打开它。

3 天延迟偏移的初始手动设置如下所示:

for dayOffset in 3...33 {
    let nextTriggerDate = Calendar.current.date(byAdding: .day, value: dayOffset, to: Date())!
    let comps = Calendar.current.dateComponents([.year, .month, .day], from: nextTriggerDate)

    let trigger = UNCalendarNotificationTrigger(dateMatching: comps, repeats: false)
    // Create a notification here
    // ...
}

由您创建逻辑来检测应用程序何时打开以及在 3 天后无限期重复。

一般来说,您可以永久使用它,因为如果用户有一段时间没有响应,您可能希望改变通知(以 DuoLingo 为例,几天后它会消失 "These notifications aren't working... we'll turn them off for a while")