在应用终止时安排本地通知

时间:2019-05-14 21:32:46

标签: ios swift notifications localnotification unusernotificationcenter

我的目标是创建一个本地通知,该通知将在用户2周内未启动该应用程序时触发。我使用 Manager 类来处理应用本地通知的调度。

这是我当前的解决方案:

zipRev xs ys = snd (foldr g (ys,[]) xs)

但是,func applicationWillTerminate(_ application: UIApplication) { NotificationManager.shared.schedule(notification) } 不会被调用-因此通知不会被安排-如果应用在后台终止运行(即从基座)。

有没有解决方法?

我想到的一种解决方法是,在应用程序进入后台时安排通知,然后在应用程序再次变为活动状态时调用applicationWillTerminate,如下所示:

removePendingNotificationRequests()

与此相关的问题是,在我看来,这似乎是一种浪费且不够理想的解决方案。是否有比安排此通知更优雅的解决方案

2 个答案:

答案 0 :(得分:2)

您非常接近我要使用的策略。无需在进入后台时安排通知,而是在应用程序每次激活时清除并安排时间。

func applicationDidBecomeActive(_ application: UIApplication) { 
    UNUserNotificationCenter.current().removePendingNotificationRequests( withIdentifiers: ["notification"]
    NotificationManager.shared.schedule(notification)
}

每次启动时,您都应该在未来2周内设置一条通知。如果它们明天发布,请删除旧的通知,然后在两周后设置一个新的通知。

答案 1 :(得分:0)

如果您不说的话,我建议您采用当前的解决方法,实际上,后台运行的ios应用程序的后台体验非常差,并且无法保证applicationWillTerminate被调用,甚至无法保持活动直到调度之所以发生这种情况,是因为IOS始终在意应用程序在最前面,而在将其发送到后台终止时,它几乎会给该应用程序5分钟的时间,如果用户同时打开多个应用程序,这将大大减少

您可以创建一个后台获取进程来安排在应用关闭时进行调度,但这将比当前的

有更多麻烦