2012/10/01更新

[XCODE] UIWebViewを用いる際にUserAgentを独自に設定する方法

このエントリーをはてなブックマークに追加      

こんにちは、@yoheiMuneです。
UIWebViewベースのiPhoneアプリ開発をバリバリ行っています(*´∇`*)
UIWebViewで表示した際に、UserAgentを独自のものに上書きする設定をブログに書きたいと思います。

画像



UIWebViewでUserAgentを上書きしたい理由

最近はWebViewベースのアプリケーションを開発しています。
アプリケーションの内容を表現する媒体として、iPhoneのUIWebView、AndroidのWebView、各スマホのSafariやブラウザを利用者が選択できるように設計しています。

表現する媒体は違うものの、表現する仕組みは、HTML+JS+CSS+サーバーサイドで構築するようにして、表現部分のみを切り替えることで、開発を効率化するようなアーキテクチャです。

この設計を用いた場合に、iPhoneのUIWebViewだけで独自の振る舞いをしたいという端末独自の仕様がある場合があります。

その時に、iPhoneのUIWebViewからアクセスしている事をJSやサーバーサイドで判別する為に、UserAgentを独自のものにするという事を行っています。

今回のブログは、UIWebViewでUserAgentを独自のものに設定する方法を記載します。



UIWebViewでWebページにアクセスする際に独自のUserAgentを設定する

設定方法はいくつか存在するようですが、以下の方法が一番簡単でいいなと思います。iOS6でもちゃんと動く事を確認しました(*´∇`*)
UIWebViewのインスタンス作成前(以下例では、アプリ起動時)に、独自のUserAgentを設定します。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

  /* アプリ起動時に必要な処理の記載は省略 */
    

  // UserAgentに独自のものを設定します。
  // ここでは、「override UserAgent iOSWebView」という文字列を設定しています。
  NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"override UserAgent iOSWebView", @"UserAgent", nil];
  [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];

  return YES;
}
たったこれだけのコードで、UserAgentを上書きする事が可能です。
なお、アクセス解析のためなどiPhoneデフォルトのUserAgentも必要な場合には、「iPhoneデフォルトのUserAgent文字列+独自の文字列」を上記に設定します。

UserAgentが意図した通り設定されたか否かの確認は、UIWebViewで以下のように行う事が出来ます。
NSString *js = @"alert(window.navigator.userAgent);";
[webView stringByEvaluatingJavaScriptFromString:js];
UIWebView上で、JavaScriptのalert関数を実行し、window.navigator.userAgentの内容を表示しています。



最後に

iPhoneの開発は、本当に便利な機能が色々あって良いなぁと思う今日この頃。
他にも学んだことがあったら、またブログに書きたいと思います。

最後までご覧頂きましてありがとうございました!





こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。