Universal Linksを実装した際にいくつかハマったことがあったので、覚書として残しておきます。
【おさらい】 Universal Linksとは
- iOS9〜利用可能
- 通常のWeb URL経由でアプリを起動できる
- アプリがインストール済み →アプリが起動する
- アプリが未インストール →Webページが開く
- Custom URL Schemeとは違って、
test-app://のような起動用URLは不要 - 「アプリを開きますか?」などのポップアップは表示されず、シームレスにアプリに遷移する
参考: URLスキーム・独自ディープリンク実装に代わる、Universal Links(iOS 9で導入)でより良いUXを実現 - Qiita
参考: iOS ディープリンク(Custom URL Scheme)でアプリを起動する | DevelopersIO
ハマりポイント
1. apple-app-site-associationファイルが反映されるタイミング(リリース版)
Universal Linksの仕組みは「Associated Domainsで設定したドメインのapple-app-site-associationファイルが、アプリの初回起動時にダウンロードされ、ファイルに記載のあるパスのみ、タップ時にアプリに遷移するようになる」というものです。
では、その後apple-app-site-associationファイルの内容に変更を加えた場合、反映されるのはいつでしょうか?
apple-app-site-association caching? | Apple Developer Forums
Universal Link not working on TestFlight | Apple Developer Forums
上記のサイトによると「アプリのインストール時・更新時に、アプリ側でapple-app-site-associationファイルがフェッチされる。その後、数日間に1回程度継続して取得される」そうです。
なお、これはAppStoreからリリース版アプリをインストールした場合のことであり、TestFlight版アプリの場合は少し事情が異なります(後述)。
アプリインストール済みのユーザーにすぐに変更を届けたい場合、アプリのアップデートや再インストールをしてもらうのが確実かもしれません。
2. apple-app-site-associationファイルが反映されるタイミング(TestFlight版)
「apple-app-site-associationファイルを書き換えたので、TestFlightを配布して検証したい」なんてことがあると思います。
Universal Link not working on TestFlight | Apple Developer Forums
上記サイトにあるように、TestFlight版アプリでapple-app-site-associationファイルがフェッチされるまでには、インストール後15分〜2時間程度かかります。
インストールしたからと言ってすぐにはすぐには反映されないので、お茶でも淹れて気長に待ちましょう![]()
3. apple-app-site-associationファイルのpathsの優先度
とあるサイトの全てのページをUniversal Links対応させたい場合、apple-app-site-associationファイルのpathsは以下のようになります。
"paths": ["*"]
しかし、そのサイトの中で/hoge/にだけは遷移させたくない場合、どの位置に記述したらいいでしょうか?
pathsは上に書いてある条件が優先されるため、以下のようにする必要があります。
"paths": ["NOT /hoge/", "*"]
以下だと"*"が優先されてしまい、除外が効かないので注意です。
"paths": ["*", "NOT /hoge/"]
参考: apple-app-site-associationのpaths(遷移対象パス)の作り方(UniversalLinks対応) - Qiita
4. 同一ドメイン上のUniversal Linksの有効性
https://hoge.comというWebサイトがあり、https://hoge.comをUniversal Linksの対象パスに設定した場合、サイト上からアプリへの遷移はできません。
参考: Swift 同一ドメインでのユニバーサルリンク(Universal Links)は動作しないので注意 - Qiita
5. SNS上のUniversal Linksの有効性
一部のSNSアプリに投稿されたURLは、タップしてもアプリへの遷移ができませんでした。
- LINE App →タップしてもLINE内のWebViewが開くだけ
- Facebook Messenger App →タップしてもMessenger内のWebViewが開くだけ
- Apple純正のメッセージApp →タップすると正常にアプリが起動した