ネットワーク
引き続き
developer.apple.com
の一部の要点
NSURLSessionを使う。
旧iOSとの互換がいるときはNSURLConnectionを使う。
dataTaskWithRequest:completionHandler:ないしdataTaskWithURL:completionHandler:を呼ぶ
NSURLRequestにはリクエストに必要な情報をつめる。
もう少し制御が必要な場合はNSURLSessionでデリゲートを実装する。
独自認証、リダイレクトに従う等をデリゲートで都度訊かれる。
ディスクにダウンロードするならNSURLSession
一時停止等もできる。
POST要求
- やはりリクエストを作る。
- コンテンツタイプの指定はsetValue:forHTTPHeaderField:
- メモリ上の短いデータはURLエンコード
- ディスクのデータはNSMutableURLRequest.setHTTPBodyStream でNSInputStreamとして。
- 大量のデータはCFStreamCreateBoundPairでストリームの組を作りNSMutableURLRequest.setHTTPBodyStreamで。
- 進捗状況はconnection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:
認証
- URLSession:task:didReceiveChallenge:completionHandler:の実装
- 証明書を渡す場合 NSURLSessionAuthChallengeUseCredentialで証明書を渡す。
- 認証せず処理を続行 NSURLSessionAuthChallengeUseCredentialでnilを渡す。
- キャンセルしたい NSURLSessionAuthChallengeCancelAuthenticationChallengeを渡す。
- OSにまかせる NSURLSessionAuthChallengePerformDefaultHandling
- 特定の型の認証拒否 NSURLSessionAuthChallengeRejectProtectionSpace
認証書オブジェクト作成
- ログインパスワード認証 credentialWithUser:password:persistence:
- 証明書ベース credentialWithIdentity:certificates:persistence:にSecIdentityRefを渡す。(SecIdentityRefはユーザのキーチェーンから、SecItemCopyMatchingで取得)