ios - 如何获取 backgroundSession NSURLSessionUploadTask 响应

标签 ios ios7 nsurlsession

我已经实现了一个在后台运行的 NSURLSession(因此即使应用程序被挂起,它也可以使用系统守护进程继续执行任务)。问题是

-(void)URLSession:(NSURLSession *)session 
       dataTask:(NSURLSessionDataTask *)dataTask 
       didReceiveResponse:(NSURLResponse *)response 
       completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler

永远不会被调用。我需要知道响应状态,以便正确处理上传失败。根据另一篇帖子,一位 Apple 工程师告诉我们,当 session 为 backgroundSession 时,不会调用此委托(delegate)方法,以防止应用程序被唤醒。关于如何解决这个问题的任何建议?在我的情况下调用的最后一个 URLSession 委托(delegate)方法是:

-(void)URLSession:(NSURLSession *)session 
       dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data

最佳答案

NSURLSessionTaskDelegateURLSession:task:didCompleteWithError: 方法应该在上传完成后被调用。引用task.response对象,应该是NSHTTPURLResponse对象。


我确定您正在这样做,但标准的后台上传任务组件是:

  1. 进行后台 session :

    NSURLSessionConfiguration *backgroundConfiguration = [NSURLSessionConfiguration backgroundSessionConfiguration:@"com.domain.app"];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:backgroundConfiguration delegate:self delegateQueue:[NSOperationQueue mainQueue]];
    
  2. 使用NSURLSession方法uploadTaskWithRequest:fromFile:方法:

    NSURLSessionTask *task = [session uploadTaskWithRequest:request fromFile:fileURL];
    [task resume];
    

    对于后台 session ,您必须:

    • 使用NSURLSessionUploadTask;

    • 使用基于文件的再现(不能使用基于 NSData 的版本);

    • 使用基于委托(delegate)的再现 不能使用数据任务; (b) NSDataNSURLSessionUploadTask 的再现;也不 (c) NSURLSessionUploadTask 的完成 block 再现。

  3. 对于上传任务,请确保不要调用 NSMutableRequestsetHTTPBody。对于上传任务,请求正文不能在请求本身中。

  4. 确保您实现了适当的NSURLSessionDelegateNSURLSessionTaskDelegate 方法。

  5. 确保在您的应用委托(delegate)中实现 application:handleEventsForBackgroundURLSession:(这样您就可以捕获 completionHandler,您将在 URLSessionDidFinishEventsForBackgroundURLSession 中调用它).

关于ios - 如何获取 backgroundSession NSURLSessionUploadTask 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22487336/

相关文章:

objective-c - 在 iOS 中转换 UIView 时遇到问题

ios - QLPreviewController 在呈现模态视图 Controller 后失去联系

ios - 从 Google 云端硬盘仅下载 82 kb 0f 3 MB?

ios7 - 是否可以在 iOS 7 自定义过渡中为约束设置动画

ios7 - 自定义 UITableViewCell 编辑模式不起作用

nsurlsession - 在 kCFStreamErrorDomainSSL 上中断

iphone - 根据过去搜索术语的历史构建自动完成功能

ios - 根据iOS版本编译

ios:NSURLSessionDataTask 并从不同 View 下载

iOS:设置 httpBody 属性时 HTTP POST 请求超时