UniversalLinks (ユニバーサルリンク)とは
ユニバーサルリンクは、iOSバージョン9以降で使用することができるディープリンクの一種です。
ざっくり言うならWebページから、アプリを起動させることができます。
ドメイン以下のURLで発動/非発動を選べ、任意のページ(検索結果など)をアプリで見せたいなどの使い方ができます。
UniversalLinks (ユニバーサルリンク) 詳しい説明
詳しい使い方やユニバーサルリンクの説明は、
・URLスキーム・独自ディープリンク実装に代わる、Universal Links(iOS 9で導入)でより良いUXを実現
・初めてのユニバーサルリンク(Universal Links)
を参考にしてください!
パラメータには対応していない
アプリの起動数を増やしたりするのに便利な、この機能ですが、残念なことがあります。
なんとURLにしか対応しておらず、パラメータ(?マーク以下)やフラグメント(#マーク以下)では発動/非発動を選べません。
しかし、なんとWWDC2019で嬉しい発表がありました。
なんとiOS13からユニバーサルリンク用の設定ファイル「apple-app-site-association」(長いから「ユニファイル」と呼びたい)の書き方が変わり、パラメータ(?マーク以下)やフラグメント(#マーク以下)にも対応されるようになりました!
新しいapple-app-site-associationの書き方
パラメータ対応させられるapple-app-site-associationの書き方になります。
ちなみに、既存の書き方はこちらからどうぞ。
apple-app-site-associationのpaths(遷移対象パス)の作り方(UniversalLinks対応)
すごくわかりやすいです。
パラメータ対応させられるapple-app-site-association
{
"applinks": {
"details": [
{
"appIDs": [ "ABCDE12345.com.example.app", "ABCDE12345.com.example.app2" ],
"components": [
{
"#": "no_universal_links",
"exclude": true,
"comment": "「#no_universal_links」がついている場合、ユニバーサルリンクが発動しません!"
},
{
"?": { "param": "?*" },
"exclude": true,
"comment": "「?param=」のパラメータがついていたら発動しません!"
},
{
"/": "/help/website/*",
"exclude": true,
"comment": "ドメイン直下が「/help/website/」から始まる時、発動しません!"
},
{
"/": "/buy/*",
"comment": "ドメイン直下が「/buy/」から始まる時、発動します!"
}
]
}
]
}
}
注意
この書き方をしてapple-app-site-associationを更新してしまうと、iOS12以前ではユニバーサルリンクが発動しなくなります。iOS13以降でしか発動しなくなるので、注意してください。
変更点
iOS12以前との違いは
- 「"App": []」がなくなる
- 「"appID"」が「"appIDs"」に変更
- 1つずつ書いていた「appID」を「appIDs」として配列として記載
- 「paths」が「components」に変更
- この中に、ユニバーサルリンクの発動/非発動の条件を書く
大雑把に言うとこの3点が変更点です。
「components」説明
- ユニバーサルリンクの発動条件の優先順位は、iOS12以前と同じく上から適用されます。
- 発動/非発動の条件を1ブロックごとに書いていきます。
- 「"/": ""」
- 条件の記載
- URLを記載
- 「"?": {"キー":"バリュー"}」
- 条件の記載
- パラメータを記載
- 「"#": ""」
- 条件の記載
- フラグメントを記載
- 「"exclude": true」
- iOS12以前の「NOT」と同じ役割。これがあると、その条件を非発動にできる
- 「"comment": ""」
- コメント
- 「"/": ""」
参考
- URLスキーム・独自ディープリンク実装に代わる、Universal Links(iOS 9で導入)でより良いUXを実現
- 初めてのユニバーサルリンク(Universal Links)
- apple-app-site-associationのpaths(遷移対象パス)の作り方(UniversalLinks対応)
- https://developer.apple.com/documentation/safariservices/supporting_associated_domains_in_your_app
違いなどありましたらコメントや@gurensouenにご連絡を頂けますと幸いです。
Githubはこちら
それでは、素敵な開発ライフを。