FlutterアプリでAndroid App Linksを設定してみた【2024/12】
この投稿は、2024年JINSのアドベントカレンダー2日目の記事です。
はじめに
以前iOSのUniversal Linksについて紹介しましたので、今回はAndroid App Links(以下App Links)について書いていきます!
App Linksとは
App Linksは、AndroidのためのDeeplink技術です
httpスキームとhttpsスキームを使用して、リンクからアプリを起動することができます
(例)https://example.com
をタップすると紐づいたアプリが開く
アプリをインストールしていない場合は、https://example.com
のWebページをブラウザで開く
Flutter公式通りにやってみる
Customize a Flutter application
go_router
はApp Linksのパスによって起動するアプリ画面を変えたい場合に必要になります
(例)App Linksでアプリ起動時はホーム画面を表示したい など
単純にアプリを起動するだけであれば設定は不要です
今回は割愛します
Modify AndroidManifest.xml
activityタグ内に下記を設定します
<activity
android:name=".MainActivity"
...
>
...
// ↓↓ここから下を設定する↓↓
<meta-data android:name="flutter_deeplinking_enabled" android:value="true" />
<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" />
</intent-filter>
// ↑↑ここまで↑↑
</activity>
詳細
<meta-data android:name="flutter_deeplinking_enabled" android:value="true" />
FlutterでApp Linksを設定する場合に必要なメタデータになります
<intent-filter android:autoVerify="true">
自動でURLの検証を行う設定です
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
上記3つの設定は必須になります
<data android:scheme="https" android:host="example.com" />
android:scheme
はhttp
とhttps
のみ設定できます
https
でアクセスできる必要があるため基本的にはhttps
のみでOKです
android:host
はassetlinks.jsonを配置しているドメインを設定します
Hosting assetlinks.json file
assetlinks.json
というファイルをサーバに配置します
サーバは各自用意する必要があります
下記例のようにアクセスできるようにします
例)https://example.com/.well-known/assetlinks.json
公式の参考例: assetlinks.json
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.deeplink_cookbook",
"sha256_cert_fingerprints":["FF:2A:CF:7B:DD:CC:F1:03:3E:E8:B2:27:7C:A2:E3:3C:DE:13:DB:AC:8E:EB:3A:B9:72:A1:0E:26:8A:F5:EC:AF"]
}
}]
詳細
package_name
Androidのパッケージ名(build.gradle
内のapplicationId
)を設定してください
sha256_cert_fingerprints
アプリ署名するときのSHA256フィンガープリントを設定します
SHA256フィンガープリントの確認方法
- Google Play Console
アプリのダッシュボードから、[テストとリリース]>[設定]>[アプリの署名]>[Digital Asset Links JSON]で確認することができます
まるっとコピーすればOKです!
- ローカルのKeystore
開発途中でローカルのKeystoreファイル(*.keystore or *.jks)でビルドしたアプリで確認したい場合もあると思います
その場合でもKeystoreファイルからSHA256フィンガープリントを確認できます
keytool -list -v -keystore <path-to-keystore>
パスワードを入力するとSHA256フィンガープリントを確認できます
※ただし、ローカルで発行した証明書のフィンガープリントは通常ユーザーのデバイス上の証明書と一致しないようですので注意が必要です→Tipsを参照
Testing
メモ帳
メモ帳にhttps://example.com/
を入力して、リンクをタップすることで検証することができます
adbコマンド
adb shell 'am start -a android.intent.action.VIEW \
-c android.intent.category.BROWSABLE \
-d "https://example.com"' \
<package name>
App Linksが動作しない時
App Linksが動作しない場合は、以下を確認してみてください
ドメインの関連付けができていない
ローカルの証明書でビルドした場合、関連付けができていない可能性があります
その場合は、アプリの設定から[デフォルトで開く]>[対応リンクを開く]で対象のリンクにチェックを入れます
assetlinks.jsonが公開されていない
assetlinks.jsonのサーバにアクセス制限をかけている場合は、検証ができないためApp Linksは動作しません
assetlinks.json配置後https://example.com/.well-known/assetlinks.json
にアクセスできるか試してみてください
フィンガープリントが異なる
ビルド環境ごとにそれぞれ証明書を作成している場合もあると思います
その場合は別の証明書のフィンガープリントを設定していないか確認しましょう
リダイレクトでドメインを実行する
リダイレクトでApp Linksのドメインを実行している場合は、App Linksは動作しません
まとめ
最初はローカル環境の証明書でビルドしたアプリで検証していたため動作せずにつまづいてしまいましたが、なんとか動作することができました
Androidの公式にもったいろんな設定の記載があったので、複数のドメインの設定や、pathの設定など実施して更新があればまたアップしていきたいと思います!
Discussion