iOS13以降、HTTP_USER_AGENTだけではiPadとPCの区別がつかなくなりました。
これは、9.7インチ以上のiPadの場合にHTTP_USER_AGENTに”iPad”の文字列が含まれなくなり、PCのブラウザ(MacのSafari)からのアクセスとほぼ同じになるケースが発生したからです。
PHPの場合、以前は以下のようなコードでiOS判定が可能でしたが、現在は無理です。
function is_ios() {
$ua = $_SERVER['HTTP_USER_AGENT'];
// iOSと判定する文字リスト
$ua_list = array('iPhone', 'iPad', 'iPod');
foreach ($ua_list as $ua_smt) {
if (strpos($ua, $ua_smt) !== false) {
return true;
}
} return false;
}
Javascript ならば、HTTP_USER_AGENTに加えて ‘ontouchend’ なども利用する事で判別可能です。
const ua = window.navigator.userAgent.toLowerCase();
const isIOS = ua.indexOf("iphone") >= 0
|| ua.indexOf("ipad") >= 0
|| (ua.indexOf('macintosh') > -1
&& 'ontouchend' in document) /* iPad */
|| ua.indexOf("ipod") >= 0;
PHP内で判定するには、JavascriptなどからPHPに判定済みの情報を渡すことが必要です。
2022年2月現在、Mac、Windows、iPadからのHTTP_USER_AGENTは以下となります。
[Mac の Safari] と [iPad(9.7インチ以上)の Safari] の違いがほぼ無いことが確認出来ます。
[Mac の Safari]
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Safari/605.1.15:
[Mac の Chrome]
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36
[Windows の Chrome]
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36
[11インチiPad Pro(第2世代) の Safari]
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15
[11インチiPad Pro(第2世代) の Chrome]
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) Mozilla/5.0 (iPad; CPU OS 15_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/97.0.4692.84 Mobile/15E148 Safari/604.1
[iPad mini(第6世代) の Safari]
Mozilla/5.0 (iPad; CPU OS 15_2_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.2 Mobile/15E148 Safari/604.1