はじめに
実務にて、React Native + Expo CLI のガワネイティブアプリに Firebase のプロジェクトを Android と iOS に分けて管理できるよう FirebaseAnalytics を導入してほしいという小仕事の依頼があり、Web 側の PHP で読み込む FirebaseAnalytics の CDN をユーザーエージェントで分岐させて解決した情報になります。
ソースコード
<?php $user_agent = $_SERVER['HTTP_USER_AGENT']; ?>
<?php if (preg_match('/iPhone|iPod|iPad/iu', $user_agent)): ?>
<p>ここに iOS のコードを書く。</p>
<?php elseif (preg_match('/Android/iu', $user_agent)): ?>
<p>ここに Android のコードを書く。</p>
<?php else: ?>
<p>ここに PC のコードを書く。</p>
<?php endif; ?>
検証環境
解説
処理を Android と iOS で分岐させるには、まず $_SERVER の HTTP_USER_AGENT インデックスから User-Agent(ユーザーエージェント)文字列を取得します。
$user_agent = $_SERVER['HTTP_USER_AGENT'];
次に、User-Agent(ユーザーエージェント)文字列に preg_match で Android と iOS の文字列が含まれるか正規表現によるマッチングを行い、その結果によって if 構文で処理を分岐させます。
$user_agent = $_SERVER['HTTP_USER_AGENT'];
if (preg_match('/iPhone|iPod|iPad/iu', $user_agent))
echo 'iOS';
elseif (preg_match('/Android/iu', $user_agent))
echo 'Android';
else
echo 'PC';
HTML を出し分ける場合は、下記のようにできます。
<?php $user_agent = $_SERVER['HTTP_USER_AGENT']; ?>
<?php if (preg_match('/iPhone|iPod|iPad/iu', $user_agent)): ?>
<p>iOS</p>
<?php elseif (preg_match('/Android/iu', $user_agent)): ?>
<p>Android</p>
<?php else: ?>
<p>PC</p>
<?php endif; ?>
preg_match の正規表現構文(PCRE)については パターン構文 に情報があります。
文字列のスラッシュ( / )は デリミタ です。検索したい文字列を囲みましょう。
終了デリミタの後ろにある i と u は 修飾子 です。i(PCRE_CASELESS)は、対象文字列の大文字小文字の区別をしません。u(PCRE_UTF8)は、対象文字列を UTF-8 として処理します、日本語などの マルチバイト文字列 を扱う場合は記述しましょう。
あとは、これを共通 footer などに記述すれば終わりです。
おわりに
デリミタ をデミリタって言い間違えそうになることがある。