如何获取和发送位置(即使应用程序被终止或暂停)到服务器

时间:2016-04-26 05:49:03

标签: ios core-location

我需要获取并发送位置到服务器,即使应用程序终止,我找到解决方案如何获取位置,但我如何将其发送到服务器 - 我找不到。我想我可以发送它与后台任务,但它如何一起工作,我无法想象,我尝试使用此代码indidFinishLaunchingWithOptions:

if ([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey]) {
        // This "afterResume" flag is just to show that he receiving location updates
        // are actually from the key "UIApplicationLaunchOptionsLocationKey"

        self.shareModel.afterResume = YES;

        [self.shareModel startMonitoringLocation];
        [self.shareModel addResumeLocationToPList];


        UIApplication *application = [UIApplication sharedApplication];
        __block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
            [application endBackgroundTask:bgTask];
            bgTask = UIBackgroundTaskInvalid;
        }];
        NSOperationQueue *queue = [[NSOperationQueue alloc] init];
        NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://google.com"]];
        [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
            NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            [[NSUserDefaults standardUserDefaults] setObject:str forKey:@"DOWNLOADTASK"];
            [application endBackgroundTask:bgTask];
            bgTask = UIBackgroundTaskInvalid;

        }];



    }

但是我用这个键打印NSUserDefaults是空的,我做错了,可能是我使用了错误的后台任务?

How to Get Location Updates for iOS 7 and 8 Even when the App is Suspended

https://github.com/voyage11/GettingLocationWhenSuspended

iOS 9 how get locations even if app terminated

2 个答案:

答案 0 :(得分:0)

根据文件中关于背景描述的苹果,任何应用后台任务执行时间为10分钟.10分钟后,应用程序将被iOS挂断。 但是有五种类型的应用程序允许“无限制”的后台运行时间。

  1. 音频。

  2. 位置/ GPS。

  3. 的VoIP。

  4. 报亭。

  5. Exernal Accessory。

  6. 您可以为上述五种类型获取任何应用声明,以获得无限时间的背景,但是当您将应用提交到应用商店时,Apple会在您发现“滥用”后端后审核您的应用API,您的应用将被拒绝。 但是,在企业开发的情况下,没有“滥用”问题 - 企业应用程序可以通过OTA部署,而不是通过苹果商店审查。 在企业部署中,你可以成为VoIP应用程序的声明,但程序根本与VoIP无关,我们只为iOS的目的给我们无限的后台执行权限。声明过程是在app Info中。要添加以下密钥的文件: 在文件的第一位,所需的后台模式添加以下两个:在App播放音频或流音频/视频使用AirPlay和App提供IP语音服务。 UIBackgroundModes

    VOIP

    我测试了以下代码:

    - (void)backgroundHandler {
        NSLog(@"### -->backgroundinghandler");
        UIApplication*    app = [UIApplicationsharedApplication];
        bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
            [app endBackgroundTask:bgTask];
            bgTask = UIBackgroundTaskInvalid;
        }];
     }
    

    通过测试,我收到了“无限”的背景执行时间。我不知道你认为“无限”多久,但在这种情况下,后台任务要运行至少55个小时,直到我失去耐心停止测试。 我的英文很差,这个博客被重印了!

答案 1 :(得分:0)

根据Apple的指南,您无法在暂停或终止状态下执行任何任务。您可以在后台状态下获取位置更新,但在终止或暂停应用时无法执行此操作。请参阅此linkthis tutorial以获取后台位置信息。希望这会有所帮助:)