【问题标题】:Region(Circular and Beacon) detection in background sometimes fails in iOS 15iOS 15 中的后台区域(圆形和信标)检测有时会失败
【发布时间】:2021-11-25 03:34:49
【问题描述】:

我们正在开发一个应用程序,该应用程序应在后台响应 iBeacon 和圆形区域。

有时它工作得很好,但有时信标和圆形区域进入/退出突然停止。

在应用程序中,我们正在使用(在后台模式下)

  • 重要的位置更新
  • 信标区域监控
  • 圆形区域监控
  • 某些操作会持续更新位置

有什么想法吗?在我看来,在后台区域检测有时会突然停止工作

会不会有问题?

【问题讨论】:

  • 自升级以来在 iOS 15 中看到同样的问题。有时 Apple 会在后台启动应用程序,有时则不会。
  • 对于观看此问题的任何人,我已格式化向 Apple 提交了支持票。我们已经能够在一个小型示例应用程序中重现此错误,这使得它越来越像 Apple 的 iOS 15 错误。
  • @Ankur Kalkani ,我的应用程序面临同样的问题。你从苹果那里听说过这个吗?或者你有没有找到解决这个问题的方法?
  • 来自 Apple:“我无法提供很多具体细节,但我确实想明确表示,这个问题正在积极处理和调查中。实际上已经有一系列问题和修复其中一些已经发布,而这种“混合”状态使问题有些“混乱”。”
  • 在我们关于此问题(特别是信标监控)的大量错误报告中,状态已更新为“确定的潜在修复 - 用于未来的操作系统更新”。

标签: ios background location ibeacon region


【解决方案1】:

经过反复试验、测试和与 Apple 的对话,我可以确认这不是区域监控的错误,而是 Apple's new prewarming feature in iOS 15 的错误。

简而言之,iOS 15 将在 iOS 认为用户会使用的后台静默启动应用程序。在我们的测试中,这大约每半小时发生一次。它使应用启动感觉更快,因为一堆应用已经加载并准备就绪。

如果 Apple 预热您的应用,而用户没有完全启动它,然后区域监视器需要通知您的应用,则不会发生这种情况。有时区域监控会提醒您的应用,有时则不会。如果您的应用程序“冷”,它将起作用。如果您的应用程序在内存中,它将工作。如果您的应用处于这种预热状态,那么您就死定了。

我从 Apple 那里得知这确实是多个错误,有些已修复,有些尚未修复。 iOS 15.2 测试版中的注释还特别提到这可能也会影响 HealthKit。

解决该错误的解决方案是在 main.m 中检测 Apple 何时预热您的应用程序和 exit。这不允许您的应用在 Apple 预热时启动,并在时机成熟时强制您的应用完全启动。

这是main.m 内部main() 方法的代码。请注意,添加 iOS 版本检测是谨慎的做法,因此当 Apple 确实修复此问题时,它最终可能会被逐步淘汰和删除。

double systemVersion = [[UIDevice currentDevice] systemVersion].doubleValue;
if (systemVersion >= 15.0) {
    NSDictionary* environment = [[NSProcessInfo processInfo] environment];
    BOOL prewarmed = false;
    for (NSString *key in environment.allKeys) {
        if ([key.lowercaseString containsString:@"prewarm"]) {
            prewarmed = true;
            break;
        }
    }

    if (prewarmed) {
        exit(0);
    }
}

【讨论】:

    【解决方案2】:

    最近有两个关于 iOS 15 上的区域监控失败的报告:

    IOS 15 Ibeacon monitoring

    iOS 15 does not awake app while entering BLE beacon region

    以上是针对 CLBeaconRegion 监控的,但任何存在的问题都可能适用于 CLCircularRegions。

    我尝试在对上述第二个问题的回答中进行受控测试,以在 iOS 15 升级中重现这一点。我无法重现该问题。所以这似乎不是一个普遍的问题。

    您可以尝试重新启动或重新安装您的应用,看看这些更改是否会产生影响。欢迎任何基于这些测试结果的更新。

    【讨论】:

      猜你喜欢
      • 2014-08-30
      • 1970-01-01
      • 2015-07-23
      • 2021-11-14
      • 2014-03-27
      • 2014-12-09
      • 2015-02-07
      • 1970-01-01
      相关资源
      最近更新 更多