繁体   English   中英

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

[英]Scheduling a local notification when the app is terminated

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

这是我目前的解决方案:

func applicationWillTerminate(_ application: UIApplication) {
    NotificationManager.shared.schedule(notification)
}

但是, 如果应用程序在后台终止 (例如,从扩展坞中清除),则不会调用applicationWillTerminate因此不会安排通知。

有什么解决方法吗?

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

func applicationDidEnterBackground(_ application: UIApplication) {
    NotificationManager.shared.schedule(notification)
}

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

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

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

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

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

我不建议您使用当前的解决方法,实际上,在后台运行的ios应用程序的后台体验非常差,并且不能保证applicationWillTerminate会被调用,甚至无法保持运行直到调度发生,因为IOS始终在乎放在最前面的应用程序,发送到后台终止时几乎要花5分钟的时间,如果用户同时打开多个应用程序,则花费的时间要少得多

您可以创建后台获取流程来安排在应用关闭时进行安排,但这将比当前流程麻烦更多

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM