在应用程序终止时安排本地通知
Scheduling a local notification when the app is terminated
我的目标是创建一个本地通知,如果用户 2 周未启动该应用程序,该通知将触发。我使用 Manager class 来处理应用本地通知的调度。
这是我目前的解决方案:
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 分钟的时间,当它被发送到后台终止时,如果用户同时打开多个应用程序
您可以创建一个后台获取进程以在应用程序关闭时安排它,但这会比当前的
更麻烦
我的目标是创建一个本地通知,如果用户 2 周未启动该应用程序,该通知将触发。我使用 Manager class 来处理应用本地通知的调度。
这是我目前的解决方案:
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 分钟的时间,当它被发送到后台终止时,如果用户同时打开多个应用程序
您可以创建一个后台获取进程以在应用程序关闭时安排它,但这会比当前的
更麻烦