iOS 区域监控重用项目问题
Posted
技术标签:
【中文标题】iOS 区域监控重用项目问题【英文标题】:iOS Region Monitoring on reused project issue 【发布时间】:2013-10-31 02:19:43 【问题描述】:我有一个项目,我在使用区域监控时取得了不同程度的成功,大部分情况下它都有效,但没有我希望的那么准确,但很快发现它不应该是完全准确的,这很好,只是物理测试它很困难。然而,他们希望在一天内完成一个完整的用户界面整体大厅。所以这就是我所做的。
我采用了旧项目,复制并重命名了它,捆绑 ID 和所有我认为需要它的地方,以使其本质上成为一个不同的项目。然后我创建了一个故事板,因为我之前使用的是 xib 文件。然后更改启动程序,使其使用情节提要而不是预先存在的 xib 文件。一切都很好。拥有新的界面和基本相同的代码。
问题...
区域永远不会触发......永远,即使位置服务正在工作,因为我使用位置服务来告诉我我是否在一个半径范围内,但栅栏回调 API 永远不会关闭。然后我在多个设备上对其进行了测试。最后其中一个触发了......但是低并且看它是旧应用程序,它触发栅栏没问题。而新的没有。我什至无法理解我做错了什么会导致这种情况。我什至使用 api 确实失败并成功了方法,它说围栏注册没有问题。
另一个令人烦恼的问题是,如果我使用 GPX 文件来模拟位置,栅栏会在代码中触发......我必须说令人沮丧的事情。
有什么建议吗?如果需要,将提供代码示例。
【问题讨论】:
所以 gpx 文件确实触发了栅栏,但在真实设备上不是你的意思吗? 正确。这让我假设区域监控正在工作,但在现场测试中它的表现相当糟糕。 CLCircularRegion 使用的半径是多少?您是否在应用处于前台时对其进行测试? 前景和背景,区域范围为 20m - 1000m,正如我之前所说,它们昨天在旧应用程序上触发没问题,但新应用程序......没有骰子。我也在使用 CLRegion.not CLcircular 区域,我在 ios 7 之前的版本上进行测试,这会导致 iOS 7 手机出现问题吗? 这里要明确一点,旧应用程序和新应用程序都在iOS7之前的设备上进行测试对吗? 【参考方案1】:好的,考虑到 QA 细节,我可以想到一些事情:
1- 确保在复制项目时,您还正确复制了 .plist,并且已启用后台模式下的“位置更新”。
2- 当我测试 didEnterRegion 和 didExitRegion 时,我发现开车或步行并不总是准确的。在调查之后,我发现区域监控有一个算法可以“确保”你在触发 didEnterRegion 和 didExitRegion 之前实际上已经越过了区域的边界。因此,如果您的半径为 100 米,并且您从中心向一个方向步行 101 米并假设它会触发 didExitRegion,那么它可能不会发生。您有时必须步行或行驶另外 x 米才能启动它,对于 didEnterRegion 也是如此。我在这里的建议是确保您始终大大超出代码中的半径范围。
现在这变得更加复杂,如果您在该区域内并且您越过 100 米并返回。您可能不会得到触发,因为您从未越过(从区域监控的角度来看)首先要穿越回来!
这不是 GPX 的问题,因为您正在强制划线(退出该区域),因此您不允许设备应用其算法来安全地确保您已划线。
3- 确保实现:
-(void) locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region
在启动时放置一些 NSLog 来确定状态。这应该有助于集中问题,并且应该立即触发让您知道您是否在该地区或我们在该地区之外(即使没有过境)。如果这不触发,就会有更大的问题。
4- 最后,CLRegion 在 iOS7 中已被弃用。您需要使用 CLCircularRegion。并使用方法启动区域:
initWithCenter:(CLLocationCoordinate2D)center radius:(CLLocationDistance)radius identifier:(NSString *)identifier
希望这会有所帮助。
【讨论】:
感谢您的回复,我设法让它与以下内容一起工作。 -- 重新安装了 cocoapods 和所有使用的 pods -- 停止了位置更新、标题和重大变化。同样在 ios7 上,您必须确保启用应用程序后台刷新,否则地理围栏将不起作用。奇怪的是,我仍在使用 CLRegion。以上是关于iOS 区域监控重用项目问题的主要内容,如果未能解决你的问题,请参考以下文章