在iOS 15中,后台区域(圆形和信标)检测有时会失败 [英] Region(Circular and Beacon) detection in background sometimes fails in iOS 15
本文介绍了在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屋!
查看全文