NSURLSessionConfigurationについて整理する
NSURLSessionConfiguration
、意外と情報が少ないので整理しておく。
インスタンスの生成
以下のメソッドで、NSURLSessionConfiguration
のインスタンスを生成することができます。
-
- defaultSessionConfiguration
-
- ephemeralSessionConfiguration
-
- backgroundSessionConfigurationWithIdentifier:
defaultSessionConfiguration
NSURLConnection
と同じように通信するように設定されたインスタンスを生成します。
キーチェーンに保存された証明書や、ストレージに永続化されたキャッシュ、NSURLConnection
やNSURLDownload
と同じcookieのストレージを使います。
ephemeralSessionConfiguration
証明書やキャッシュ、cookieをメモリ上に保存するデータ転送のためのインスタンスを生成します。
NSURLSession
が破棄されたタイミングで全てのデータが消去されます。
また、メモリ使用量の制約を受けるため、使用時にはどの程度の転送量が発生するか、考慮する必要があります。
backgroundSessionConfigurationWithIdentifier:
HTTP/HTTPS通信で、ダウンロード・アップロード処理をバックグラウンドで行えるインスタンスを生成します。
アプリケーションとは別なプロセスで通信するため、アプリケーションがバックグラウンドにいる場合や、アプリケーションが終了している場合でも通信を継続します。
(ユーザーがアプリを強制終了した場合は通信を終了します)
このクラスメソッドで指定するidentifierは、指定したIDのNSURLSession
のインスタンスを再生成するときに必要になります。
ダウンロード完了時にアプリケーションが終了しているとき、再起動されたアプリケーションを進行中のバックグラウンド転送のタスクに紐付け直します。
その際にidentifierが必要になります。
実装時に考慮したほうが良さそうなプロパティ
allowsCelluarAccess
3G・4G回線を使ったアクセスを許可するか、指定するプロパティです。
デフォルト値はYES
です。
timeoutIntervalForRequest
データの転送が始まるまで、何秒待機するか指定するプロパティです。
デフォルト値は60秒です。
timeoutIntervalForResource
全てのデータを転送するまで、何秒待機するか指定するプロパティです。
デフォルト値は604800秒(7日間)です。
discretionary
バックグラウンド転送の際、バッテリー残量や通信状況に応じて通信処理の優先度を下げても良いか、指定するメソッドです。
大容量のファイル転送などの場合、YESを設定することが推奨されています。