我安排每天 UserNorification
在特定时间每天触发,通知用户做某事 . 但是如果用户在通知被触发前X小时执行此操作,我需要在今天's notification, in my opinion cancel all, and reschedule again but from tomorrow'取消特定时间 . 例如,如果今天通知应该在11:00触发,而用户"do that thing"在10:00触发,则不应该触发11:00通知,并且我需要在同一时间再次安排,但从明天开始 . 循环一直持续,明天也是如此 . 我的问题是:
-
我应该使用以下代码取消预先安排第一天的通知:
UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
? -
如何安排从特定日期开始的每日通知?
2 回答
不幸的是,这种调度在iOS 10中的通知框架变得异常艰难 . 我能找到类似的东西的唯一方法是使用
UNCalendarNotificationTrigger
和UNTimeIntervalNotificationTrigger
的混合并实现UNNotificationContentExtension
.这个概念如下:
每次执行您的操作时,您都需要重新安排通知 . 如果时间早于所需的通知时间(例如,在您的示例中为11:00),而不是使用日历触发器重新安排,请使用时间间隔触发器为第二天设置一个临时的非重复通知(让我们叫它
tempNotification
)收到此通知时(如果已实施
UNNotificationContentExtension
),在通知到达时调用的分机的视图控制器didReceive:
方法中,取消现有通知并通常使用日历触发器安排实际的重复通知(让我们称之为actualNoticfication
)这是一个漫长的解决方案,可能不是非常有效,也不是100%可靠(例如,如果设备在
tempNotification
到达时关闭,那么actualNotification
将不会被安排),但它涵盖了大多数情况 . 我会很高兴找到比这更好的方法......经过研究,使用新的
UserNotifications
框架是不可能的 . 我们必须使用旧的UILocalNotification
方法来实现这一目标 . 因为在iOS10中不推荐使用该代码,所以我将支持的版本从9更改为,因此不会出现警告 . 这是一种永久的方法,但希望Apple能够在新框架中实现和扩展旧功能 .