在iOS 15中,后台区域(圆形和信标)检测有时会失败 [英] Region(Circular and Beacon) detection in background sometimes fails in iOS 15

查看:0
本文介绍了在iOS 15中,后台区域(圆形和信标)检测有时会失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们正在开发一个应用程序,它应该响应iBeacon和背景中的圆形区域。

有时工作正常,但有时信标和圆形区域进入/退出突然停止。

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

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

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

可能是问题所在吗?

推荐答案

经过反复试错、测试以及与苹果公司的交流,我可以确认这不是区域监控的错误,而是Apple's new prewarming feature in iOS 15的错误。

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

如果苹果预热了你的应用程序,而用户没有完全启动它,然后地区监控需要通知你的应用程序,这种情况就不会发生。这意味着,区域监控有时会提醒你的应用程序,有时不会。如果你的应用程序是冷的,它就会起作用。如果你的应用程序在内存中,它就会起作用。如果你的应用处于这种预热状态,你就死定了。

我从苹果得到的消息是,这实际上是多个错误,一些已经修复,一些还没有修复。IOS 15.2测试版中的注释也特别提到这可能也会影响HealthKit。

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

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

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);
    }
}

这篇关于在iOS 15中,后台区域(圆形和信标)检测有时会失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆