Rodhos Soft

備忘録を兼ねた技術的なメモです。Rofhos SoftではiOSアプリ開発を中心としてAndroid, Webサービス等の開発を承っております。まずはご相談下さい。

ネットワーク

引き続き
developer.apple.com

の一部の要点

NSURLSessionを使う。

iOSとの互換がいるときはNSURLConnectionを使う。

dataTaskWithRequest:completionHandler:ないしdataTaskWithURL:completionHandler:を呼ぶ

NSURLRequestにはリクエストに必要な情報をつめる。

もう少し制御が必要な場合はNSURLSessionでデリゲートを実装する。

独自認証、リダイレクトに従う等をデリゲートで都度訊かれる。

ディスクにダウンロードするならNSURLSession

一時停止等もできる。

POST要求

  1. やはりリクエストを作る。
  2. コンテンツタイプの指定はsetValue:forHTTPHeaderField:
  3. メモリ上の短いデータはURLエンコード
  4. ディスクのデータはNSMutableURLRequest.setHTTPBodyStream でNSInputStreamとして。
  5. 大量のデータはCFStreamCreateBoundPairでストリームの組を作りNSMutableURLRequest.setHTTPBodyStreamで。
  6. 進捗状況はconnection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:

認証

  1. URLSession:task:didReceiveChallenge:completionHandler:の実装
    1. 証明書を渡す場合 NSURLSessionAuthChallengeUseCredentialで証明書を渡す。
    2. 認証せず処理を続行 NSURLSessionAuthChallengeUseCredentialでnilを渡す。
    3. キャンセルしたい NSURLSessionAuthChallengeCancelAuthenticationChallengeを渡す。
    4. OSにまかせる NSURLSessionAuthChallengePerformDefaultHandling
    5. 特定の型の認証拒否 NSURLSessionAuthChallengeRejectProtectionSpace

認証書オブジェクト作成

  1. ログインパスワード認証 credentialWithUser:password:persistence:
  2. 証明書ベース credentialWithIdentity:certificates:persistence:にSecIdentityRefを渡す。(SecIdentityRefはユーザのキーチェーンから、SecItemCopyMatchingで取得)

developer.apple.com