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

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

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

・[URLスキーム・独自ディープリンク実装に代わる、Universal Links(iOS 9で導入)でより良いUXを実現]
(https://qiita.com/mono0926/items/2bf651246714f20df626)
・[初めてのユニバーサルリンク(Universal Links)]
(https://qiita.com/hashimotoryoh/items/583be4c8eddddd6ca452)

を参考にしてください！

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

しかし、なんとWWDC２０１９で嬉しい発表がありました。
なんとiOS１３からユニバーサルリンク用の設定ファイル「apple-app-site-association」（長いから「ユニファイル」と呼びたい）の書き方が変わり、パラメータ（？マーク以下）やフラグメント（＃マーク以下）にも対応されるようになりました！

[WWDC2019 UniversalLinks](https://developer.apple.com/videos/play/wwdc2019/717/)

## 新しいapple-app-site-associationの書き方
パラメータ対応させられるapple-app-site-associationの書き方になります。
ちなみに、既存の書き方はこちらからどうぞ。
　　[apple-app-site-associationのpaths(遷移対象パス)の作り方（UniversalLinks対応）](https://qiita.com/keroppi0_0/items/1a7fab4a8cc78412d30c)
すごくわかりやすいです。

パラメータ対応させられる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以前ではユニバーサルリンクが発動しなくなります。**iOS1３以降でしか発動しなくなるので、注意してください。

#### 変更点

iOS12以前との違いは 

 - 「"App": []」がなくなる
 - 「"appID"」が「"appIDs"」に変更
    - １つずつ書いていた「appID」を「appIDs」として配列として記載
 - 「paths」が「components」に変更
    - この中に、ユニバーサルリンクの発動/非発動の条件を書く

大雑把に言うとこの３点が変更点です。

#### 「components」説明
 - ユニバーサルリンクの発動条件の優先順位は、iOS12以前と同じく上から適用されます。
 - 発動/非発動の条件を１ブロックごとに書いていきます。
    - 「"/": ""」
        - 条件の記載
        - URLを記載
    - 「"？": {"キー":"バリュー"}」
        - 条件の記載
        - パラメータを記載
    - 「"#": ""」
        - 条件の記載
        - フラグメントを記載
    - 「"exclude": true」
        - iOS12以前の「NOT」と同じ役割。これがあると、その条件を非発動にできる
    - 「"comment": ""」
        - コメント

### 参考
 - [URLスキーム・独自ディープリンク実装に代わる、Universal Links(iOS 9で導入)でより良いUXを実現]
(https://qiita.com/mono0926/items/2bf651246714f20df626)
 - [初めてのユニバーサルリンク(Universal Links)]
(https://qiita.com/hashimotoryoh/items/583be4c8eddddd6ca452)
 - [apple-app-site-associationのpaths(遷移対象パス)の作り方（UniversalLinks対応）](https://qiita.com/keroppi0_0/items/1a7fab4a8cc78412d30c)
 - https://developer.apple.com/documentation/safariservices/supporting_associated_domains_in_your_app


違いなどありましたらコメントや@gurensouenにご連絡を頂けますと幸いです。
Githubは[こちら](https://github.com/isamiodagiri/UniversalLinks)
それでは、素敵な開発ライフを。