例えば、あるURLにアクセスした時に、
- iOS → AppStoreのアプリページ
- Android → GooglePlayのアプリページ
- PC → ランディングページ
という形で機種に応じて異なるURLにリダイレクトする場合、PHPであれば、
<?php
// 言語判定
$isJa = false;
$accept_language = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
foreach ($accept_language as $language) {
if (preg_match('/^ja/i', $language)) {
$isJa = true;
break;
}
}
// 端末判定
$ua = $_SERVER['HTTP_USER_AGENT'];
if ((strpos($ua, 'iPhone') !== false) || (strpos($ua, 'iPad') !== false)) {
if ($isJa) {
print '<meta http-equiv="refresh" content="0;URL=https://apps.apple.com/jp/app/アプリID">';
} else {
print '<meta http-equiv="refresh" content="0;URL=https://apps.apple.com/app/アプリID">';
}
} elseif ((strpos($ua, 'Android') !== false)) {
print '<meta http-equiv="refresh" content="0;URL=https://play.google.com/store/apps/details?id=パッケージID">';
} else {
print '<meta http-equiv="refresh" content="0;URL=ランディングページURL">';
}
?>
という感じで、User-Agent毎に出力する meta タグを変えればOK...というミスは、誰しもが踏むトラップかと思います。
iPhone or iPad だと、ブラウザにPCモードとモバイルモードみたいなものがあり、モバイルモードであれば、iPhoneなら「iPhone」、iPadなら「iPad」がUser-Agentに含まれていますが、PCモードだとMacと同じ(Macintosh; xxxx Mac OS xxxxみたいな形)になります。
また、iPadはあるバージョンからデフォルトがPCモードになっています。
つまり、上記コードだと、iPadからアクセスするとAppStoreではなくランディングページに飛ぶことになります。
Macでアクセスした時、ランディングページではなくAppStoreに飛ばしてしまっても問題無ければ、iPhone or iPad の判定式を次のように変更してあげれば良いかと思います。
if ((strpos($ua, 'iPhone') !== false) || (strpos($ua, 'iPad') !== false) || (strpos($ua, 'Mac') !== false)) {
User-AgentでiPadとMacの区別は不可能です。(そもそも、ブラウザやOSバージョンによってコロコロ変わるので確実性は保証できません)
参考までに、手元にあるMacとiPadのUser-Agentは以下のように(Mac OS Xのバージョン部分以外は完全に一致する形に)なっていました。
MacBook Air 2020 (Intel) + macOS Big Sir 11.6 + Safari の User-Agent
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
iPad Pro 3rd + iPadOS 15.0 + Safari (default = Desktop) の User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Safari/605.1.15
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。