0

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

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

4

1 回答 1

2

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

  • 使用像 Wireshark 这样的网络代理和数据包嗅探器(有关详细信息,请参阅内容)。过滤除进出您将文件上传到的服务器的流量之外的所有流量。查找来自服务器的 HTTP 响应 (200) 和FIN,ACK来自 iOS 设备的 a,以表明上传完成并且已收到响应。您还可以使用数据包嗅探器来诊断上传问题。 线鲨

  • 用于Instruments捕获进程的网络流量nsurlsessiond

nsurlsessiond 的仪器捕获

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

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

于 2015-10-30T17:11:15.050 回答