【发布时间】:2018-03-27 21:35:11
【问题描述】:
我有一个应用程序,从点击某个按钮的那一刻起每 30 分钟触发一次本地通知(无论是在前台还是后台)。我学习了如何在点击另一个按钮或关闭视图控制器时删除这些通知。这是通过以下方式完成的: UNUserNotificationCenter.current().removeAllPendingNotificationRequests() 它工作得很好。但是,如果用户通过在多任务模式下向上滑动来强制退出(手动关闭)应用程序,那么奇怪的事情就会开始发生。默认情况下,已终止的应用不会删除那些待处理的推送通知,即使应用关闭,它们也会继续出现。
我了解到,在应用的生命周期中有几种状态可以终止应用。因此,我们可以使用 App Delegate 中的几种方法来触发上述代码以删除通知(否则它们会不断出现)。
所以,当我们在前台并点击主页按钮(或用 iPhone X 向上滑动)切换到多任务模式(在活动应用程序之间选择或删除它们)时,这是 applicationWillResignActive 的时间 - 我们可以开始观察应用程序在此处终止(可能通过观察 applicationWillTerminate 并使用某种方法作为选择器)并在终止时删除这些通知(奇怪的是,applicationWillTerminate 并不总是独立工作)。
但是,如果您切换到另一个应用程序然后返回多任务模式,则应用程序这次处于后台模式(不是非活动模式)。因此,当应用程序已经处于后台模式时,似乎没有办法触发某些方法并观察某些事情。我想知道有没有?在这种情况下 applicationDidEnterBackground 也不起作用。一切都以 “来自调试器的消息:由于信号 9 而终止”
结束那么,当您的应用程序处于后台模式并即将被用户终止时,您如何删除所有待处理的通知?如果它处于后台模式并且不会被用户终止,则通知需要保持活动状态。 如果有解决办法,请帮忙。或者,当视图控制器被关闭(它不是应用程序中唯一的主视图控制器)以及用户在非活动或后台状态终止/关闭应用程序时,是否有更好的方法来删除挂起的(活动的)本地通知?感谢您的帮助。
【问题讨论】:
标签: ios swift notifications local lifecycle