我正在构建一个位置跟踪应用程序,它将本地用户位置存储并每隔x秒将它们发送到服务器。在后台运行时每x秒重复执行一次任务
虽然应用程序在前台,但我可以使用NSTimer安排服务器更新任务,但是当应用程序在后台运行时,这是不可能的。
即使应用程序在后台模式下运行,我如何每x秒重复一次任务?
我正在构建一个位置跟踪应用程序,它将本地用户位置存储并每隔x秒将它们发送到服务器。在后台运行时每x秒重复执行一次任务
虽然应用程序在前台,但我可以使用NSTimer安排服务器更新任务,但是当应用程序在后台运行时,这是不可能的。
即使应用程序在后台模式下运行,我如何每x秒重复一次任务?
您不应该使用NSTimer
。您应该使用CLLocationManager
提供的功能。
使用CLLocationManager
时,您可以将属性allowsBackgroundLocationUpdates
设置为YES
。然后您需要将Info.plist中的UIBackgroundModes
密钥设置为YES
以获得location
值。
现在您将能够接收用户位置的后台更新。
startMonitoringSignificantLocationChanges
应该继续在后台调用。
几个警告与背景的东西的话。 Apple在提交应用程序时非常重视这一点。如果他们认为不需要后台更新,他们会拒绝。同样,如果你在后台做的不是非常基本的东西,他们会拒绝它。
所以如果你想将用户的背景位置同步到服务器,我不会在后台执行此操作。相反,我会将用户的背景位置存储在NSUserDefaults
或核心数据或其他内容中,然后当应用程序再次变为活动状态时,使用背景位置执行服务器同步。
您可能更好地注册后台的重大位置更改,这意味着当用户位置发生显着变化时,您的应用程序将有少量时间来处理/发送它。
这可以使用apple docs轻松完成。
不,除非你欺骗iOS。 – zcui93