38
31

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

iOS Universal Links対応のTipsとハマりどころ

Posted at

ユニバーサルリンクをQiitaのいくつかの記事も参考になったのでそのまとめと、他のプロダクトへの対応もあるので備忘録的Tipsにまとめました。

■Universal Links とは

Universal Links とは、Webサイトのリンクをクリックした時にiOSのアプリを起動させるAppleの手法です。(iOSバージョン9以上で利用可能)。
また、URLスキームによる起動と異なり、「アプリを開きますか?」のポップアップは表示されない。

適用されるとページを開いた場合、少し下にスクロールすると下図のようなボタンが表示され、これをタップすると、アプリが起動します。
image.png

■Universal Links の仕組み

Associated Domainsで設定したドメインのapple-app-site-associationファイルが、アプリの初回起動時にApple CDN※ からダウンロードされ、ファイルに記載のあるパスのみ、タップ時にアプリに遷移するようになるというものです。

※iOS14未満は、アプリがインストール時に、associated domains に登録されているドメインのサーバからapple-app-site-association を直接取得

image.png

■Universal Linksの発動条件

  • ユニバーサルリンクが起動する/しないの条件についてはこちらの記事が参考になりました。


■実装作業 イメージ

  • 実装する作業は、大きく3つとなります。
  1. 関連づけファイル apple-app-site-associationをサーバに配置
  2. [Associated Domains](https://developer.apple.com/documentation/Xcode/supporting-associated-domains"Supporting Associated Domains")の追加
  3. アプリ起動時のハンドリング

詳しくは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 が機能しない。

image.png

###【対策案】

  • 解決するためには、リクエスト元の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で挙動が異なるため企画側とも認識合わせをしておく。
  • 見た目が同じのサブドメインを用意し、ユニバーサルリンクをサブドメインとするようにする。

image.png


###【課題④】ユニバーサルリンクを、短縮URLやリダイレクトするようにしてしまうと、機能しなくなります
image.png

※ 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以降だけでよい場合の遷移対象パス作り方は、こちらの記事が参考になります。

38
31
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38
31

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?