【问题标题】:How to get and send location(even if application is terminated or suspended) to server如何获取和发送位置(即使应用程序被终止或挂起)到服务器
【发布时间】:2016-08-19 18:27:37
【问题描述】:

即使应用程序终止,我也需要获取位置并将其发送到服务器,我找到了如何获取位置的解决方案,但是我如何将其发送到服务器 - 我找不到。我想我可以将它与后台任务一起发送,但它是如何一起工作的,我无法想象,我尝试使用这段代码 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

【问题讨论】:

  • 在后台方法中试试这段代码

标签: ios core-location


【解决方案1】:

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

  1. 音频。

  2. 位置/GPS。

  3. VoIP。

  4. 报摊。

  5. 外接配件。

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

网络电话

我测试了以下代码:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-12-21
      • 1970-01-01
      • 2022-01-19
      • 2016-04-04
      • 1970-01-01
      • 2022-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多