“查找我的朋友”(FMF)应用程序如何响应位置?

我试图创build一个应用程序,当有人请求时,会响应组中的人员位置 – 类似于查找我的朋友(FMF),但在Android和iOS上,我正在使用Phonegap。 我一直在研究FMF应用程序如何返回位置 – 沿着这个SO Post的线路,我试图更好地理解。

在某些时候,由于内存压力,iOS会终止应用程序。 我明白,如果您将XCodefunction部分中的背景模式设置为位置,并且位置发生了重大变化,则应用程序将在后台重新启动。 FMF应用程序正在做什么来确保它保持响应位置请求?

当请求位置时,我发送一个推送通知(数据通知,所以它在后台处理 – 用户不会看到它),如果应用程序在后台/前台应用程序预计将响应。 但是,如果iOS的应用程序已被iOS终止,并且没有重大的位置更改,则应用程序将无法在后台运行并且不会响应。 除了以某种方式防止iOS挂起/终止应用程序,这是我们能做的最好的吗? 欣赏任何见解。

我已经阅读了关于创build后台服务来帮助,但似乎更适用于Android比iOS。

感谢您的指导和指点。

桑杰。

首先,你应该声明你的应用程序支持的后台任务 。

支持某些types的后台执行必须由使用它们的应用程序预先声明。 在Xcode 5及更高版本中,您可以从项目设置的function选项卡声明您的应用程序支持的背景模式。 启用背景模式选项将UIBackgroundModes键添加到您的应用的Info.plist文件。 select一个或多个checkbox将相应的背景模式值添加到该键。

然后跟踪用户的位置并caching最新的位置。

并处理您的远程通知上传最新的位置。

当你想得到某人的位置时,服务器用APNS向客户端推送远程通知,客户端用application:didReceiveRemoteNotification:fetchCompletionHandler:处理远程通知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; }); } 

希望能帮到你〜