iphone - iOS (iPhone) 开发 - 本地通知在应用程序未运行时随机触发

标签 iphone objective-c ios

当我们的应用程序未运行时,我们遇到了一个关于本地通知触发的非常奇怪的问题。通过不运行,我的意思是它完全终止(当您双击主页按钮时不会出现在任务列表中)。

在正常运行情况下,当应用程序处于后台时,如果设备静止超过 X 秒,应用程序将生成本地通知并发出警告声音。 15 秒后,如果未采取任何措施,则会生成另一个本地通知,其中包含紧急消息。

看似随机,在应用程序终止后的几小时或几天后,设备会突然报告警告通知,然后在大约 15 秒后发出紧急通知,就像应用程序在后台正常运行一样。如前所述,我们已验证该应用程序未列在正在运行的任务列表中,并且似乎已完全终止。

该应用程序已注册为位置、音频和 VOIP 的长期后台处理模式。

当应用程序终止时(在 applicationWillTerminate 中),我们执行清理,包括关闭和取消计时器、取消本地通知等。

我有两个理论:

  • 我想知道这些“幽灵”通知是否只是旧的
    应用程序运行时排队的通知,但是
    直到现在才被执行(我的问题是为什么时间
    警告和紧急通知之间的区别仍然存在
    尊重)。
  • 该应用程序是否有可能在深层背景中“ secret ”运行。如果是这样,则设备似乎会定期“唤醒”应用程序;如果是这种情况,那么设备使用什么作为此“唤醒调用”的标准。

  • 我想知道是否有人遇到过这个奇怪的问题,如果有,我们如何解决这个问题?

    P.S - 我们对 iOS 开发还很陌生,所以如果我们忽略了一些完全明显的事情,请提前道歉

    更新 #1
    通过 xCode 使用日志消息,我观察到 applicationWillTerminate 在通过任务栏关闭关闭应用程序时始终被调用。不过,关于这种行为是否可以依赖似乎确实存在很多争论,所以我不会断定地说我是否相信我的观察结果是一致的,但我倾向于这个方向。但是,对此有任何进一步的见解,将不胜感激!

    更新 #2
    昨晚我尝试了一种新方法;到目前为止,我们一直在使用 安排通知以“现在”触发。 [application scheduleLocalNotifications] 方法,并将日期设置为当前时间。相反,我使用了 [application presentLocalNotificationNow] 方法,并且没有提供日期/时间。该应用程序仍然可以正常运行,但它并没有解决问题,因为昨晚在应用程序未运行时随机触发了“幽灵”通知。我现在想知道这个问题是否不是与“旧通知”相关的问题,而更多地与由于我们长期后台执行注册的某些触发而导致应用程序“唤醒”有关。

    最佳答案

    一旦您的应用程序安排了 UILocalNotification,它们将由操作系统处理,而不是您的应用程序。因此,即使您的应用程序被杀,它们仍然会关闭。

    所以不,您的应用程序还没有 secret 地在后台运行,这些只是您已经安排好的通知正在关闭。您是否可能在通知上设置重复间隔?

    您可以使用以下方法清除所有通知:

     [[UIApplication sharedApplication] cancelAllLocalNotifications];
    

    如 onnoweb 所述,在您的应用程序被杀死之前,您的 applicationWillTerminate 可能没有被调用。我不确定当用户在任务栏中关闭应用程序时是否总是调用它。

    编辑以回应评论:

    我的第一个想法是您似乎在安排 UILocalNotifications 的开火日期不正确。我建议您检查安排它们的方式。在您的应用程序被杀死后一天它们可能会关闭的唯一方法是,如果您在应用程序仍在运行时安排它们。

    编辑以回应进一步的评论:

    Teeg - 我认为 applicationWillTerminate 有时可能会在您终止应用程序时被调用,但不能保证会被调用。根据我的阅读,如果您的应用程序处于挂起状态,则不会调用该方法。我不知 Prop 有长时间运行后台任务的应用程序是如何工作的,但它可能会在后台和挂起状态之间切换。我不知道。但问题是,打电话
    [[UIApplication sharedApplication] cancelAllLocalNotifications];
    

    将取消您的所有通知。因此,如果在那之后发生了故障,那就是没有调用该方法的证据。我猜另一种可能是调用了该方法,但是该应用程序在被杀死之前没有足够的时间取消所有通知。我不太确定你有多少时间在那里做事。我会再次建议您最好的选择是首先找出为什么要安排这些通知。

    关于iphone - iOS (iPhone) 开发 - 本地通知在应用程序未运行时随机触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12466214/

    相关文章:

    ios - 无法在 iOS 5.1 中加载 MKMapView

    ios - 谁应该管理 UI 元素、 View 或 View Controller ?

    iPhone:即使设置了另一个语言,NSLocalizedString也会从英语.strings文件中读取

    ios - 我的 UISearchBar 移动到顶部(动画)--> 想要禁用

    iphone - 使用 iPhone 应用程序进行 Xcode 调试缓慢且滞后

    objective-c - 隐藏在 Lion 中的滚动条。如果人们不使用触控板,他们如何水平滚动?

    ios - 如果没有连接、Internet 或其他方式获取 URL 的内容,则 XMLParser 的子类会因 contentsOfURL 初始值设定项而崩溃

    iphone - 在 iTunes Connect 中删除应用程序

    objective-c - NSApplicationPresentationHideDock 没有效果

    ios - 多个 Split View Controller