【发布时间】:2014-03-07 23:58:12
【问题描述】:
我正在开发一个应用程序,该应用程序会在用户进入或离开时通知用户预定义的位置。一个位置的跨度可以低至 50 米,因此它需要相当准确和规则。位置更新当前被发送到服务器,服务器确定用户是否在位置区域内并相应地发送通知。
我们的问题是iOS 7 更改位置暂停已经成为一个主要问题。该应用程序仍处于打开状态(在应用程序切换器中),但 15 分钟后在重新打开该应用程序之前不会再收到位置更新。但是需要通知用户他们输入的所有未来位置。使用“setPausesLocationUpdatesAutomatically”方法禁用暂停会导致 GPS 不断启用,无论定义的活动类型如何。
我很确定我几乎用尽了所有可用的方法来满足所有要求。在 iOS 7 之前,我们的应用运行良好。电池寿命是可以接受的(我知道它永远不会是完美的),在每日充电周期中,但我们需要对其进行一些改进。
以下是我们目前解决方案的简要介绍:
- 保留位置的本地副本并使用 CLLocationManager 区域注册它们。不幸的是,我们发现这种方法的准确性非常差,并且进入/退出方法被调用太晚而无法使用
- 自定义位置模型;最初使用重要的位置更新,当用户移动 x 米时切换到标准位置更新。但重要的位置更新仅每 500 米和每 5 分钟提供一次
- 与上述类似,除了使用加速度计启用基于多个步骤的位置更新。但加速度计数据在后台状态下不可用
- 从有限运行的后台任务中每 3 分钟打开一次位置更新 - 这可行,但我不确定无论其他情况如何,每 3 分钟一次是否会过多地影响电池寿命
- 另一个想法是依靠 Passbook 发送通知,虽然没有经过测试。根据经验,它更可靠。当然,这是一个相当大的变化,我们还没有测试过。
在准确性和可靠性方面,我们正在努力实现的一个经典示例是 Moves。我经常使用它,它始终处于活动状态,并且电池寿命可以持续一整天。
基本上我是在问是否有人使用过我提到的任何解决方案或有任何其他可行的解决方案或配置?
我非常希望有人能影响我现有的解决方案之一,甚至提供一个新的、可行的解决方案,因为我不确定还有很多其他事情可以做。
非常感谢任何阅读本文的人。
【问题讨论】:
标签: iphone objective-c ios7 location cllocationmanager