Deep Link / App Links / Universal Link / Firebase Dynamic Links 使い分け

アプリを作るとき、URLをクリックしたときに、アプリがインストールされていれば、アプリを立ち上げたい。
このとき最も良い方法をまとめます。

Deep Link

用途

特定の技術を説明した言葉ではなく、アプリの特定のページを開くことが出来るリンクを表す。

実装方法

以下に説明する方法のいずれでも実現可能です。

App Links または Universal Link

用途

特定のURLを開くとき、アプリがあればアプリを起動、なければ通常通りWebブラウザで表示、という実装をしたい場合に利用します。
リンクを選択時、アプリ選択画面が表示されない点がポイントです。

実装時の注意点

iOSは、https://{domain}/ などですでにWebブラウザでページを見ているときに、https://{domain}/items/1 などのUniversal Link をクリックした場合、domain が同じであれば、アプリは反応しない
・アプリ内で https://{domain}/items/1 のような Universal Link を起動させた場合、Webブラウザが起動する

実装方法

Android: intent-filter と android:autoVerify="true" の設定、検証URL https://{domain}/.well-known/assetlinks.json
iOS: Associated Domains の applinks に、ドメインの設定、検証URLの作成 https://{domain}/.well-known/apple-app-site-association

https://developer.android.com/training/app-links/verify-site-associations
https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html

Firebase Dynamic Links

アプリを開く挙動の場合、技術的には、App Links または Universal Link が使われています。
Googleによって、特定のWebページをブラウザで開く / ストアを開く / アプリを開く、が自動でハンドリングされる機能です。

利用イメージとしては、短縮URLサービスのように、事前にWebページの登録をし、ユニークURLを発行します。リンク選択時に、いずれかにリダイレクトするような挙動です。

実装時の注意点

短縮URLと同じように、ユニークURL発行後に、パラメーターを追加することが出来ない
具体例では、https://sample.page.link/items のようなユニークURLを作成した場合、https://sample.page.link/items?id=1 にアクセスしアプリが起動しても、id=1 の部分がアプリから認識できません。

・ユニークURLは、そのページに直接アクセスすることは出来ない
必ず別URL、ストア、アプリのいずれかに遷移をします。
すでにWebサービスがあり、そのURLにアクセスした場合、アプリがインストールされていたらアプリで開く、としたい場合には利用できません。ユニークURL自体は、ページとして表示できないからです。

アプリやサーバー上で、動的にユニークURLの発行をすることが出来るので、idなどパラメーターの付加が必要であれば、idの数ぶん、動的であったり、事前にユニークURLを作成したりする必要があります。

ちなみに、ただの短縮URLのサービスとして使うことも出来ます。

実装方法

DeepLinkの設定と、Firebase上などでユニークURLの発行が必要です。
https://firebase.google.com/docs/dynamic-links?hl=ja

URLスキーム

用途

昔から存在する、リンクでアプリを起動する方法で、
メーラーやMap のような、ツールのアプリを作る場合に有用です。

map:// のように定義し、機能が同じであれば、別アプリであっても 同じ URL scheme をつかうのがよく、例えば Mapアプリであれば、どのアプリでも map:// に対応していれば、使う側は好きなアプリを選んでインストールできるため便利です。
つまり重複を前提に使います。

特定のURLスキームに対応するアプリが複数あった場合は、起動時に選択画面がでるため、ユーザーは一手間かかります。1つだけの場合にはアプリ選択は表示されません。

実装方法

iOS: URL Scheme に、独自の scheme を記載する。
Android: intent-filter に、httpsではなく、独自の sheme を記載する。


結果として、 Firebase Dynamic Links、Universal Link or App Links 両方の実装をすることになると思います。