今回は、スマートフォンのAndroid端末の端末名を取得してみたので記事にしたいと思います。
最近掲示板で機種表示しているんですがやたらと取得できていない機種が多くなってきました。
調べてみたところ機種名で振り分けは情報がたくさんあったんですが、PHPで機種名取得する方法は、情報が古いものしかなかったので仕方なく用意することにしました。
この記事を見ればアクセスしたユーザーがどのような端末をつかっているのか取得することができるようになります。
ただし、この情報は簡単に偽装できるのであまり信用はできません。
ではさっそく取得方法を書いていきたいと思います。
例えば機種名が少ない場合以下のような取得方法もできます。windowsのバージョンなどは頻繁に増えたりしないので以下の方法を使っています。
$ua = $_SERVER['HTTP_USER_AGENT'];// ユーザエージェントを取得 if (preg_match("/HWV32/", $ua)) { $device = "HWV32"; } echo "$device";
というように書いて処理したりする場合もありますが、
これだとスマホ端末の場合機種が追加されるたびに更新せねばならず大変です。
昔やってる人いました( ;∀;)
そこで以下のようにUAの規則性をみて簡単に取得できるようにしました。
$ua = $_SERVER['HTTP_USER_AGENT'];// ユーザエージェントを取得 $ua = str_replace("SonyEricsson", "", $ua); if (preg_match("/Android/", $ua)) { $br = explode(" ",$ua); $device = str_replace(")", "", $br[4]); if (preg_match("/ja-jp;/", $ua) or preg_match("/en-us;/",$ua)) { $device = $br[6]; } if (preg_match("/HT-03A/", $ua)) { $device = "HT-03A"; } if (preg_match("/HWV32/", $ua)) { $device = "HWV32"; } } echo "$device"; //$deviceに機種名が入ります。 //テストする場合は $uaに拾ってきたユーザーエージェント名を入れてください
主な仕様
if (preg_match(“/Android/”, $ua)) {
の部分でAndroidがUAに含まれていたら処理を開始しています。
Mozilla/5.0 (Linux; Android 6.0.1; SOV33 Build/35.0.D.0.326) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.91 Mobile Safari/537.36
端末のユーザーエージェントを見ると半角スペースで区切っているのがわかります。
新しい機種のほとんどがこの形式のUAです。
$bro = explode(” “,$ua);
そこでexplodeで半角スペースで区切りユーザーエージェントを配列にします。配列の4番目が機種名になっています。
新しい機種名でたまに機種名のあとに「)」がついているものがありますのでstr_replaceで削除しています。
この方法だけで今アクセスしてくる機種のほとんどに対応できるかと思います。
古い機種に関しては配列の6番目に機種名が入っていますので6番目から取得
$device = str_replace(“)”, “”, $br[4]);
例外機種への対応
Mozilla/5.0 (Linux; U; Android 3.2; ja-jp; SC-01D Build/MASTER) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13
主な仕様にも書いていますが2014年春モデル以前の古い端末の多くはアンドロイドのバージョンの後に[ja-jp;]というように余計な文字が混ざっているので配列の6番目に端末名が入っています。
Mozilla/5.0 (Linux; U; Android 1.6; ja-jp; Docomo HT-03A Build/DRD08) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1
HT-03Aは新しい機種と位置が違うため例外
Mozilla/5.0 (Linux; U; Android 3.1; en-us; K1 Build/HMJ37) AppleWebKit/534.13(KHTML, like Gecko) Version/4.0 Safari/534.13
[ja-jp;]以外にも[en-us;]という文字が含まれている端末もありましたので[ja-jp;]と同様に扱っています。
Mozilla/5.0 (Linux; U; Android 2.3.4; ja-jp; SonyEricssonSO-01D Build/X.X.X.X.X.XX) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
$ua = str_replace(“SonyEricsson”, “”, $ua);
のような形式もなんとなく長いのでsonyericssonの部分は削除しています。
if (preg_match(“/HT-03A/”, $ua)) {
$device = “HT-03A”;
}
if (preg_match(“/HWV32/”, $ua)) {
$device = “HWV32”;
}
冒頭で紹介した人力作業な書き方を使っています。すごく一部の例外が出た場合には上記の形式で追記していくとより繊細な機種表示ができると思います。
もし例外が他にもあるよって場合には教えてください(^^♪
参考サイト
コメント