如何跳过重复 UNCalendarNotificationTrigger 的第一次出现?

How can I skip the first occurrence of a repeating UNCalendarNotificationTrigger?

提问人:Tom Hamming 提问时间:1/4/2017 最后编辑:Tom Hamming 更新时间:7/19/2019 访问量:1927

问:

假设今天是星期一,现在是下午 1 点。我想从今天下午 2 点开始从我的 iOS 应用程序安排每周一次的本地通知。我会这样做:

NSDateComponents *components = [[[NSDateComponents alloc]init]autorelease];
components.weekday = 2;
components.hour = 14;
components.minute = 0;

UNCalendarNotificationTrigger *trigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:components repeats:YES];
//then make a UNMutableNotificationContent and UNNotificationRequest and schedule it

但是,如果我想在下周一下午 2 点开始,我如何跳过第一次出现?

换一种方式问这个问题,我如何安排在某个任意时间开始重复,而不是重复间隔的第一次出现?UNCalendarNotificationTrigger

iOS 用户通知

评论

1赞 brandonscript 1/4/2017
因为 NSDateComponents 不是 NSDate 感知的(因为它不知道特定日期,只知道相对于特定组件开始的日期/时间,例如年、日或小时),我认为这是不可能的。
1赞 Tom Hamming 1/4/2017
@brandonscript这肯定没什么大不了的。上下文是提醒用户完成日常任务,但如果他们今天已经完成任务,则不会提醒他们今天。功能已经以这种方式运行 - 现在我正在更新到新的 API。如果不出意外,我会提交雷达。
4赞 Tom Hamming 6/11/2018
我在 WWDC 2018 实验室中问过这个问题,现在的 API 是不可能的。但他们说这是一件合理的要求,它可能会在未来的更新中出现。
2赞 Hiren Gujarati 6/30/2018
我也在WWDC 2018中问过同样的问题,他们注意到并告诉他们没有告诉任何时间表,什么时候会在未来的更新中可用!
1赞 Nailer 11/17/2018
如果子类化 UNCalendarNotificationTrigger 不会导致添加通知失败,那么今天的 API 很容易实现。只需覆盖 nextTriggerDate。无需对 API 进行任何更改。

答:

0赞 Danny Bravo 12/13/2023 #1

在这里跳出框框思考。

您可以将服务器配置为在未来某个时间(即:明天清晨)向您的手机发送静默推送通知。当您在后台收到推送通知时,您可以使用它来设置本地日历通知。这样,您可以有效地跳过第一个通知,或安排它们在将来的任何时间开始。

当然,您不应该完全依赖 APNS 网络,因此您需要在应用处于前台时通过 API 调用跟踪通知的状态。