チーム内で「ディープリンク」「ダイナミックリンク」「ユニバーサルリンク」等の用語の認識が合っているのか怪しかったので、整理してみました。
基本iOS開発者目線で書いてますが、実装寄りではなく概念寄りの内容なので、Android開発者でも読めると思います。
私の認識違いなどがありましたら、コメント欄にてご教示いただけますと幸いです。
※この記事ではURL/URIの区別を厳密に意識せず、より馴染み深い"URL"に統一して記述しています。
ディープリンク (Deep Link) とは
任意のアプリの任意の画面に遷移させるURL、またはそれを扱う仕組みの総称であり、概念を表す用語です。
スマホアプリで代表的なユースケースは以下のとおりです。
- スマホのブラウザでWebコンテンツ内のリンクをtapした際に、AアプリのX画面に遷移させる。
- Aアプリのボタンをtapした際に、BアプリのY画面に遷移させる。
ディープリンクを実現する仕組み
カスタムURLスキーム
- URLスキームとは、URLの“://”より前の部分で、リソースにアクセスするための手段を示します。
- http/https, ftp, mailto などなどが既定のURLスキームです。
- アプリ独自で決めたURLスキームをカスタムURLスキームと呼びます。myapp://hoge/fuga のようなURLになります。
- アプリでの設定/実装によって、カスタムURLスキームによるディープリンクを実現できます。
iOS/Androidでの実装方法については素晴らしい記事が他にたくさんあるので、他に譲ります。
カスタムURLスキームの弱点と注意点
- ブラウザやメールソフトからのカスタムURLスキーム起動においては「アプリがインストールされていない場合に○○する」という要件を満たすことが困難です(※「仕様を認識しているアプリ同士」においては可能です)。
- 誰かが管理しているわけではないので、他のアプリとスキームが競合する可能性があります。
- 端末内に同じカスタムURLスキームを持つアプリが複数インストールされている場合、
- Androidの場合、どのアプリを起動するかを選択するためのダイアログが表示されます。
- iOSの場合、バージョンによって違いがあるようですが先/後にインストールしたアプリが勝手に起動されます。
- したがって「ユーザーが気づかないうちに意図に反した挙動をしてしまう可能性がある」という弱点があり、それを狙った攻撃を「URLスキーム・ハイジャック」と呼びます。
URLスキーム・ハイジャックの事例解説記事:
iOS ユニバーサルリンク (Universal Links)
見た目は"https"で始まる単なるWebページのようなURLです。
iOS端末でユニバーサルリンクにアクセスすると、ターゲットのアプリがインストールされている場合は起動しますし、インストールされていない場合は任意のWebページを表示してくれます。
※リンクのtapにて直接App Storeへの遷移はできないため、当該Webページ内にApp Storeへのリンクを用意する必要があります。
この機能を使う前提作業として、関連づけファイル (apple-app-site-association/AASA) をWebサーバーに配置します。
「このドメイン・パスのURLリンクはこのアプリと関連づきますよ」という定義をするためのファイルです。
したがってAASAは、独自ドメインの、自前のWebサーバーに配置する必要があり、AASAにはアプリを一意にするBundle IDなどを設定します。
その他にアプリ側の対応(プロビジョニング・プロファイルとXcodeの設定、ハンドリングの実装)も必要です。
以上の設定と実装によって、iOS端末と、AASAを配置したWebサーバーとの間で内部的に連携して、URLリンクにアクセスした際に連携するべきアプリが決定されます。
公式ドキュメント:
参考リンク:
Android アプリリンク (App Links)
ユニバーサルリンクと同様の概念・機能ですので詳細は割愛します。
公式ドキュメント:
Firebase Dynamic Links
ユニバーサルリンク/アプリリンクは、カスタムURLスキームの弱点を解消した強力な仕組みではありますが、「自前のドメインとWebサーバーを用意し、OSごとに異なる"仕込み"を行う必要がある」というデメリットがあります。
Firebase DynamicLinksはその手間を解消することを主目的とし、
- 関連づけファイルを配置するWebサーバーをホスティングしてくれる
- Dynamic Links既定の
https://{任意のサブドメイン}.page.link
というドメインで使える、または独自ドメインも指定可能 - 関連づけファイルの設定をコンソール上から行える
というサービスです。
リンクを開いたユーザーのiOS/Androidデバイスにアプリがインストールされていない場合にストアに遷移し、インストール完了後にアプリを起動してリンクを開く、といったこともできます。
さらに「どこから流入してアプリをインストールしたか」といった解析サービスも付いています。
公式ドキュメント: