【Kotlin/Android】AppLinks(アプリリンク)の実装方法!アプリ起動とストア遷移
この記事からわかること
- Kotlin/AndroidでAppLinks(アプリリンク)の実装方法
index
[open]
\ アプリをリリースしました /
環境
- Android Studio:Narwhal Feature Drop
- Kotlin:2.0.21
- AGP:8.9.2
- Gradle:8.11.1
- macOs M1:Tahoe 26.0.1
- Android OS:15以降
AppLinks(アプリリンク)
Androidの「AppLinks」はディープリンクの一種でアプリを直接起動させることができるリンクのことです。AppLinksを使用することでリンククリック時にアプリを起動させるだけでなく、アプリ側で処理を記述しておくことで特定の画面を開いた状態で起動させたりデータのやり取りなどを行うことも可能になっています。
AppLinksでは設定したドメインにアクセスするだけで対象のアプリをインストール済みであれば開くことができ、未インストールであれば指定してWebページを表示できるようになります。
ディープリンクとの違い
同じようなディープリンクにディープリンクがあります。これは独自で設定した固有のスキーム(例:my-test-app://)を使用してアプリを起動させることができます。概ねやっていることは同じですが、細かい挙動に差があります。
| ディープリンク | AppLinks | |
|---|---|---|
| スキーム | 任意のスキーム | HTTPS |
| アプリ未インストール時の挙動 | 動作しない | Webページを開く |
| 競合のリスク | スキームが被ると動作しない | なし |
| セキュリティ | 低い(誰でも同名スキームを作成できる) | 高い(ドメイン所有証明済み) |
| 実装方法 | アプリで完結 | サーバーへの設置も必要 |
またこれらの仕組みはiOSでも同じような仕組みが存在します。
| Android | iOS |
|---|---|
| AppLinks | ユニバーサルリンク |
| ディープリンク | Custom URL Scheme |
AppLinks(アプリリンク)の実装方法
実装のSTEP
- AndroidManifest.xmlにintent-filterを追加
- サーバー側にDigital Asset Links(JSON)ファイルを設置
実装のSTEPは大きく分けると上記の2つです。どちらかというとサーバー側の作業の方が多い感じになります。またここからは中身を解説するために手動でセットアップする方法をまとめていきますがAndroid Studioの「App Links Assistant」(後述)を使用することで簡単に配置〜テストまで行うことができるので実際に実装する際はそちらを使用すると安全です。
AndroidManifest.xmlにintent-filterを追加
まずは「AndroidManifest.xml」に適切な設定を追加します。リンクで開きたいアプリ側のactivityのintent-filterに以下を追加します。ディープリンクとの違いはandroid:autoVerify="true"を付与することとscheme部分がhttps限定になることです。
<activity
android:name=".View.Activity.MainActivity" />
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="example.com"
android:pathPattern="/" />
</intent-filter>
</activity>
実際のリンク設定部分になるのはdataの中の設定値です。ここでスキームやホスト(ドメイン)、パスなどを細かく指定することが可能です。
- scheme:URLのスキーム部分。AppLinksの場合はhttps固定
- host:URLのホスト(ドメイン)部分。アプリ名とかにしておくとわかりやすいかも
- pathPattern:パス情報。Activityごとに違う値を入れたりなど
例えば上記のように設定するとhttps://example.com/です。AppLinksが動作する想定になります。https://example.com/myAppとしたい場合はpathPatternをandroid:pathPattern="/myApp"と修正します。
アプリが既に起動中の場合にリフレッシュされないようにする
アプリが既に起動済みの場合は毎回新しいアクティビティが作成される可能性があります。これを防ぐにはandroid:launchMode="singleTask"を追加しておくことで既存の MainActivityがあれば再利用されるようになります。
<activity
android:name=".View.Activity.MainActivity"
android:launchMode="singleTask" />
サーバー側にDigital Asset Links(JSON)ファイルを設置
サーバー側に設置するファイルの中身はただのJSON形式なので必要な情報だけ用意して作成していきます。
必要なもの
- パッケージ名
- リリース(orデバッグ)証明書のSHA256フィンガープリント
中身は以下のような形式で記述します。パッケージ名などを自身のものに置き換えてください。ちなみにこのファイルはこちらで必要事項を入力するだけで自動生成することも可能になっています。
[
{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.app",
"sha256_cert_fingerprints": [
"12:34:AB:CD:..."
]
}
}
]
リリース証明書のSHA256フィンガープリントは以下のコマンドで取得することができます。
$ keytool -list -v -keystore release.keystore
デバッグビルドでテストしたい場合は以下のコマンドを実行してデバッグビルドのSHA256フィンガープリントを取得し、sha256_cert_fingerprintsの中に追加しておけばOKです。
$ keytool -list -v \
-keystore ~/.android/debug.keystore \
-alias androiddebugkey \
-storepass android \
-keypass android
"sha256_cert_fingerprints": [
"12:34:AB:CD:...(リリース)",
"56:78:AB:CD:...(デバッグ)"
]
1.サーバーのルート直下に.well-knownを用意し配置
配置する場所はルート直下に.well-knownディレクトリを作成してその直下に配置します。パスを細かく指定していた時してもルート直下の.well-knownに設置すればOKです。これでAppLinksが動作するようになります。
├── ドメインディレクトリ
│ ├── public_html
│ ├── .well-known
│ ├── assetlinks.json
正常に動作するかテスト(検証)する
設定したAppLinksが正常に動作する方法を紹介します。まず簡単にサーバーサイド側の設定が正しく動作しているかをチェックする方法です。これは自動生成を行えるこちらにテスト機能をついており、「Success! Host https://example.com/ grants app deep linking to com.example.app.」と出れば正しく設定できていることになります。
デバッグ用のフィンガープリントを登録していれば問題なく、エミュレーターでも実機でも開発ビルドで動作を確認することも可能です。サーバーへの設置が完了した後に開発ビルドをインストールして対象のURLをChromeなどの検索画面に入力してみるとアプリが起動することを確認できると思います。
AndroidのAppLinksはiOSのユニバーサルリンクとは異なりページを開いた際に以下のような確認ダイアログは表示されずにそのままアプリが起動します。
アプリ内からデータを取得する
AppLinksでアプリを起動した場合はIntentの中からUri形式でAppLinksのURLがそのまま取得することができるようになります。なのでここからクエリパラメータなどを取得しアプリ内でハンドリングさせることも可能です。
val appLinkIntent: Intent = intent
val appLinkAction: String? = appLinkIntent.action
val appLinkData: Uri? = appLinkIntent.data // https://example.com?ref=invite123
val ref = intent.data?.getQueryParameter("ref")
if (ref != null) {
saveReferral(ref)
}
App Links Assistantを使ってセットアップする
ここまで手動でセットアップする流れを記載しましたがAndroid Studioには「App Links Assistant」が備わっており、これを活用することでGUI操作で設定を行うことが可能になります。上部メニューの「Tools」>「App Links Assistant」>から起動させることができます。既存で登録済みであればリストに表示され、なければ「Create AppLink」をクリックします。
ここからは手順にしたがって必要事項を入力していくだけです。フィンガープリントの取得からコードの記述・テストなども自動で行なってくれるので初心者でも簡単に設定することができます。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。







