0

アプリケーションがフォアグラウンドで実行されている場合、次の呼び出しが定期的に表示されます。NSURLSessionTaskDelegate -> URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:

アプリケーションがバックグラウンドに移行して中断されると、このメソッドの呼び出しが停止するため、NSURLSessionUploadTask がアップロードを継続しているかどうかについてのフィードバックがありません。アップロードに関するフィードバックを得る方法はありますか?

4

1 に答える 1

2

他の StackOverflow の投稿をNSURLSessionUploadTask見ると、この機能について多くの混乱があることがわかります。この混乱を軽減するために私が発見したいくつかのフィードバック メカニズムを次に示します。

  • Wireshark のようなネットワーク プロキシとパケット スニファを使用します (詳細については、こちらを参照してください)。ファイルのアップロード先のサーバーとの間のトラフィックを除くすべてのトラフィックを除外します。サーバーからの HTTP 応答 (200) と iOS デバイスからの を探しFIN,ACKて、アップロードが完了し、応答が受信されたことを通知します。パケット スニファーを使用して、アップロードの問題を診断することもできます。 ワイヤーシャーク

  • Instrumentsプロセスのネットワーク トラフィックをキャプチャするために使用しますnsurlsessiond

nsurlsessiond のインストゥルメント キャプチャ

  • アップロードが完了するまで待ちます。アプリケーションがバックグラウンドにあり、アップロードの完了時に一時停止されている場合、iOS はアプリケーションを一時停止状態からバックグラウンドで実行中の状態に移行し、次のメソッドをこの順序で呼び出します。
    • NSURLSessionTaskDelegate -> URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:アプリケーションがバックグラウンドに入る前に処理されなかったこのメソッドへのいくつかの呼び出しを介して呼び出される可能性があります
    • 経由NSURLSessionTaskDelegate: -> URLSession:dataTask:didReceiveData:
    • 経由NSURLSessionTaskDelegate -> NSURLSession:task:didCompleteWithError:
    • 経由NSURLSessionDelegate -> :URLSessionDidFinishEventsForBackgroundURLSession:
    • iOS は、アプリケーションを一時停止する前に、バックグラウンドでダウンロードの終了を処理するためにアプリケーションに合計 30 秒を与えます

また、非常に基本的な NSURLSessionUploadTask サンプル アプリケーションと Web サーバーを github hereに配置しました。

于 2015-10-30T17:11:15.050 に答える