ios - 当应用程序暂停时,我如何知道 NSURLSessionUploadTask 是否正常工作?

标签 ios nsurlsessionuploadtask

当我的应用程序在前台运行时,我看到定期调用:NSURLSessionTaskDelegate -> URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:

当我的应用程序移到后台并挂起时,对该方法的调用停止,因此我没有关于 NSURLSessionUploadTask 是否继续上传的反馈。是否有任何技术可以获取有关上传的一些反馈?

最佳答案

通过查看有关 NSURLSessionUploadTask 的其他 StackOverflow 帖子,我可以看到关于此功能存在很多混淆。以下是我发现的一些有助于减少这种混淆的反馈机制:

  • 使用像 Wireshark 这样的网络代理和数据包嗅探器(详见 this)。过滤除您要将文件上传到的服务器的流量之外的所有流量。查找来自服务器的 HTTP 响应 (200) 和来自 iOS 设备的 FIN,ACK 以表示上传已完成并且已收到响应。您还可以使用数据包嗅探器来诊断上传问题。 Wireshark

  • 使用 Instruments 捕获进程 nsurlsessiond

  • 的网络流量

Instruments capture for nsurlsessiond

  • 等待上传完成。如果您的应用程序在后台并在上传完成时挂起,那么 iOS 会将您的应用程序从挂起状态移动到在后台主动运行并按此顺序调用以下方法:
    • 通过 NSURLSessionTaskDelegate -> URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend: 可以调用在应用程序进入后台之前未处理的对该方法的一些调用
    • 通过 NSURLSessionTaskDelegate: -> URLSession:dataTask:didReceiveData:
    • 通过 NSURLSessionTaskDelegate -> NSURLSession:task:didCompleteWithError:
    • 通过 NSURLSessionDelegate -> :URLSessionDidFinishEventsForBackgroundURLSession:
    • iOS 在挂起应用程序之前给应用程序 30 秒的时间来在后台处理下载结束

我还在 github 上放了一个非常基本的 NSURLSessionUploadTask 示例应用程序和网络服务器 here .

关于ios - 当应用程序暂停时,我如何知道 NSURLSessionUploadTask 是否正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33441325/

相关文章:

ios - 在 Xcode 项目中组织文件并以编程方式获取文件夹列表

ios - 如何为 TableView 部分创建两种数据类型的数组 - 无法通过下标分配 : Subscript is a get-only

iPhone全屏广告

ios - 使 com.apple.CoreData.ConcurrencyDebug 1 工作

iOS 后台上传 - 如果应用程序崩溃,如何验证收到的响应?

ios - NSURLProtocol 可以与 NSURLSession {upload, download}dataTask 一起使用吗

ios - 导航栏标题

ios8:如何使用 NSURLSession 在后台上传 100 多张照片?可用空间问题

ios - NSURLSession 是否支持 FTP 上传?