アプリがバックグラウンドにあり、重要な場所の変更によって起動されたときに、小さなダウンロードを開始する必要があります。BUT Apples の NSURLSessionConfiguration のドキュメントは次のとおりです。
任意のプロパティについて次のように述べています。
大量のデータを転送する場合は、このプロパティの値を YES に設定することをお勧めします。そうすることで、システムはデバイスにとってより最適な時間にこれらの転送をスケジュールできます。たとえば、デバイスがプラグインされ、Wi-Fi 経由でネットワークに接続されるまで、システムは大きなファイルの転送を遅らせる可能性があります。このプロパティのデフォルト値は NO です。
セッション オブジェクトは、アプリがフォアグラウンドにあるときに開始する転送にのみ、このプロパティの値を適用します。アプリがバックグラウンドにある間に開始された転送の場合、システムは常にその裁量で転送を開始します。つまり、システムはこのプロパティが YES であると想定し、指定した値を無視します。
これは、ダウンロードがバックグラウンドで開始された場合、ダウンロードを続行するかどうか、およびいつ実行するかについて、OS が常に裁量権を持っていることを意味しているようです。これらのタスクを完了する前に、OS は常に Wi-Fi 接続を待機しているようです。私の経験はこの推測を支持しています。デバイスが携帯電話に接続されているときに、ダウンロードの通知をいくつか送信できることがわかりました。彼らは立ち往生したままです。デバイスをwifiに切り替えると、すべて通過します。
なんてこと?特に、NSURLSessionConfiguration オブジェクト (任意、allowsCellularAccess) に必要なプロパティがあるため、Apple がこの動作の構成を禁止する理由。もちろん、ダウンロード タスクの開始時にユーザーが常に WiFi に接続しているわけではありません。場所の大幅な変更によるアプリのウェイクアップに対応して、これを行う必要があります。バックグラウンド セッションでダウンロード タスクをスケジュールし、WiFi に切り替えるまでセルラー ネットワークでデリゲート コールバックを受信しません。つまり、WiFi が再び利用可能になるか、アプリをフォアグラウンドに戻すまで、これらのタスクを完了できないということですか?
あなたの誰かがこれに対する回避策を持っていますか?
私はすでに次のことを考えていました:
場所の更新後に長時間実行されるバックグラウンド タスク (古いスタイル) を開始し、defaultSessionConfiguration を使用してそこに自分のものをダウンロードします。それがうまくいくかどうかの経験はありますか?そうでない場合は、NSURLConnection を使用すると思います (さらに古いスタイル)。