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

时间:2017-06-30 00:45:56

标签: android ios geolocation background-process phonegap

我正在尝试创建一个应用程序,当有人请求时,它会响应群组中人员的位置 - 类似于“发现我的朋友”(FMF)所做的但是在Android和iOS上我正在使用Phonegap。我一直在研究FMF应用程序如何返回位置 - 按照SO Post的方式,并且我试图更好地理解它。

在某些时候,由于内存压力,iOS将终止应用程序。我知道如果您将XCode的功能部分中的后台模式设置为位置,如果位置发生重大变化,应用程序将在后台重新启动。这就是FMF应用程序正在做的事情,以确保它能够响应位置请求吗?

当请求位置时,我发送推送通知(仅限数据通知,以便在后台处理 - 用户不会看到它),如果应用程序位于Background / Foreground中,则应该响应。但是在iOS的情况下,如果应用程序已被iOS终止并且没有显着的位置更改,则应用程序将无法启动并在后台运行并且无法响应。除了某种方式阻止iOS暂停/终止应用程序之外,这是我们能做的最好的吗?欣赏任何见解。

我已经阅读了有关创建后台服务的帮助,但这似乎更适用于Android而不是iOS。

感谢您提供任何指导和指导。

桑杰。

1 个答案:

答案 0 :(得分:0)

首先,你要Declaring Your App’s Supported Background Tasks

必须由使用它们的应用程序事先声明对某些类型的后台执行的支持。在Xcode 5及更高版本中,您可以从项目设置的“功能”选项卡声明应用程序支持的背景模式。启用“后台模式”选项会将UIBackgroundModes键添加到应用程序的Info.plist文件中。选择一个或多个复选框可将相应的背景模式值添加到该键。

然后Tracking the User’s Location并缓存最新位置。

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

当您想要获得某人的位置时,服务器会通过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;
    });
}

希望能帮到你〜