search
LoginSignup
21

More than 1 year has passed since last update.

posted at

updated at

Organization

UniversalLinks(ユニバーサルリンク)「apple-app-site-association」の書き方 パラメーター対応(iOS13以降)

UniversalLinks (ユニバーサルリンク)とは

 ユニバーサルリンクは、iOSバージョン9以降で使用することができるディープリンクの一種です。
ざっくり言うならWebページから、アプリを起動させることができます。
ドメイン以下のURLで発動/非発動を選べ、任意のページ(検索結果など)をアプリで見せたいなどの使い方ができます。

UniversalLinks (ユニバーサルリンク) 詳しい説明

詳しい使い方やユニバーサルリンクの説明は、

URLスキーム・独自ディープリンク実装に代わる、Universal Links(iOS 9で導入)でより良いUXを実現
初めてのユニバーサルリンク(Universal Links)

を参考にしてください!

パラメータには対応していない

アプリの起動数を増やしたりするのに便利な、この機能ですが、残念なことがあります。
なんとURLにしか対応しておらず、パラメータ(?マーク以下)やフラグメント(#マーク以下)では発動/非発動を選べません。

しかし、なんとWWDC2019で嬉しい発表がありました。
なんとiOS13からユニバーサルリンク用の設定ファイル「apple-app-site-association」(長いから「ユニファイル」と呼びたい)の書き方が変わり、パラメータ(?マーク以下)やフラグメント(#マーク以下)にも対応されるようになりました!

WWDC2019 UniversalLinks

新しい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": ""」
      • コメント

参考

違いなどありましたらコメントや@gurensouenにご連絡を頂けますと幸いです。
Githubはこちら
それでは、素敵な開発ライフを。

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
What you can do with signing up
21