目前我正在做一个项目,我们需要将一组照片和视频发送到 S3 亚马逊服务器。流程是这样的:
-首先我们要求api开始传输,然后我们得到一个id(api调用)
-transfer id -> 在 api 请求文件上传 -> file_id 作为响应(api 调用)
-file id -> 在 api 请求块上传 -> 亚马逊数据作为响应(api 调用)
-upload chunck -> 在 NSURLSession 中配置在 backgroundConfiguration 中(每次上传 5mb)
-在最后一个chunck-upload(api调用)之后完成文件上传
- 最后一次文件上传后完成传输(api调用)
我们需要使用 api 并对其进行调用.. 当应用程序在后台运行时也是如此。
所以我想的是使用可以在后台上传文件然后运行完成块的AFNetworking 2.0。
在该完成块中,代码如下:
_managerBackground = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
- (void)uploadChunkInTheBackGround:(RequestChunkUploadResponse *)requestChunkUploadResponse
{
UploadChunkRequest *chunkUploadRequest = [[UploadChunkRequest alloc]initWithRequestChunkUploadResponse:requestChunkUploadResponse];
APIService *weakSelf = (APIService *)self;
NSURLSessionUploadTask *uploadTask = [_managerBackground uploadTaskWithRequest:chunkUploadRequest.request fromFile:chunkUploadRequest.fileLocationURL progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
//code to prepare recursive upload and files
[weakSelf uploadChunkInTheBackGround:chunkUploadResponse];
}];
所以难点是我们喜欢执行代码,也尝试在iOS7的后台做一个上传任务
当应用程序连接到调试器(Xcode)时,上面的示例工作。但没有它会在控制台中提供此错误:
<BKProcessAssertion: 0x178468380> identifier: com.apple.nsnetworkd.handlesession process: YourApp[675] permittedBackgroundDuration: 30.000000 reason: backgroundDownload owner pid:111 preventSuspend preventThrottleDownUI preventIdleSleep preventSuspendOnSleep
所以那不酷:(
有没有办法运行代码并在后台上传文件..??你有这方面的经验吗??还是我们对 iOS7 的大部分要求?
我希望你能分享你的想法。
谢谢,
亲切的问候,
巴特舍恩