当我们的应用程序未运行时,我们遇到了一个关于本地通知触发的非常奇怪的问题。通过不运行,我的意思是它完全终止(当您双击主页按钮时不会出现在任务列表中)。
在正常运行情况下,当应用程序处于后台时,如果设备静止超过 X 秒,应用程序将生成本地通知并发出警告声音。15 秒后,如果未采取任何措施,则会生成另一个本地通知,其中包含紧急消息。
似乎是随机的,在应用程序终止后的几小时或几天内,设备会突然报告警告通知,然后大约 15 秒后发出紧急通知,就像应用程序在后台正常运行一样。如前所述,我们已验证该应用程序未列在正在运行的任务列表中,并且似乎已完全终止。
该应用程序已注册为位置、音频和 VOIP 的长期后台处理模式。
当应用程序终止时(在 applicationWillTerminate 中),我们执行清理,包括关闭和取消计时器、取消本地通知等。
我有两个理论:
- 我想知道这些“幽灵”通知是否只是在应用程序运行时排队的旧通知,但直到现在才执行(我的问题是为什么仍然尊重警告和紧急通知之间的时间差)。
- 该应用程序是否有可能在深层背景中“秘密”运行。如果是这样,则设备似乎会定期“唤醒”应用程序;如果是这种情况,那么设备使用什么作为此“唤醒呼叫”的标准。
我想知道是否有人遇到过这个奇怪的问题,如果有,我们如何解决这个问题?
PS - 我们对 iOS 开发还很陌生,所以如果我们忽略了一些非常明显的事情,请提前道歉
更新 #1 通过 xCode 使用日志消息,我观察到 applicationWillTerminate 在通过任务栏关闭关闭应用程序时始终被调用。不过,关于这种行为是否可以依赖似乎确实存在很多争论,所以我不会断定地说我是否相信我的观察结果是一致的,但我倾向于这个方向。但是,对此有任何进一步的见解,将不胜感激!
更新 #2
我昨晚尝试了一种新方法;到目前为止,我们一直在使用该[application scheduleLocalNotifications]
方法安排一个通知以触发“现在”,并将日期设置为当前时间。相反,我使用了该[application presentLocalNotificationNow]
方法,并且没有提供日期/时间。该应用程序仍然可以正常运行,但它并没有解决问题,因为昨晚在应用程序未运行时随机触发了“幽灵”通知。我现在想知道这个问题是否不是与“旧通知”相关的问题,而更多地与由于我们长期后台执行注册的某些触发而导致应用程序“唤醒”有关。