在后台模式iOS中实现更新位置到服务器

时间:2015-06-10 06:14:56

标签: ios

我想做的是:

定期(每10分钟)将iOS设备的当前位置更新到我的服务器,甚至我的应用程序都处于后台模式。

我做了什么:

  1. 在plist中添加Required Background Modes;并询问了askAlwaysAuthorization。

  2. 在设置中设置此应用程序的背景刷新。

  3. 设置NSTimer以定期获取位置(使用CLLocationManager)。

  4. locationManager: didUpdateLocations:委托调用时,更新位置使用HTTPGET到服务器。 我的问题: 当App在前台时它工作正常,但更新位置方法不在后台运行,服务器无法接收我的位置数据。

  5. 谢谢。

2 个答案:

答案 0 :(得分:1)

请检查您是否在项目设置的背景模式中启用了位置 - >目标 - >能力。

enter image description here

我建议您使用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