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 →タップすると正常にアプリが起動した