問題は、Android 12 以降でリンクを介してアプリケーションを開くことです。
Android の下位バージョンではすべて正常に動作します。
「アプリ情報」→「デフォルトで開く」画面を見ると、承認されていないリンクが表示されます。
サポートされている Web アドレス内でそのリンクを承認済みとしてオンにすると、リンク経由でアプリを開くことができます。
Android ドキュメント内でインテント フィルターの検証について読みましたが、すべて問題ないように見えます。
https://developer.android.com/training/app-links/verify-site-associations#add-intent-filters
.well-known/assetlinks.jsonをドメインに追加しましたhttps://my.domain.net/.well-known/assetlinks.json.well-known/assetlinks.jsonの内容(生成され、チェックされたhttps://developers.google.com/digital-asset-links/tools/generator)
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target" : { "namespace": "android_app", "package_name": "my.package.name",
"sha256_cert_fingerprints": ["SHA_256"] }
}]
正しい SHA_256 を使用していることを 3 回確認しました。
また、上記のリンクにある「ステートメント リスト ジェネレーターとテスター」で .json が問題ないかテストしました。
AndroidManifest.xml 内のインテント フィルター
<intent-filter
android:autoVerify="true"
android:label="@string/login_to_app">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="my.domain.net"
android:pathPrefix="/${dynamicVar}/our/application/"
android:scheme="https" />
</intent-filter>
また、SHA 証明書や Play ストア関連の問題ではないことを確認するために、アプリケーションを Play ストアにアップロードしましたが、違いはありませんでした。
また、アプリ パッケージ名を確認しましたが、内部テストとデバッグの両方で正しいことがわかりました。
念のため、アプリ パッケージ名のすべての組み合わせを追加する方法も試しました。
簡単に言うと、サポートされていない Web アドレスのため、Android 12 以降でリンク経由でアプリケーションを開くことはできません。
リンクは .well-known/assetlinks.json で検証する必要があることは承知しています。サポートされている Web アドレスを手動で確認すると完璧に機能しますが、それが最終的な解決策ではありません。
ここで何を見逃しているのか分かりません。
ここで私が何を間違っているのか、誰か分かるでしょうか?
ベストアンサー1
何が変わったのでしょうか?
Android 12 からは、サポートされている Web ドメインを確認する新しい方法が導入されました。
Android の下位バージョンは変更されません。
Android 12 での検証はどのように機能しますか?
アプリケーションのインストールについてAndroid は、インテント リンク内のドメインに非同期リクエストを送信して、.well-known/assetlinks.json が存在し、有効かどうかを確認します。
注記
デジタル資産ツールからの検証前にアプリケーションをすでにインストールしている場合は、Web サイトの更新されたファイル (assetlinks.json) が検出されません。そのため、アプリケーションを正しく動作させるには、再インストールする必要があります。
assetlinks.json を生成するにはどうすればいいですか?
このファイルを生成するには、Google が提供するこのツールを使用することをお勧めします。assetlinks.json が存在し、正しく設定されているかどうかも確認できます。
ジェネレーター:https://developers.google.com/digital-asset-links/tools/generator
SHA-256 フォームはどこで入手できますか?
- Android Studioを開く
- プロジェクトを開く
- Gradleをクリックします(右側のパネルにGradleバーが表示されます)
- 更新をクリックします(Gradleバーから更新をクリックすると、リストが表示されます)
- プロジェクトのGradleスクリプト)
- プロジェクトをクリックします(プロジェクト名のリスト(ルート))
- タスクをクリック
- Androidをクリック
- signingReport をダブルクリックします (実行バーに SHA1 と MD5 が表示されます (Gradle コンソールに表示される場合もあります))
- アプリケーションを実行またはデバッグするには、モジュール選択ドロップダウンからアプリモジュールを選択します。
.json ファイルを生成したら、それをドメインのルート (.well-known/assetlinks.json) 内に配置します。
念のため手動で開くことをお勧めします。
https://my.domain.com/.well-known/assetlinks.json
アプリケーションでインテントリンクを設定する
AndroidManifest.xmlに以下を追加します
<!-- Make sure you explicitly set android:autoVerify to "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" />
<!-- If a user clicks on a shared link that uses the "http" scheme, your
app should be able to delegate that traffic to "https". -->
<data android:scheme="http" />
<data android:scheme="https" />
<!-- Include one or more domains that should be verified. -->
<data
android:scheme="https"
android:host="**my.domain.com**"
android:pathPrefix="/test" />
</intent-filter>
インテント リンクが機能しているかどうかを手動でテストします。
エミュレータを実行している状態でこのコマンドを実行すると、アプリケーションが開きます。
adb shell am start -W -a android.intent.action.VIEW -d "https://my.domain.com/test?code=abcde"
インテントリンクを手動でテストする
- 更新されたドメイン検証プロセスをサポートする
adb shell am compat enable 175408749 PACKAGE_NAME
- デバイス上の Android アプリリンクの状態をリセットする
adb shell pm set-app-links --package PACKAGE_NAME 0 all
- ドメイン検証プロセスを開始する
adb shell pm verify-app-links --re-verify PACKAGE_NAME
このコマンドを実行した後、アプリがドメインを確認するまで少なくとも 1 分間待つことが非常に重要です。
- 検証結果を確認する
adb shell pm get-app-links PACKAGE_NAME
このコマンドの出力は次のようになります。
com.example.pkg:
ID: 01234567-89ab-cdef-0123-456789abcdef
Signatures: [***]
Domain verification state:
my.domain.com: verified
sub.example.com: legacy_failure
example.net: verified
example.org: 1026
その後は準備完了です。インテント リンクは Android 12 以前で機能します。
すべてが正しく設定されているかどうかを確認するための最終テスト
走る:
adb shell am start -W -a android.intent.action.VIEW -d "https://my.domain.com/test?code=abcde"
ソース:https://developer.android.com/training/app-links/verify-android-applinks