我的目标是创建一个本地通知,该通知将在用户2周内未启动该应用程序时触发。我使用 Manager 类来处理应用本地通知的调度。
这是我当前的解决方案:
zipRev xs ys = snd (foldr g (ys,[]) xs)
但是,func applicationWillTerminate(_ application: UIApplication) {
NotificationManager.shared.schedule(notification)
}
不会被调用-因此通知不会被安排-如果应用在后台终止运行(即从基座)。
有没有解决方法?
我想到的一种解决方法是,在应用程序进入后台时安排通知,然后在应用程序再次变为活动状态时调用applicationWillTerminate
,如下所示:
removePendingNotificationRequests()
与此相关的问题是,在我看来,这似乎是一种浪费且不够理想的解决方案。是否有比安排此通知更优雅的解决方案
答案 0 :(得分:2)
您非常接近我要使用的策略。无需在进入后台时安排通知,而是在应用程序每次激活时清除并安排时间。
func applicationDidBecomeActive(_ application: UIApplication) {
UNUserNotificationCenter.current().removePendingNotificationRequests( withIdentifiers: ["notification"]
NotificationManager.shared.schedule(notification)
}
每次启动时,您都应该在未来2周内设置一条通知。如果它们明天发布,请删除旧的通知,然后在两周后设置一个新的通知。
答案 1 :(得分:0)
如果您不说的话,我建议您采用当前的解决方法,实际上,后台运行的ios应用程序的后台体验非常差,并且无法保证applicationWillTerminate
被调用,甚至无法保持活动直到调度之所以发生这种情况,是因为IOS始终在意应用程序在最前面,而在将其发送到后台终止时,它几乎会给该应用程序5分钟的时间,如果用户同时打开多个应用程序,这将大大减少
您可以创建一个后台获取进程来安排在应用关闭时进行调度,但这将比当前的
有更多麻烦