iOS7后台获取?

巴拉特

在我的应用程序中,我想使用iOS 7后台获取功能向服务器发送一些数据。我还选择了target功能部分中的后台获取复选框(当然,plist中会自动添加一个标志)。

在AppDelegate中,我这样做:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
    //[application setMinimumBackgroundFetchInterval:10]; also tried this
    return YES;
}

然后在委托方法中,我这样做:

-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{

        LocationManager = [[CLLocationManager alloc] init];

        LocationManager.delegate = self;
        LocationManager.desiredAccuracy = kCLLocationAccuracyBest;
        LocationManager.distanceFilter = 50.0;
        [LocationManager startUpdatingLocation];

        /** NEW DATA EXISTS AND WAS SUCCESSFULLY PROCESSED **/
        if (YES) {

             completionHandler(UIBackgroundFetchResultNewData);
        }
        else
             completionHandler(UIBackgroundFetchResultFailed);
 }

然后,我将iPhone连接到XCode并运行该应用程序,然后从调试菜单中单击“模拟后台提取”。调用了委托方法,并且一次更新了服务器上的位置,但此操作再也没有发生,系统也从未在后台唤醒应用程序。我做错了什么?任何帮助,将不胜感激。

编辑:是否可以使用后台获取在服务器上发送数据?Edit-2如果我改为使用远程通知,而是通过后台获取在服务器上发送数据,那么在这种情况下,是否可以保证一旦收到远程通知,系统将唤醒我的应用程序?

nikhil84

简单的答案是,对performFetchWithCompletionHandler方法的调用取决于设备的iOS调用时间。我很久以前也遇到过同样的问题,发现它也可以在几分钟,几小时或一天或一周内被调用。同样,UIApplicationBackgroundFetchIntervalMinimum **并不意味着它将在最短的时间内调用它,它可能永远不会或不会最小,最终将取决于OS来调用preformFetch方法。因此,最后您可以等待OS调用performFetchWithCompletionHandler方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章