何でも一回はやってみよう。

気が向いた事は何でも一回試してるビール大好きなおっさんッス。

ベーシック認証とJSONとUIwebView。

ベーシック認証が設定されているサーバーのJSONを読み込んでやりたかった事。
① 画像までのパスを取得してUIImageに設定したかった。
② UIWebViewに読み込みたいページのURLを取得して表示したかった。

で、、、
JSONに関してはAlamofireを使ってJSONを取得

{
  "responseData": {
    "feed": {
      "entries": [
        {
          "id": "220",
          "title": "タイトルが入ります。",
          "text": "記事の本文です。",
          "cat": "カテゴリー",
          "subCat": "サブカテゴリー",
          "thumbnail": "http://◯◯◯.com/img/entry/☓☓☓.jpg",
          "url": "http://◯◯◯.com/△△△△.html"
        }
      ]
    }
  }
}

というJSONデータを読み込みます。

let user = "userId"
let password = "userPass"

// JSONのパース
func parse(url: String, completion: (([JSON]?, NSError?) -> Void)){
   var url = NSURL(string: url)
   Alamofire.request(.GET, url!, parameters: nil, encoding: .JSON)
      .authenticate(user: user, password: password)
      .responseJSON{ (request, response, data, error) in
         let json = JSON(data!)
         let entries = json["responseData"]["feed"]["entries"].array
            completion(entries, error)
   }
}

.authenticate(user: user, password: password)
と、この一文を足すとベーシック認証下のJSONは読み込めましたが、画像、UIWebViewへの埋め込みはできませんでした。

色々と考えたのですが結局JSONファイルを修正しました。

{
  "responseData": {
    "feed": {
      "entries": [
        {
          "id": "220",
          "title": "タイトルが入ります。",
          "text": "記事の本文です。",
          "cat": "カテゴリー",
          "subCat": "サブカテゴリー",
          "thumbnail": "http://userId:userPass@◯◯◯.com/img/entry/☓☓☓.jpg",
          "url": "http://userId:userPass@◯◯◯.com/△△△△.html"
        }
      ]
    }
  }
}

てな感じで、URLに直接ユーザー名・パスワードを埋め込みました。
(このページを参照)
http://qiita.com/ngkazu/items/6da021edf177f40e1f26

これで無事、表示しました。
開発中のアプリ内のJSONキャッシュは結構きついのでキャッシュ対策をしておく方が無難です。

http://◯◯◯.com/▲▲▲▲▲.json?123

とURLに?〜をつければOK。