ユーザーエージェントってもっとわかりやすくしてくれないかなあと思った話
みなさんこんにちは。今日はボーイスカウトの創始者ベーデンパウエルの誕生日でBP祭ですね。yamashitaです。
さてさて、今日はユーザーエージェントについて書きたいと思います。
パソコン、フィーチャーフォン、スマートフォンをそれぞれ分けて適切な表示にする処理を実装する時に困った話です。
早速振り分けてみましょう
まずわかりやすそうなところでiPhoneかAndroidのスマートフォンかです。
これは簡単で"iPhone"か"Android"の文字が入っているかどうかを見ればいいのです。
// ユーザーエージェント取得
$ua = $_SERVER['HTTP_USER_AGENT'];
if(strpos($ua,'iPhone') !== false or strpos($ua,'Android') !== false){
//スマホの時の処理
}
ちなみにiPadも同じ感じで'iPad'があるかどうか判定できるそうです。
次は各キャリア
各キャリア名で振り分ければスマホではないのでガラケーという事になります。(はずだった。)
※後記参照
// ユーザーエージェント取得
$ua = $_SERVER['HTTP_USER_AGENT'];
if(strpos($ua,'iPhone') !== false or strpos($ua,'Android') !== false){
//スマホの時の処理
} else if(strpos($ua,'DoCoMo') !== false or strpos($ua,'SoftBank') !== false or strpos($ua,'KDDI') !== false) {
// ガラケーの時の処理
} else {
// 大雑把な振り分けだとあとはPCの処理
}
ここで問題発生
厳密にはWindows PhoneとかまだAndroidに支配されていないBlackBerryとかの処理も必要なんでしょうけど、この記事ではとりあえず置いときます。
こんな感じで処理を進めて実装までこぎつけようとしてたのですが、一つ問題がありました。
DoCoMoのフルブラウザやSoftBankのPCブラウザです。
これらには用途的にPCかスマホのサイトに近い処理をするべきだと思うのですが、
「"Android"でも"iPhone"でもない」かつ「各キャリア名を保持している」ためガラケー向けのサイトに誘導されます。
さすがにそれはガラケーに厳しすぎるのでちゃんとPCと同等の扱いをしたいと思います。
// ユーザーエージェント取得
$ua = $_SERVER['HTTP_USER_AGENT'];
if(strpos($ua,'iPhone') !== false or strpos($ua,'Android') !== false){
//スマホの時の処理
} else if((strpos($ua,'DoCoMo') !== false
|| strpos($ua,'SoftBank') !== false
|| strpos($ua,'KDDI') !== false)
// フルブラウザ、PCブラウザは'Mozilla'が含まれている
&& strpos($ua,'Mozilla') === false) {
// ガラケーの時の処理
} else {
// 大雑把な振り分けだとあとはPCの処理
}
こんな感じでPCブラウザやフルブラウザを除外すればいいのではないでしょうか。
MozillaってなんだFirefoxじゃないか
今回言いたかったのはこれです。
ググって、いやウィキってみると昔IEが競合のNetscape Navigatorのコードネーム「Mozilla」をユーザーエージェントに組み込んで偽装してたみたいですね。
これでNetscape Navigator用の内容も受け取ろうとしていたとの事。
その後IEがシェアをどんどん増やしていって定型文的な物になったみたいです。ややこしいですね。
「そんな堂々と偽装してもいいのか」とか「そのまま一般的になっちゃうのか」とか色々もやっとしてしまいました。
最後にユーザーエージェントを参照したページを記載しておきます。
・ソフトバンク、機種内でブラウザやアプリに振り分けてあって見やすいです。
http://creation.mb.softbank.jp/mc/terminal/terminalinfo/terminaluseragent.html
・auはガラホになったからなのかガラケーのユーザーエージェントが乗ってるページは404でした。
https://www.au.com/developer/android/kishu/ua/
・DoCoMo、パターンを紹介してるので何の文字が何を表してるのかわかるのがいいですね。
でもさっと見てさっと結果を知りたかっただけなのでしんどかったです。
https://www.nttdocomo.co.jp/service/developer/make/content/browser/html/useragent/