携帯Flash対応端末と非対応端末を振り分ける

こんにちは、バズー株式会社、開発チームリーダーの清水です。

最近の携帯は Flash に対応しています。Flash Lite 1.1 なら90%以上対応していると思ってよいと思います。ただし、場合によっては、残りの10%の携帯にも対応する必要があります。そこで、プログラムによって携帯Flash対応端末と非対応端末を振り分ける必要がでてきます。幸いにもいまでは携帯機種情報が無料で取得できるようになっているので、以下のサイトなどから端末IDの一覧を取得します。

http://valueengine.jp/index.html

Flash に対応している端末ID一覧を作ると新しい機種が増えるたびに対応しなければいけないので、逆に Flash に対応していない端末ID一覧を作ります(これなら増えることもありません)。

下記のプログラムを index.php として、以下の4つのファイルを用意します。

・index.php (下記のプログラム)
・mobile/index.swf.dat (携帯用Flash
・mobile/index.html.dat (携帯用静的ページ)
・index.html.dat (PC用静的ページ)


<?php
// Flash非対応端末ID一覧
$no_flash = array(
'1' => ARRAY(
'833I',
'D209I',
'D2101V',
/* 途中省略 */
'SO506iC',
'SO506iS',
'T2101V'
),
'2' => ARRAY(
'CA11',
'CA12',
'CA13',
/* 途中省略 */
'TST7',
'TST8',
'TST9'
),
'3' => ARRAY(
'702MO',
'702NK',
'702SMO',
/* 途中省略 */
'V902T',
'V903T',
'V904T'
)
);
$ua = $_SERVER['HTTP_USER_AGENT'];
$career = 0; // PC
if (preg_match("/^DoCoMo\/1\.0/", $ua)) {
$ua_array = explode("/", $ua);
$career = 1;
$device = $ua_array[2];
}
elseif (preg_match("/^J\-PHONE|^Vodafone|^SoftBank/", $ua)) {
$ua_array = explode("/", $ua);
$career = 3;
$device = $ua_array[2];
}
elseif (isset($_SERVER['HTTP_X_JPHONE_MSNAME'])) {
$career = 3;
$device = $_SERVER['HTTP_X_JPHONE_MSNAME'];
}
elseif (preg_match("/UP\.Browser/", $ua)) {
$career = 2;
$device = preg_replace("/^[^\-]+\-([^\ ]+)\ .+$/","$1", $ua);
}
elseif (preg_match("/^DoCoMo\/2\.0/", $ua)) {
$ua_array = explode("/", $ua);
$career = 1;
$device = preg_replace("/^2\.0 ([0-9A-Za-z\+]+)\(.+$/","$1", $ua_array[1]);
}
if ($career) {
if (!in_array(strtoupper($device), $no_flash[$career])) {
// 携帯Flash対応端末
header("Content-Type: application/x-shockwave-flash");
echo file_get_contents('mobile/index.swf.dat');
} else {
// 携帯Flash非対応端末
require_once('mobile/index.html.dat');
}
} else {
// PC
require_once('index.html.dat');
}

PCのところは、携帯用静的ページを返すなり、サービス紹介ページにするなり工夫するとよいと思います。

これで携帯Flash対応端末からアクセスするとFlashが、非対応端末からアクセスすると静的ページが表示されます。