はじめに
あるURLにアクセスした時、スマホに指定のアプリがインストールされていればそれを起動し、未インストールでさればストアを表示したい。
ユニバーサルリンクでアプリ未インストールだとストア表示してくれる、みたいなことをいくつか見かけたので調べた。
ディープリンク、ユニバーサルリンク、アプリリンク
いずれもURLっぽいもので、対応したアプリがインストールされていると、そのアプリが起動する。
ディープリンクの中に、
・カスタムURLスキーム
・ユニバーサルリンク
・アプリリンク
がある。
- カスタムURLスキーム
URLの先頭部分(httpやftpのところ)をアプリ独自に定義したもの。
例:Googleマップ comgooglemaps:
- ユニバーサルリンク と アプリリンク
iOSとAndroidでの呼び名が違うだけで同じもの。
URLと同じ形式なので、対応するアプリがインストールされていないと普通にWebページが表示される。
ただし、これらだけではストアの表示は行わない。
しかし、ユニバーサルリンクとアプリリンクは、表記がWebページと同じURLのため、対応するアプリが入っていない場合にWebサイトを表示する。(通常のWeb表示が行われる)
このときWebページ側でストアに遷移するような細工を行うことで「未インストール時はストア表示」を実現できる。
同一のURLでAndroid/iOSそれぞれのストアを表示出来るのも、Webページ側の細工によるもの。
- その細工とは
単に UserAgent による振り分けと、OSに応じたリダイレクトをするだけ。
一連の流れ
Webページやメールに記載した ユニバーサルリンク(アプリリンク) をタップする。(A,B,Cに分岐)
(A)
対象のアプリがインストールされている場合、該当のアプリが起動する
(B)
対象のアプリがインストールされていない場合、ブラウザがWebページにアクセスする
↓
サーバ側でUserAgentによりiOS用/Android用 それぞれのアプリストアのURLへリダイレクトする
↓
ストアアプリのユニバーサルリンク(アプリリンク)が反応し、該当アプリのストアページが表示される
(C)
PCによるアクセスの場合、普通にWebページを表示する
※ただし、一部のアプリ内ブラウザではユニバーサルリンク(アプリリンク)が機能せず、Webページが表示されることがある
カスタムURLスキームでストア表示を行うには
呼び出し側のアプリで、カスタムURLスキームに反応したらそのままアプリが起動。
何も起きなかったら別途用意したURLに遷移させる、という動きを作る。
.htaccessでUserAgentによる振り分け
.htaccess
# iPhone
RewriteCond %{HTTP_USER_AGENT} iPhone
RewriteRule ^$ /ios.html [R]
# iPad
RewriteCond %{HTTP_USER_AGENT} iPad
RewriteRule ^$ /ios.html [R]
# Android
RewriteCond %{HTTP_USER_AGENT} Android
RewriteRule ^$ /android.html [R]
ios用
<meta http-equiv="refresh" content="0;url='https://apps.apple.com/jp/app/id??????????'" />
android用
<meta http-equiv="refresh" content="0;url='https://play.google.com/store/apps/details?id=xxx.xxxx.xxxx.xxxxxx'" />
以上