我正在尝试创建一个应用程序,当有人请求时,它会响应群组中人员的位置 - 类似于“发现我的朋友”(FMF)所做的但是在Android和iOS上我正在使用Phonegap。我一直在研究FMF应用程序如何返回位置 - 按照SO Post的方式,并且我试图更好地理解它。
在某些时候,由于内存压力,iOS将终止应用程序。我知道如果您将XCode的功能部分中的后台模式设置为位置,如果位置发生重大变化,应用程序将在后台重新启动。这就是FMF应用程序正在做的事情,以确保它能够响应位置请求吗?
当请求位置时,我发送推送通知(仅限数据通知,以便在后台处理 - 用户不会看到它),如果应用程序位于Background / Foreground中,则应该响应。但是在iOS的情况下,如果应用程序已被iOS终止并且没有显着的位置更改,则应用程序将无法启动并在后台运行并且无法响应。除了某种方式阻止iOS暂停/终止应用程序之外,这是我们能做的最好的吗?欣赏任何见解。
我已经阅读了有关创建后台服务的帮助,但这似乎更适用于Android而不是iOS。
感谢您提供任何指导和指导。
桑杰。
答案 0 :(得分:0)
必须由使用它们的应用程序事先声明对某些类型的后台执行的支持。在Xcode 5及更高版本中,您可以从项目设置的“功能”选项卡声明应用程序支持的背景模式。启用“后台模式”选项会将UIBackgroundModes键添加到应用程序的Info.plist文件中。选择一个或多个复选框可将相应的背景模式值添加到该键。
当您想要获得某人的位置时,服务器会通过APNS向客户端发送远程通知,而客户端使用application:didReceiveRemoteNotification:fetchCompletionHandler:
或定时在后台上传有限长任务的位置:
- (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;
});
}
希望能帮到你〜