ユニバーサルリンクをQiitaのいくつかの記事も参考になったのでそのまとめと、他のプロダクトへの対応もあるので備忘録的Tipsにまとめました。
■Universal Links とは
Universal Links とは、Webサイトのリンクをクリックした時にiOSのアプリを起動させるAppleの手法です。(iOSバージョン9以上で利用可能)。
また、URLスキームによる起動と異なり、「アプリを開きますか?」のポップアップは表示されない。
適用されるとページを開いた場合、少し下にスクロールすると下図のようなボタンが表示され、これをタップすると、アプリが起動します。
■Universal Links の仕組み
Associated Domainsで設定したドメインのapple-app-site-associationファイルが、アプリの初回起動時にApple CDN※ からダウンロードされ、ファイルに記載のあるパスのみ、タップ時にアプリに遷移するようになるというものです。
※iOS14未満は、アプリがインストール時に、associated domains に登録されているドメインのサーバからapple-app-site-association を直接取得
■Universal Linksの発動条件
- ユニバーサルリンクが起動する/しないの条件についてはこちらの記事が参考になりました。
■実装作業 イメージ
- 実装する作業は、大きく3つとなります。
- 関連づけファイル apple-app-site-associationをサーバに配置
- [Associated Domains](https://developer.apple.com/documentation/Xcode/supporting-associated-domains"Supporting Associated Domains")の追加
- アプリ起動時のハンドリング
詳しくはAppleの [Allowing Apps and Websites to Link to Your Content](https://developer.apple.com/documentation/xcode/allowing-apps-and-websites-to-link-to-your-content?preferredLanguage=occ"Allowing Apps and Websites to Link to Your Content") ドキュメントにまとめられています
Qiitaでは、こちらの記事が参考になりました。
■Tips集
【1】開発環境のサーバのIP制限
###【課題】開発環境では、外部に公開しないためにIP制限をしている為、Universal Links が機能しない
- 外部公開しないため、IP制限CDNが webサーバ・アプリからも apple-app-site-association を取得することができなくなり、Universal Links が機能しない。
###【対策案】
- 解決するためには、リクエスト元のApple のIP がわからないので、全てのIPを許可してください。ただし、クローリングされないよう検証期間を決めてIP制限の解除をしてください。
【2】Universal Links の発動条件関連
念のため以下Appleの情報を確認してください。
###【課題①】apple-app-site-association を更新しても、すでにインストール済みのユーザはユニバーサルリンクは発動しない。
- 新規インストール時・アプリアップデート時のみapple-app-site-associationのファイルをダウンロードするため、apple-app-site-association だけを更新したい場合は、企画側とも事前にすり合わせが必要となる。
###【対策案】
- インストール済みのユーザーにすぐに変更を届けたい場合でも、OSの仕様上新規インストール時・アプリアップデート時にしかファイルが更新されないため、アプリの空リリースを計画しましょう。
###【課題②】apple-app-site-associationファイルをサーバに配置しても、すぐにUniversal Linkは発動しない
###【対策案】
- 反映されるまで待つしかないのですが、リリース版とTestFlight版でそれおれ反映される時間は異なるようですが
私が本番リリースしたときは、約1時間ほどかかりました。
こちらの記事が参考になりました。
###【課題③】同一ドメイン上では、アプリへ遷移ができない。※
※「同一ドメイン上ではアプリへ遷移しない」動作は、Androidではアプリへの遷移が可能となります。
iOS・Androidの挙動に注視して両OSのユニバーサルリンク及びAppLinks対応を判断してください。
###【対策案】
- iOSとAndroidで挙動が異なるため企画側とも認識合わせをしておく。
- 見た目が同じのサブドメインを用意し、ユニバーサルリンクをサブドメインとするようにする。
###【課題④】ユニバーサルリンクを、短縮URLやリダイレクトするようにしてしまうと、機能しなくなります
※ Androidは、アプリへの遷移が可能となります。
iOS・Androidの挙動に注視して両OSのユニバーサルリンク及びAppLinks対応を判断してください。
###【対策案】
- 短縮URLは使用しない
- アプリ側にも短縮URLの解析処理が必要となりますが、短縮URLにユニバーサルリンクを発動させるように設定する。
【3】計測系に有益な情報
###【課題①】起動がユニバーサルリンクかどうか判断したい
- トラッキングとして、ディープリンクのスキーマ起動と分けて計測したい
###【対策案】
application(_:didFinishLaunchingWithOptions:)の中でユニバーサルリンク判断ができるとのことです。
こちらの記事が参考になりました。
###【課題②】Universul Linksが遷移元がわからない。
- 例えばGoogle検索結果のリンクから遷移したかなど知りたい。
###【対策案】
- iOS11から、アプリで遷移元を取得できるようになった。
こちらの記事が参考になりました。
https://qiita.com/keroppi0_0/items/4dbe542aba966dcc548f
【4】apple-app-site-associationの遷移対象パス作り方について
-
NOT
指定など発動させたくないURLなどでUniversal Linksの発動させる/発動させたくないURLの制御が可能です。細かくわけたいときは、工夫が必要です。 -
iOS12以下も発動させたい場合の遷移対象パス作り方は、こちらの記事が参考になります。
- iOS13以降だけでよい場合の遷移対象パス作り方は、こちらの記事が参考になります。