每 3 或 5 分钟通过 API 发送用户的位置,而
应用程序是后台的
没有多大意义。如果用户在同一位置站立 5 分钟会怎样?你会在你的服务器中多次输入相同的位置吗?如果您可以在用户位置更改后使用用户位置更新您的服务器,而不是在特定时间间隔更新位置,这不是更好吗??
所以使用 locationManager,设置它的委托,并在用户位置发生变化时开始通过 API 更新您的服务器,而不是定期更新。
我不知道这是最好的方法,或者甚至
可能是因为 Apple 严格的后台规则
绝对有可能。您所要做的就是在 Xcode 中选择Location Updates 功能。
现在最好的方法是什么?它是一个相对术语。这取决于您的应用将如何使用用户的位置信息。如果您不必要地开始观察用户的位置,您将不必要地耗尽用户的 iPhone 电池,因此苹果会拒绝您的应用。
苹果进程的应用如何使用位置更新能力?
它非常简单。位置更新功能伴随着成本,如果您的应用程序在后台准确地观察到用户位置更新,它将耗尽设备电池。因为这是一个代价高昂的权衡,苹果希望您仅在您的应用程序需要时才使用它。
例如:如果您正在制作地图应用程序或跟踪用户位置变化的应用程序,然后在地图或其他东西上绘图并让用户知道他的移动(如运行应用程序),那么使用位置绝对没问题更新功能,因为您正在为用户增加价值。
如果你想着令人毛骨悚然!并尝试使用位置更新只是为了让您的应用程序保持活力,并且在后台应用程序中做一些与位置更新完全无关的事情将拒绝您的应用程序。就像很少有开发者试图过分聪明并使用位置更新来保持他们的应用程序与服务器同步或定期上传/下载文件或类似与位置更新无关的东西一样,苹果将拒绝此类应用程序。
所以没有办法让人毛骨悚然?并使用位置更新来做一些与位置本身无关的有用的事情?
是的,你可以。苹果足够慷慨,允许这样做。例如:当您从一个位置移动到另一个位置时,Dropbox 会在后台上传您的图像。它所做的只是寻找用户位置变化,一旦位置变化委托触发器,创建一个带有后台会话的上传任务并开始上传文件。
怎么做?
您仍然可以使用位置管理器。你所要做的就是使用
locationManager.startMonitoringSignificantLocationChanges()
这将仅在位置发生重大变化时触发您的位置委托:)
另一方面,如果您的应用实际上利用了用户位置并使用
startLocationUpdates()
确保您不会不必要地使用位置更新。确保根据您的应用要求正确放置距离过滤器。不要贪婪,不要不必要地浪费iOS资源,苹果会很高兴,不会给你带来麻烦:)
结论:
如果您的应用实际上利用了位置信息并为用户增加了一些价值(例如地图应用/运行应用/旅行应用),那么请使用 startLocationUpdates 并正确使用距离过滤器(可选,但拥有它很好)。
如果您感到毛骨悚然,请始终使用 startMonitoringSignificantLocationChanges 否则应用程序一定会被拒绝