UserAgentからAndroidの端末名を取得する方法

  • 13
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

いまさらかもですが、一部の?ロリポップ(Lolipop)端末のWebViewのUserAgent仕様が変更になりました。

変更点としては、ビルド番号の後に"wv"という文字列が追加されたようです。
Mozilla/5.0 (Linux; Android 5.0.2; SHV32 Build/S5231; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/42.0.2311.129 Mobile Safari/537.36

ということで、昔書いた正規表現のプログラムを書き直しました。

getAndroidDeviceName.php
     // UA取得
        $userAgent = $_SERVER['HTTP_USER_AGENT'];

        // テスト用UA
        // 5.1系Chrome
        // $userAgent = "Mozilla/5.0 (Linux; Android 5.1; KYV35 Build/xxxx) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.93 Mobile Safari/537.36";
        // 5.1系WebView
        // $userAgent = "Mozilla/5.0 (Linux; Android 5.1; KYV35 Build/xxxx) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Mobile Safari/537.36";
        // 5.0系Chrome
        // $userAgent = "Mozilla/5.0 (Linux; Android 5.0.2; SHV32 Build/S5231) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.111 Mobile Safari/537.36";
        // 5.0系WebView
        // $userAgent = "Mozilla/5.0 (Linux; Android 5.0.2; SHV32 Build/S5231; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/42.0.2311.129 Mobile Safari/537.36";
        // 4.4系標準ブラウザ
        // $userAgent = "Mozilla/5.0 (Linux; U; Android 4.4.2; ja-jp; HTL23 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30";
        // 4.4系Chrome
        // $userAgent = "Mozilla/5.0 (Linux; Android 4.4.2; HTL23 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36";
        // 4.4系WebView
        // $userAgent ="Mozilla/5.0 (Linux; Android 4.4.2; HTL23 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36";
        // 4.1系標準ブラウザ
        // $userAgent = "Mozilla/5.0 (Linux; U; Android 4.1.2; ja-jp; SonySOL21 Build/9.1.D.0.395) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30";
        // 4.1系Chrome
        // $userAgent = "Mozilla/5.0 (Linux; Android 4.1.2; SOL21 Build/9.1.D.0.395) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19";
        // 4.0系
        // $userAgent = "Mozilla/5.0 (Linux; U; Android 4.0.4; ja-jp; SonyEricssonIS12S Build/6.1.D.0.170) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30";
        // 2.3系
        // $userAgent = "Mozilla/5.0 (Linux; U; Android 2.3.4; ja-jp; SonyEricssonIS11S Build/4.0.1.B.0.112) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1";

        // Android端末情報抽出
        $matches = array();
        preg_match("/\(.*Android[^\)]*\)/i", $userAgent, $matches);

        if (isset($matches[0])) { // Android端末の場合
            // UA分解
            $breakList = explode(";", $matches[0]);

            // 端末名はBuild番号の前に記述されているという前提条件あり!
            $tmpDeviceName = "";
            foreach($breakList as $val) {
                if (strpos($val, 'Build') === false) {
                    continue;
                } else {
                    $tmpDeviceName = $val;
                    break;
                }
            }

            // 端末名抽出(キャプチャグループ利用)
            $matches = array();
            preg_match('/ ([0-9A-Za-z\-\_ \/]+) Build\/[0-9A-Za-z\.\_]+?\)?/i', $tmpDeviceName, $matches);
            $deviceName = isset($matches[1]) ? $matches[1] : "odd android device";

        } else { // 非Android端末の場合
            $deviceName = "non android device";
        }

        echo $deviceName;

http://www.au.kddi.com/developer/android/kishu/ua/
上記から適当な端末を抽出して検証していますが、正規表現苦手なので、もっとこうした方がいいとか不具合とかあれば教えてください。(利用は自己責任でお願いします)