カスタムURLスキームとユニバーサルリンクの違いを理解する
はじめに
ディープリンクとは、モバイルユーザーがURLをクリックした時に、ウェブサイトではなく、アプリを起動してアプリ内の関連ページに遷移させる技術です。
例えば下記のような挙動です
- メールから直接アプリを開く
 - ブラウザーでGoogle Mapsを開いた時に「アプリで開く」をクリックしたらアプリが立ち上がり、該当の画面に遷移する
 
メールやQRコード経由で直接アプリを開く必要があるプロダクトにとってディープリンク機能は特に必要です。
ディープリンクを実装する方法が2つあります。1つ目はカスタムURLスキーム、もう1つはユニバーサルリンクです。この記事ではその2つの仕様と違いついて話したいと思います。
カスタムURLスキームとは
カスタムURLスキームはmyapp://のよう、独自のURLスキームを利用してアプリを直接起動させるURLです。
例えば、以下のような形のURLです。
comgooglemaps://?center=40.765819,-73.975866&zoom=14&views=traffic
上記をGoogleマップアプリインストール済みのスマホで開くと、Googleマップアプリが起動されます。(アプリがインストールされてない場合は機能しません)
もしブラウザーで開く場合は以下のようなダイアログが出ますが、アプリがインストールされてない場合やユーザーが許可しない場合は機能しないので、注意が必要です。

また、カスタムURLスキームは他のアプリとスキームが重複する場合があります。その場合、AndroidだとそのURLを開きたいアプリを選択することができますが、iOSだとベージョンによって機能しない場合もあるため、注意が必要です。
| メリット | デメリット | 
|---|---|
| 実装が楽 | アプリをインストールしてない場合機能しない | 
| ユーザーの許可が必要 | |
| 他のアプリとスキームが重複する可能性がある | 
カスタムURLスキームは簡単に実装できます。アプリにカスタムURLスキームを登録(iOSの場合Xcodeで)したら、iOSがカスタムURLスキームを認知できるようになり、アプリが起動される仕様です。
詳しい実装方法については、以下の公式ドキュメントで確認できます。
ユニバーサルリンクとは
ユニバーサルリンクはAppleが開発した技術で、HTTPS URLでアプリを起動させることができます。
(※Androidは「アプリリンク」という類似の技術を利用します。)
ユニバーサルリンクの仕組みは少し複雑なため、Googleマップをブラウザーで開いた時を例として裏処理を簡単に話したいと思います。
- 
ユーザーがhttps://maps.google.comにアクセスする
 - 
iOSがhttps://maps.google.com/apple-app-site-association にリクエストを送る
 
すると、以下のようなJSONが返されます
{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "EQHXZ8M8AV.com.google.Dzimuth",
        "paths": [
          "/",
          "/maps",
- 上記のappIDを確認し、該当のアプリを開く
 
上記の対応が必要なため、ユニバーサルリンクの実装は少し複雑です。実装方法の詳細については公式ページで確認できます。
ユニバーサルリンクは(2)にてドメイン認証を行なっているため、セキュリティ的にも安全ですし、他のアプリとも競合しないメリットがあります。
| メリット | デメリット | 
|---|---|
| アプリがインストールされてない場合のフォールバックが入っている(Webにリダイレクト) | 実装が複雑 | 
| ユーザーの許可が不要 | |
| 他のアプリと競合しない | 
まとめ(TL;DR)
カスタムURLスキーム
- 
myapp://のよう形式のURLでアプリを起動させる - 実装が楽
 - アプリをインストールしてない場合は機能しない
 
ユニバーサルリンク
- HTTPS URLでアプリを起動させる
 - 実装が複雑
 - アプリをインストールしてない場合、WEBにリダイレクトする
 - セキュリティ的に良い
 
ユーザーが必ずアプリをインストールしていると保証できる場合はカスタムURLスキームで大丈夫ですが、それ以外の場合はユニバーサルリンクの利用がおすすめです。
Discussion