きっかけ
自分のサイトへのHTTPリクエスト時にHTTPヘッダーに追加情報を載せたかった。
- アプリのバージョンを付与する
- 機種名を付与する
- HTTPS使用時に、認証用トークンを付与して、APIとWebでログインできるようにする
など。
実装したもの
試行錯誤
HTTPリクエストを投げる時によく使うAlamofireとかAFNetworkingとかは比較的簡単にヘッダを付与できる。
ただ、UIWebViewでWebページを表示しているケースでの付与が大変だった。
-
UIWebViewを継承したクラスのloadRequestでごにょごにょ -
shouldStartLoadWithRequestでごにょごにょ - 隠しdelegate使ってごにょごにょ
とか見つけたんだけど全体的に微妙…。
そんな中で見つけたのが
NSURLProtocolを使う
だった。
今回、自分のサイトに設置してあるAPI/Webへのリクエストの時のみ色々付与したかったのでもの凄くマッチした。
応用も効きそうなのでPod化しておいた。
ざっくりな流れ
-
canInitWithRequestで自分の作ったProtocolを適用するか決める -
startLoadingでリクエストの開始 -
stopLoadingでリクエストの終了 - 適当なタイミングで、
NSURLProtocolClientのメソッドを呼ぶ
詳しいコードは、
で。
まとめ
NSURLProtocolで通信をフックしてごにょごにょしよう!