ダウンロード タスクを実行するバックグラウンド nsurlsession を作成しました。アプリがバックグラウンドにあるときはうまくいきました。しかし、アプリを閉じる(「ホーム」ボタンをダブルクリックして上にスワイプ)と、ダウンロードタスクがキャンセルされて失敗したようで、アプリを再起動すると最初からダウンロードし直しました。Apple のドキュメントによると、バックグラウンド転送はアプリが実行されていなくても機能します。私は何か間違ったことをしていますか?
3 に答える
NSURLSessionConfiguration Class Referenceから:
iOS アプリがシステムによって終了され、再起動された場合、アプリは同じ識別子を使用して新しい構成オブジェクトとセッションを作成し、終了時に進行中だった転送のステータスを取得できます。この動作は、システムによるアプリの正常終了にのみ適用されます。ユーザーがマルチタスク画面からアプリを終了すると、システムはセッションのバックグラウンド転送をすべてキャンセルします。
そのため、iOS 自体が通常の過程でアプリを閉じるとバックグラウンド転送が続行されますが、マルチタスク画面から強制的に終了すると、すべての転送が強制終了されます。
ユーザーが強制終了した場合、アプリはバックグラウンド ダウンロードのために再起動されません。
application:didReceiveRemoteNotification:fetchCompletionHandler:の iOS8 ドキュメントには、次のように書かれています。
このメソッドを使用して、アプリの着信リモート通知を処理します。アプリがフォアグラウンドで実行されている場合にのみ呼び出される application:didReceiveRemoteNotification: メソッドとは異なり、アプリがフォアグラウンドまたはバックグラウンドで実行されている場合、システムはこのメソッドを呼び出します。さらに、リモート通知のバックグラウンド モードを有効にした場合、システムはアプリを起動 (またはサスペンド状態からウェイクアップ) し、プッシュ通知が到着するとバックグラウンド状態にします。ただし、ユーザーがアプリを強制終了した場合、システムはアプリを自動的に起動しません。そのような状況では、システムがアプリを自動的に再起動しようとする前に、ユーザーはアプリを再起動するか、デバイスを再起動する必要があります。