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

时间:2017-04-03 10:57:22

标签: ios swift swift3 background location

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

1 个答案:

答案 0 :(得分:10)

  每隔3或5分钟通过API发送用户位置的

  应用程序背景

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

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

  

我不知道哪个是最好的方法,或者它是否均匀   可能是因为Apple的严格背景规则

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

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

Apple流程的应用如何使用位置更新功能?

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

例如:如果您正在创建一个地图应用程序或一个跟踪用户位置更改的应用程序,然后在地图上绘制某些内容并让用户知道他的移动(如运行应用程序),那么使用位置绝对可以更新功能,因为您正在为用户添加值。

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

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

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

怎么做?

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

locationManager.startMonitoringSignificantLocationChanges()

仅当位置发生重大变化时才会触发您的位置代理:)

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

startLocationUpdates()

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

<强>结论:

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

如果你感到毛骨悚然总是使用startMonitoringSignificantLocationChanges其他应用必然会被拒绝