この記事は去年社内ブログから投稿した記事です。一部削ってありますが参考になれば幸いです。
エンジニア以外の方にも読んでもらう意図があったため、わかりやすさを重視して一部適切とは言い難い表現もあります。
DeferredDeepLinkについて
Webサービスからモバイルアプリへのインストール誘導をする場合に、DeferredDeepLinkを利用する機会が増えてきています。 DeferredDeepLinkとはwebで開いてるページの情報をアプリに渡せる機能を持つDeepLinkです。例えばDeferredDeepLinkを使うとwebで開いていたレシピをアプリインストール後に表示させる事ができます。
DeepLinkとは
DeepLink
は一般名称でiOSではUnivresal Links
Androidでは Android AppLinks
という名前で呼ばれています。DeepLink
とはweb上のURLとアプリの特定の画面に紐付る技術のことで対応することでアプリの特定の画面ヘ直接遷移するリンクを作ることが出来ます。ややこしいですがDeferredDeepLinkを施策で利用する際にUnivresal Links
やAndroid AppLinks
の対応は必ずしも必須ではないです。遷移させたい画面へのDeferredDeepLinkが作成可能かどうかは担当のモバイルアプリエンジニアに相談してください。
DeepLinkの発展
DeepLinkの欠点はアプリを未インストールユーザーには対応できない点でした。そこで未インストールユーザーであってもアプリの特定のコンテンツヘ直接遷移するリンクを作る技術が開発されました。それがDeferredDeepLinkと呼ばれるものです。
DeferredDeepLinkを提供するサービス
DeferredDeepLinkはiOSやAndroid OSレベルで実装されているものではなく、2nd or 3rd partyのライブラリを使って実現されています。 いくつかのサービスがDeferredDeepLinkを提供しますがメリット・デメリットを考慮するとFirebase Dynamic Linksがオススメです。
Firebase Dynamic Links
- 遷移先
https://
から始まるURIに制限されるcookpad://
みたいなカスタムスキームは使えない
- 作成方法
- Firebase Consoleで"短いURL"を手動生成する
- Rest APIで"短いURL"生成する
- 動的に"長いURL"を生成する
- 長いURL:
- 短いURL:
- 例: https://example.page.link/axsfxf
- ドキュメント: https://firebase.google.com/docs/dynamic-links/rest
- REST APIによるURL作成制限: 1秒あたり 5回、1日あたり 200,000回
- 上限を増やす場合には申請が必要
- 計測:
- Firebase Consoleで生成した短いURL 下記のイベントが計測可能
- click
- redirect
- app_install(Android限定)
- first_open
- 長いURLとREST APIで生成したURL: Firebase上の計測は不可能。
- 共通事項:
- utm_paramsを設定可能でFirebaseConversionを利用して初回起動数のみ計測可能
- iOSは
ct
パラメータを付与してApp Store Connectからイベント別インストール数を計測が可能 - AndroidはFirebaseで設定したutm_paramsがPlayConsoleに渡らない仕様のためイベント別インストール数の計測は不可能
- Firebase Consoleで生成した短いURL 下記のイベントが計測可能
- クライアントSDK
- 通常の画面遷移処理に透過的に組み込める(Android)
- 画面遷移の遅延
- 多くのケースでPlayStoreから起動する際のIntentにDeepLinkが含まれているので、画面遷移は遅延はほぼない(Android)
- 費用
- 追加費用なし
プレビューページについて
Dynamic Linksを経由してiOSでアプリをインストールするとこのような中間ページを挟みます。
動作はやや不安定になりますがこの画面は設定でスキップすることも可能です。
参考までに私の関わっていたプロジェクトではスキップする判断をしました。
調査した所この画面ではクリップボードに情報を埋め込んでいてアプリから読み込めるようにしているようでした。スキップした場合はなにか別の方法でアプリに情報を伝えるようです。
ナビゲーション パラメータ elf:「1」に設定されている場合は、ダイナミック リンクが開いているときにアプリのプレビュー ページをスキップし、代わりにアプリまたはストアにリダイレクトします。アプリのプレビュー ページ(デフォルトで有効になっています)は、ユーザーがアプリでダイナミック リンクを開いたときにユーザーを最も適切な宛先に確実に転送できる手段ですが、ダイナミック リンクがアプリのみで開かれ、かつアプリがプレビュー ページなしでもダイナミック リンクを確実に開くことができることを前提とする場合は、このパラメータを使用してアプリのプレビュー ページを無効にすることができます。注: 現在アプリのプレビュー ページが表示されるのは iOS のみですが、将来的には Android でも表示される可能性があります。このパラメータは、両方のプラットフォームでダイナミック リンクの動作に影響します。
https://firebase.google.com/docs/dynamic-links/create-manually
引用元: 「アプリで開く」を実現する、Firebase Dynamic Linksの実装と運用Tips - ログミーTech
[重要] *.app.goo.glドメイン
古いFirebaseプロジェクトでは、*.app.goo.gl
というドメインが割り振られている事がありますが、これは現在のDynamicLinksと異なる振る舞いをするので非推奨です。xxx.page.link
を利用してください
Adjust
Adjustという広告系のサービスも検討したのでざっとだけ紹介します。
- 遷移先
- 任意のスキーマを指定可能(
cookpad://
など)
- 任意のスキーマを指定可能(
- 作成方法
- Webコンソールからの手動生成のみ
- 動的なURL生成には未対応
- 計測:
- web consoleからclick, app_installが計測可能
- クライアントSDK
- ログを仕込むと動かなくなったり不安定な印象(Android)
- 画面遷移の遅延
- 起動後にGETリクエストなげるので1~2s程かかる UXはFDLのほうが良い(Android)
- 費用(プランによります)
- プロジェクト全体で月1500アトリビューション(インストール)まで無料
- それ以降は1アトリビューション/10円
動作確認
Adjustで作成したリンクを動作確認する場合都度テストコンソールで検証する端末の情報を削除する必要があります。
手順は下記の通りです(iOS Android共通)
- Adjustのアカウントを入手する
- Adjust Insightというアプリを入れてGoogle ad IDを確認する
- testing-console から自分のad IDを検索して見つかった場合には削除する
Android App Links
App Links登場以前からAndroidはアプリの特定の画面ヘ直接遷移するリンクが作成可能でした。しかし特定のURLに紐づくアプリが複数ある場合にはどのアプリで開くかユーザーに判断が委ねられます。 例えばcookpadの場合はレシピのURLはブラウザとクックパッドアプリの2つで開くことが出来るのでアプリを選択する画面が表示されます。 App Linksはアプリの署名とドメイン情報をDigital Aseets Linkで証明することでアプリ同士に優先度を付けクックパッドアプリを優先的に表示させる機能です。
利用条件
- Digital Aseets Linkでの認証がintent-filterに登録している全てのドメインで有効である
- ドキュメントには曖昧な記載しかないが検証した所全てのドメインに対して認証が通らないと有効にならない
- intent-filterに
autoVerify=true
が記述されている
autoVerify属性はintent-filterに記述しますが一つでもautoVerifyが有効なintent-filterがあるとアプリケーション全体がAppLinksが有効になってしまい、ドメイン単位やパス単位で有効化するのは不可能です。
その他のAndroidアプリへの誘導
Firebase App Index
https://firebase.google.com/docs/app-indexing/?hl=ja
Firebase App IndexingはGoogleの検索結果にアプリの情報を載せる機能群の総称です。過去に何度も名前が変わったり、機能が増えたりしてわかりにくいのですがcookpadアプリでは有効になっているので注意が必要です。
2019年10月の地点ではCookpadアプリがインストールされている場合のみこのような導線が現れてAppLinksを有効にしていなくても検索結果からアプリに直接遷移します。 AppLinksを有効にした場合の動作検証際には注意が必要です。