我正在开发应用程序,允许用户拍摄最初保存在设备中的图像和视频。只要设备连接到网络(移动数据或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];
答案 0 :(得分:0)
您的后台上传应该适用于网络薄弱环节。如果您在-didCompleteWithError:
中恢复了某个上传的错误状态,则可以再次对同一个上传进行排队。如果您在网络上执行此操作并不重要,操作系统应该在可以/想要的时候进行上传。
背景提取即将到来,虽然插入式和on-wifi是很好的启动。当fetch回调发生时,你肯定会有一些连接。您应该能够在获取回调期间排队后台上传任务。
您还可以注册背景地理围栏的“精简版”,只要检测到新网络或手机信号塔切换,背景就会通知您。参看-[CLLocationManager startMonitoringSignificantLocationChanges]
。