gpt4 book ai didi

ios - 从 iOS 10 中的自定义日期开始取消并重新安排 UserNotification(旧的 UILocalNotification)

转载 作者:可可西里 更新时间:2023-11-01 05:40:15 25 4
gpt4 key购买 nike

我安排每日 UserNorification 在特定时间每天触发,通知用户做某事。但是如果用户在通知被触发前 X 小时这样做,我需要取消今天的通知,在我看来取消所有通知,然后重新安排,但从明天的具体时间开始。例如,如果今天通知应该在 11:00 触发,而用户在 10:00 “做那件事”,则不应触发 11:00 通知,我需要在同一时间再次安排但从明天开始.循环继续下去,明天也一样。我的问题是:

  1. 我是否应该使用以下代码取消安排第一个每日通知:UNUserNotificationCenter.current().removeAllPendingNotificationRequests()

  2. 如何安排从特定日期开始的每日通知?

最佳答案

不幸的是,这种调度在 iOS 10 中的通知框架中变得非常困难。我能找到做类似事情的唯一方法是使用 UNCalendarNotificationTriggerUNTimeIntervalNotificationTrigger 的混合体并实现 UNNotificationContentExtension

概念如下:

每次执行您的操作时,您都需要重新安排通知。如果时间早于所需的通知时间(例如您的示例中的 11:00),则不要使用日历触发器重新安排时间,而是使用时间间隔触发器为第二天设置一个临时的非重复通知(让我们称之为tempNotification)

let nextDayAt11AMDate = /* the timestamp of tomorrow at 11am */
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: nextDayAt11AMDate.timeIntervalSinceDate(NSDate()), repeats: false)
/* schedule tempNotification */

当收到此通知时(假设 UNNotificationContentExtension 已实现),在通知到达时调用的扩展 View Controller didReceive: 方法中,取消现有通知并通常使用日历触发器安排实际的重复通知(我们称之为 actualNoticfication)

let date = DateComponents()
date.hour = 11
date.minute = 00
let trigger = UNCalendarNotificationTrigger(dateMatching: date, repeats: true)
/* schedule actualNotification */

这是一个漫长的变通方法,可能不是很有效,也不是 100% 可靠(例如,如果设备在 tempNotification 到达时关闭,那么 actualNotification 将不会被安排)但它涵盖了大多数情况。我会很高兴找到比这更好的方法......

关于ios - 从 iOS 10 中的自定义日期开始取消并重新安排 UserNotification(旧的 UILocalNotification),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41202128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com