我想做的是:
定期(每10分钟)将iOS设备的当前位置更新到我的服务器,甚至我的应用程序都处于后台模式。
我做了什么:
在plist中添加Required Background Modes
;并询问了askAlwaysAuthorization。
在设置中设置此应用程序的背景刷新。
设置NSTimer以定期获取位置(使用CLLocationManager
)。
当locationManager: didUpdateLocations:
委托调用时,更新位置使用HTTPGET到服务器。
我的问题:
当App在前台时它工作正常,但更新位置方法不在后台运行,服务器无法接收我的位置数据。
谢谢。
答案 0 :(得分:1)
请检查您是否在项目设置的背景模式中启用了位置 - >目标 - >能力。
我建议您使用startMonitoringVisits()和locationManager(_:didVisit :)委托来获取用户位置,而不是每隔10分钟向服务器发送一次位置。因为你的方法会过多的电池杀手。
答案 1 :(得分:1)
您必须使用以下代码注册后台任务,然后您的任务完成后必须结束后台任务
- (void)applicationDidEnterBackground:(UIApplication *)application
{
bgTask = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^{
// Clean up any unfinished task business by marking where you
// stopped or ending the task outright.
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
// Start the long-running task and return immediately.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Do the work associated with the task, preferably in chunks.
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
});
}
了解更多信息:apple document