在iOS中使用后台位置更新的最佳方式(Swift)

Lui*_*oli 2 location background ios swift swift3

我必须使用Swift 3在iOS中创建一个应用程序,该应用程序每3或5分钟通过API发送用户的位置,而应用程序是后台运行的.我不知道哪种方法最好,或者因为Apple严格的背景规则,甚至可能.位置必须非常精确,应用程序需要长时间运行,可能不会消耗太多电池.如果不可能,那么在这种情况下知道哪种方法最好是很好的.非常感谢你.

San*_*ari 11

每3或5分钟通过API发送用户的位置,同时应用程序背景

没有多大意义.如果用户站在同一位置5分钟怎么办?您将多次在服务器中输入相同的位置?如果您可以在用户位置发生变化后使用用户位置更新服务器,那么不是更好而不是在某个时间间隔更新位置吗?

因此,使用locationManager,设置其代理并在用户位置更改时开始通过API更新服务器,而不是定期更新.

我不知道哪种方法最好,或者因为Apple严格的背景规则,甚至可能

绝对可能.您所要做的就是Location Updates在Xcode中选择功能.

现在最好的方式是什么?它是一个相对的术语.这取决于您的应用将如何使用用户位置信息.如果您不必要地开始观察用户位置,您将不必要地耗尽用户iPhone电池,因此苹果将拒绝您的应用程序.

apple process的app如何使用位置更新功能?

它非常简单.位置更新功能带有成本,如果您的应用程序在后台准确地观察用户位置更新,它将耗尽设备电池.因为它是一个代价高昂的折衷,苹果希望你只有在你的应用程序必要时才使用它.

例如:如果您正在创建地图应用程序或跟踪用户位置更改的应用程序,然后在地图或其他内容上绘制并让用户了解他的移动(如运行应用程序),那么使用位置更新功能绝对可以,因为您正在为用户增加价值.

如果你想让人觉得毛骨悚然!并尝试使用位置更新只是为了让你的应用程序保持活力,做一些完全与后台应用程序中的位置更新无关的事情将拒绝你的应用程序.就像很少有开发人员尝试过智能并使用位置更新来保持他们的应用程序与服务器同步或定期上传/下载文件或类似于与位置更新无关的东西,苹果将拒绝此类应用程序.

所以没有办法令人毛骨悚然?并使用位置更新来做一些与位置本身无关的有用的东西?

是的你可以.Apple慷慨地允许这样做.例如:当您从一个位置移动到另一个位置时,Dropbox会在后台上传您的图像.它所做的只是,它查找用户位置更改,一旦位置更改委托触发器,创建具有后台会话的上载任务并开始上载文件.

怎么做?

您仍然可以使用位置管理器.你所要做的就是使用

locationManager.startMonitoringSignificantLocationChanges()
Run Code Online (Sandbox Code Playgroud)

这将仅在位置发生重大变化时触发您的位置代理:)

另一方面,如果您的应用实际上使用了用户位置并使用

startLocationUpdates()
Run Code Online (Sandbox Code Playgroud)

确保您不必要地消耗位置更新.确保根据应用程序要求正确放置距离过滤器.不要贪婪,不要浪费不必要的iOS资源,苹果会很高兴,不会给你带来麻烦:)

结论:

如果您的应用实际上使用了位置并为用户添加了一些价值(例如地图应用/运行应用/旅行应用),那么只需使用startLocationUpdates并正确使用距离过滤器(可选,但很好).

如果你令人毛骨悚然总是使用startMonitoringSignificantLocationChanges其他app必然会被拒绝