私のアプリはインテントフィルターを定義して、サイトによって定義されたURLを処理します。
<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:Host="www.Host.com" Android:scheme="http"/>
</intent-filter>
<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:Host="www.Host.com" Android:scheme="https"/>
</intent-filter>
アプリは正しいホストのURLを正しく検出しますが、アプリまたはブラウザーで開くかどうかをユーザーに照会します。ここで指定されているアプリリンク検証を使用してみました: https://developer.Android.com/training/app-links/index.html
私のサーバーログに見られるように、アプリをインストールするとき、デバイスは/well-known/assetlinks.jsonを照会し、200ステータスで応答します。を使用してデジタル資産ファイルをテストする
https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://<domain1>:<port>&relation=delegate_permission/common.handle_all_urls
APIとエラーが見つかりませんでした。
Assetlinks.jsonファイルのSHA256は、次を使用して取得されました
keytool -list -v -keystore my-release-key.keystore
アプリが署名されたのと同じ.keystore。
ランニング adb Shell dumpsys package d
は、リンク検証ステータスが「確認」であることを返し、検証が失敗したことを意味します。検証が失敗するのはなぜですか?
私たちにとっては、Windowsの行末です!
「 https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://domain1:port&relation=delegate_permission/common.handle_all_urls 」を使用したテストは非常に貴重であることが証明された「ステートメントリストを解析できませんでした(有効なJSONではありません)」エラーが発生したため、問題が発生しました。
ヒント:Android Studio App Links Assistantで[ファイルを保存]ボタンを使用するのは良いことでした。この問題があります。
私にとっては、すべての基本をチェックすることになりました。
あなたが二度チェックすべきいくつかの一般的な落とし穴があります(あなたが間違ったことをしたとは言いません。それは単なるチェックリストです):
assetlinks.json
が有効であり、https://example.com/.well-known/assetlinks.json
からアクセスできるように保存されていることを確認して、https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site= https://example.com&relation=delegate_permission/common.handle_all_urls
にアクセスする必要があることを確認してください。<intent-filters>
タグを含む<data>
の属性がAndroid:autoVerify="true"
であることを確認してください。<meta-data>
タグに必要な<application>
タグがあることを確認します。
<meta-data
Android:name="asset_statements"
Android:resource="@string/asset_statements"/>
asset_statements
文字列の内容は次のとおりである必要があります。
<string name="asset_statements" translatable="false">[{\"include\": \"https://example.com/.well-known/assetlinks.json\"}]
デバッグ用のリリース署名証明書も使用します(誤ってアップロードすることを恐れないでください)build.gradle
でこれを使用します。
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
debug {
debuggable true
signingConfig signingConfigs.release
}
}
そこで問題を解決しました。誰がそれをやったのかわからない(組み合わせだったかもしれない)が、これは私がやったことだ:
最初にこの問題に直面したのは、ネットワークがアプリのリンクを確認するためにGoogleのサーバーへの呼び出しをブロックしていたためです。
OPおよびその他の回答が触れられているように、一般的にエンドポイントへのAPI呼び出しは次のとおりです。
digitalassetlinks.googleapis.com
選択ダイアログをバイパスするには成功する必要があります。これはAndroidシステムがDigital Asset Link JSONファイルを検証するために行うWeb呼び出しであり、アプリのインストール/更新時に行われるようです。検索するのに役立つ場所はLogcatです。 「I/SingleHostAsyncVerifier:」というテキストが含まれるアイテムログの最後に「-> true」が表示される場合、アプリは
しかし最近、これらの呼び出しは、最近導入された可能性のあるバグと思われるものが原因で失敗しました。デバイスは上記のAPI呼び出しからこの応答を受信しています:
エラー:使用不可:{Host} /。well-known/assetlinks.json( '{Host} /。well-known/assetlinks.json'と同等)からステートメントをフェッチしているときに、HTTP応答ヘッダーのコンテンツタイプが間違っています:expected ' Content-Type:application/json 'ですが、{Host} ./。well-known/assetlinks.jsonからWebステートメントをフェッチしているときにtext/html [11]が見つかりました
これらのリクエストを最後に確認してからしばらく経ちましたので、以前はどのように見えたか覚えていません。しかし、App LinksまたはAndroidネットワークフレームワーク、この機能のためにプロトコルバッファーに切り替えた(そして別の機能でサポートするのを忘れていた)を含む最近の更新があった可能性があります) 。
状況が変わった可能性があることのもう1つの兆候は、今日のリクエストパスが以前の回答で言及したものと異なるように見えることです。
https://digitalassetlinks.googleapis.com/google.digitalassetlinks.v1.AssetLinks/Check
私にとっては、それは私のassetlinks.json
ファイルがUTF-8であり、バイトオーダーマーク(BOM)を含んでいたという事実でした。ファイルの先頭にある3バイトのマジックナンバー。エンコードを使用プログラムに通知します。 BOMはオプションであり、明らかにGoogle/Androidツールはそれを見るのを好まない。Googleのデジタル資産リンク検証ツール(以下のURL)は、「不正なJSON」エラーを表示した。
Visual Studioを使用している場合、ファイルにBOMがあるかどうかを確認し、必要に応じて削除する方法は次のとおりです。
EF BB BF
で始まる場合、それが問題です。ファイルの確認に使用できるURLは次のとおりです(example.comを実際のURLに置き換えてください)。
2つの場合のシステムアプリ選択ウィンドウ
1)ユーザーは、設定>アプリ>ギアアイコン>リンクを開く>アプリを選択する>サポートされているリンクを開く>毎回プロンプトを選択することで、リンクを開く関連設定を変更します。
2)デフォルトのアプリはユーザーによって設定されておらず、アプリのリンクがサポートされているアプリのいずれかで自動検証が有効になっていません
あなたの場合、自動検証が有効になっていると思いますので、ユーザー設定を確認してください。
私にとっては、assetlinks.json
トリミングを含む空白および改行。
私の場合、adb Shell dumpsys package d
は、packageName
がassetlinks.json
で正しく構成されていないことを明らかにしました。 AndroidManifest.xml
でpackage
タグのmanifest
属性値を使用していましたが、Android.defaultConfig.packageId
ファイルでbuild.gradle
値を使用する必要がありました。