2017-04-03 69 views
0

我必须在iOS中使用Swift 3制作应用程序,每隔3或5分钟通过API发送用户位置,而应用程序则是背景。我不知道哪个是最好的方法,或者是因为苹果严格的背景规则,甚至有可能。该位置必须非常精确,应用程序需要长时间运行,可能不会消耗太多电量。 如果不可能,在这种情况下知道哪种方法最好。非常感谢你。在iOS中使用背景位置更新的最佳方式(Swift)

+0

您可以获取有关后台任务的一些信息,并实现位置管理器,但它是在Objective-C。可能对你有用。 http://stackoverflow.com/questions/21440190/ios-startmonitoringsignificantlocationchanges-sometimes-breaks-monitoring – Aashish1aug

回答

11

是通过API将用户的位置,每隔3分钟或5分钟,而 应用被转到后台

并没有太大的意义。如果用户在同一位置站立5分钟会怎么样?您会多次在服务器上输入相同的位置信息?如果您可以在用户的​​位置更改后用用户位置更新您的服务器,是不是更好,而不是更新位置?

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

我不知道这是做到这一点的最好办法,或者如果它甚至 可能的,因为苹果的严格背景规则

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

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

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

它很简单。位置更新功能与成本相关,如果您的应用在后台准确观察用户位置更新,则会耗尽设备电池。因为它的代价很大,所以苹果希望你只有在你的应用程序需要时才使用它。例如:如果您正在制作一个地图应用程序或应用程序,用于跟踪用户的位置变化,然后在地图上绘制地图或其他内容,并让用户了解他的移动情况(如正在运行的应用程序),那么使用它绝对可以使用位置更新功能,因为您正在为用户增加价值。

如果你试图思考令人毛骨悚然!并尝试使用位置更新只是为了让您的应用程序保持活跃状态​​,并且在后台应用程序中执行与位置更新无关的任何操作都会拒绝您的应用程序。就像少数开发人员试图超过智能并使用位置更新来保持其应用与服务器同步或定期上传/下载文件或类似与位置更新无关的内容一样,苹果将拒绝此类应用。

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

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

如何做到这一点?

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

locationManager.startMonitoringSignificantLocationChanges() 

这将触发您的位置代表时,才会有一个显著的位置变化:)

在另一方面,如果你的应用程序实际上是利用用户的位置和使用

startLocationUpdates() 

确保您不消耗不必要的位置更新。确保你根据你的应用需求正确放置距离过滤器。不贪和不必要的浪费不iOS的资源和苹果将很乐意,也不会麻烦你:)

结论:

如果您的应用程序实际上是利用位置,并增加了一些价值,以用户(如地图应用程序/正在运行的应用程序/旅行应用程序),然后使用startLocationUpdates并正确使用距离过滤器(可选,但很好)。

如果您正在令人毛骨悚然始终使用startMonitoringSignificantLocationChanges其他应用必然要遭到拒绝

+0

非常感谢您的回答。事实上,我的雇主告诉我要每X分钟监控一次,但如你所说,这不是一个好的选择。我会尽力按照你说的说服他:) –

+0

@ luigi-piccoli:列梅以简单的话结束。如果您的应用程序实际上使用了位置并为用户添加了一些值(如地图应用程序),那么请使用startLocationUpdates并正确使用距离过滤器(可选,但很好)。如果你是令人毛骨悚然,总是使用startMonitoringSignificantLocationChanges,否则应用程序将被拒绝。希望清楚:)。定期监控用户位置不是一种选择,因为即使您选择了后台位置更新功能,也无法保证每分钟触发一次,如果用户将他的手机放在桌面上并始终不移动,该怎么办? –

+0

这就是为什么苹果提供了委托模式: ) –