一尘不染

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

swift

我必须使用Swift
3在iOS中制作一个应用程序,该应用程序在后台运行时每3或5分钟通过API发送一次用户的位置信息。我不知道哪种方法是最好的方法,或者由于苹果严格的背景规定,是否有可能这样做。该位置必须非常精确,并且该应用需要在背景下长时间运行,可能不会消耗太多电池。如果不可能,那么很高兴知道在这种情况下哪种方法最好。非常感谢你。


阅读 425

收藏
2020-07-07

共1个答案

一尘不染

该应用程序在后台运行时每3或5分钟通过API发送一次用户的位置信息

没有多大意义。如果用户在同一位置站立5分钟该怎么办?您将在服务器中多次输入相同的位置信息?如果您可以在用户位置更改后使用用户位置来更新服务器,那么最好不按固定的时间间隔更新位置呢?

因此,请使用locationManager,设置其委托,并在用户位置更改时而不是按固定的时间间隔开始通过API更新服务器。

我不知道哪种方法是最好的方法,或者由于苹果严格的背景规定,是否有可能

这绝对有可能。您要做的就是选择Location UpdatesXcode的功能。

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

苹果流程的应用程序如何使用位置更新功能?

非常简单。位置更新功能会带来成本,如果您的应用在后台准确地观察到用户位置更新,则会耗尽设备电池的电量。由于这是一项代价高昂的折衷方案,因此Apple希望您仅在应用程序需要它时才使用它。

例如:如果您要制作一个地图应用程序或一个跟踪用户位置变化的应用程序,然后再在地图上绘制图形或其他内容,并让用户知道他的动作(例如正在运行的应用程序),那么绝对可以使用位置更新功能,因为您正在为用户增加价值。

如果您认为令人毛骨悚然!并尝试使用位置更新只是为了使您的应用程序保持生命,并且在后台应用程序中做一些与位置更新完全无关的操作将拒绝您的应用程序。就像极少数开发人员试图变得过分聪明并使用位置更新来使其应用程序与服务器保持同步或以固定间隔上载/下载文件或类似与位置更新无关的方式一样,Apple会拒绝此类应用程序。

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

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

怎么做?

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

locationManager.startMonitoringSignificantLocationChanges()

仅当位置发生重大变化时,这才会触发您的位置代表:

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

startLocationUpdates()

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

结论:

如果您的应用程序确实利用了位置并为用户(例如地图应用程序/运行中的应用程序/旅行应用程序)增加了一些价值,那么请使用startLocationUpdates并正确使用距离过滤器(可选,但很高兴使用)。

如果您感到毛骨悚然,请始终使用startMonitoringSignificantLocationChanges,否则应用必定会被拒绝

2020-07-07