【Android】AppLink対応に必要なJsonファイルの作成手順まとめ

# はじめに
いつからか不明ですが、PlayConsole上でAppLinkに対応していないDeepLinkがエラーとなるようになりましたね。
このエラーを解消しない限りAndroid12からは想定通りの動作をしないわけですが、この問題を解消するためには指定のパスへJsonファイルを配置し、検証する必要があります。
今回はこのJsonファイルの作り方を備忘録的にまとめておこうと思います。

# AppLinkとは？
そもそも事の発端であるAppLinkとは何かというのを簡単にまとめておこうと思います。

> ユーザーを Android アプリの特定のコンテンツに直接誘導する HTTP URL です。Android アプリリンクはアプリへのトラフィックを増やし、よく使用されているコンテンツを把握するのに役立ちます。ユーザーにとっては、インストールしたアプリ内のコンテンツを見つけたり、共有したりするのが簡単になります。

とのことです。
よりユーザビリティに特化した機能ということで、Android12からはほぼ対応が必須となっている重要な技術ですね。

※ちなみに必須と述べていますが、Android12からDeepLinkが使えないということではありません。
この対応をしていないアプリはアプリの設定からDeepLinkを許可しなければならず、ユーザビリティが著しく低下するためほぼ対応必須ということです。

# AppLink対応に必要なJsonファイルの作り方
本題に入りますが、AppLinkに対応するため、現状定義されているLinkの所有権を証明する必要があるわけですが、この所有権を証明する為にJsonファイルを配置する必要があります。

このJsonファイルはAndroidStudio上で作成する機能があるので以下より順に説明していきます。

まず、全体検索より【AppLink】と検索し、AppLinkAssistantを表示します。

![スクリーンショット 2023-11-19 16.25.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/f91e5546-54c5-e63b-754f-a3381ec29692.png)

AppLinkAssistantを選択すると、以下画面が表示されるかと思います。

![スクリーンショット 2023-11-19 16.27.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/282f39f1-baec-6a1b-c480-99416b70ccac.png)

上記画面上に振られている番号の通り設定を進めていくことになります。
まず①の【Add URL intent filters】内の【Open URL Mapping Editor】を選択します。

![スクリーンショット 2023-11-19 16.30.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/49d17b1b-2ef5-6a5d-c6a7-e896a40e4bb4.png)

すると上記画面が表示されるかと思いますが、ここに定義されているlinkの一覧が記載されます。
このリンクに対してJsonファイルを作成することになります、リンクを選択するとプレビューが表示されますので対象のリンクか確認することができます。

また、ひとつ注意点として、ここで選択を行うと対象のリンクの定義が古かったり警告が表示されていたりすると、自動的に最適な記述へフォーマットされますので、差分を確認してもらった方が良いと思います。

確認が済んだら対象のリンクを選択している状態で②の【Select Activity】より次に進みます。

![スクリーンショット 2023-11-19 16.37.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/b30e3863-cbf3-9269-f0bc-9d3cc0a85e81.png)

【Select Activity】を選択すると、上記画面が表示されます。
この画面上で先ほど選択したLinkに対し適切なActivityを選択します。
また、Activityを選択した状態で【InsertCode】を選択することにより、対象Activityに対し、以下コードを追加することが可能です。

```main.kt
// ATTENTION: This was auto-generated to handle app links.
val appLinkIntent: Intent = intent
val appLinkAction: String? = appLinkIntent.action
val appLinkData: Uri? = appLinkIntent.data
```

Activityを選択し、必要に応じてInsertCodeに対応したら、③の【Open Degital Asset Links Files Generator】より次に進みます。

![スクリーンショット 2023-11-19 16.43.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/8074fd99-1517-96e9-6254-a0b9542725eb.png)

Generatorボタンより次に進むと、上記のような画面が表示されます。
この画面でJsonファイルに適用する具体的な情報を設定します。

①は今回の対象となるLink情報になります。

②は対象となるApplicationIDを設定します。
注意点として、検証環境の場合debugなどのプレフィックスをつけているケースがありますが、後述するfingerprintと一致する環境のidを設定する必要があります。

③ここが最も重要だと思いますが、紐ずくFingerprintの元になる署名情報を設定します。
この時、BuildValiantに定義されている設定か、署名ファイルからかを選択できるので、どちらか都合の良い方を選択します。

これで一通り設定、確認が済んだら、【Generate Digital Assent Links Fire】よりJsonファイルを作成します。
作成するとpreview情報や配置先情報と共に【SaveFile】ボタンよりJsonファイルを取得することが可能です。

これで作成手順としては以上になります。
あとは作成したJsonファイルを指定の場所へ配置すれば良いわけですが、各環境へ適用したい場合などは、直接Jsonファイルをいじる形になります。
例えば、Fingerprintへ検証用の署名情報と本番用の署名情報を記載するなどです。
発行したJsonファイルを適切な形へ修正した後、適切な配置先へ配置することでPlayConsole上でエラーを解消可能なはずです。

AppLinkの検証の仕方などは以下にも記載がありますので、ぜひ参考にしてみてください。

https://developer.android.com/training/app-links/verify-android-applinks?hl=ja

# さいごに
Android12対応は流石にもう済んでいる方が大半だと思いますが、今回のAppLinkに関しては漏れてしまっているケースもありそうなので、その場合は上記を参考にしていただけたら幸いです。