在我的应用程序中,我想使用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如果我改为使用远程通知,而是通过后台获取在服务器上发送数据,那么在这种情况下,是否可以保证一旦收到远程通知,系统将唤醒我的应用程序?
简单的答案是,对performFetchWithCompletionHandler方法的调用取决于设备的iOS调用时间。我很久以前也遇到过同样的问题,发现它也可以在几分钟,几小时或一天或一周内被调用。同样,UIApplicationBackgroundFetchIntervalMinimum **并不意味着它将在最短的时间内调用它,它可能永远不会或不会最小,最终将取决于OS来调用preformFetch方法。因此,最后您可以等待OS调用performFetchWithCompletionHandler方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句