2014-02-21 54 views
2

我正在开发应用程序,允许用户拍摄最初保存在设备中的图像和视频。只要设备连接到网络(移动数据或无线网络),就需要将这些设备上载到服务器。使用NSURLSession进行网络连接与背景上传

现在如果我使用NSURLSessionUploadTask,数据也会在后台上传,但是如果没有网络,我会在-didCompleteWithError:委托处收到回调,现在任务结束。现在,如何在设备连接网络时恢复任务。

我想做一些检查可达性和设备是否可访问开始上传任务。

我能想到的一种方法是使用Background Fetch来检测连接和时间表上传任务。

这将是一个企业应用程序,所以不需要批准。

以下是代码

NSURLSessionConfiguration *config = [NSURLSessionConfiguration   
backgroundSessionConfiguration:@"background" ]; 

NSURLSession *upLoadSession = [NSURLSession sessionWithConfiguration:config delegate:self  
delegateQueue:[NSOperationQueue mainQueue]]; 
NSURL *url = [NSURL URLWithString:@"http://www.t9l.com/rest/test/httprawdata"];  
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; 
[request setHTTPMethod:@"POST"]; 
NSString* [email protected]"nitin=asd"; 
[request setHTTPBody:[str dataUsingEncoding:NSUTF8StringEncoding]]; 

self.uploadTask = [upLoadSession uploadTaskWithRequest:request fromFile:filePath] ; 

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; 

[self.uploadTask resume]; 
+0

当你失去网络时,你确定会得到'-didCompleteWithError:'吗?你能发布你得到的东西吗(例如'NSLog(@“error%@”,error);')? –

+0

@ClayBridges对不起,回复迟了。我已经添加了我的代码来创建上传任务。但是这个委托永远不会收到回调 - (void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session – awasthinitin10

回答

0

你的后台上传应该通过网络片状工作。如果您在-didCompleteWithError:中发现其中一个上传的错误状态,则可以再次对同一上传进行排队。当你这样做时,如果你在网络上并不重要,操作系统应该在可以/想要的时候处理上传。

背景取来的时候谈到,虽然插入的和-WiFi的好踢附加赛。当获取回调发生时,你肯定会有一些连接。您应该能够在获取回调期间对后台上传任务进行排队。

你也可以注册了“精简版”的版本背景地理界线的,只要检测到新的网络或手机信号塔的开关,从而将后台通知您。参看-[CLLocationManager startMonitoringSignificantLocationChanges]