使用NSURLSession进行网络连接与后台上传

时间:2014-02-21 22:38:55

标签: ios background-process enterprise nsurlsession

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

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

我想做一些检查可达性,如果设备可以访问,则开始上传任务。

我能想到的一种方法是使用后台提取来检测连接并安排上传任务。

这将是一个企业应用程序,因此无需批准。

以下是代码

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* str=@"nitin=asd";
[request setHTTPBody:[str dataUsingEncoding:NSUTF8StringEncoding]];

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

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];

[self.uploadTask resume];

1 个答案:

答案 0 :(得分:0)

您的后台上传应该适用于网络薄弱环节。如果您在-didCompleteWithError:中恢复了某个上传的错误状态,则可以再次对同一个上传进行排队。如果您在网络上执行此操作并不重要,操作系统应该在可以/想要的时候进行上传。

背景提取即将到来,虽然插入式和on-wifi是很好的启动。当fetch回调发生时,你肯定会有一些连接。您应该能够在获取回调期间排队后台上传任务。

您还可以注册背景地理围栏的“精简版”,只要检测到新网络或手机信号塔切换,背景就会通知您。参看-[CLLocationManager startMonitoringSignificantLocationChanges]