簡潔な回答
自分でビルドをインストールするとTWAが全画面になるのに、Google Playからインストールするとブラウザバーが出る場合は、まずウェブサイトにPlayの署名証明書が記載されているかを確認してください。Play Consoleで Protected with Play の下にある Play app signing を開き、アプリ署名鍵の証明書のSHA-256をコピーします。それを https://your-domain/.well-known/assetlinks.json の sha256_cert_fingerprints 配列に追加し、HTTPSで、リダイレクトなしの直接のHTTP 200と application/json でファイルを配信してから、Playのテストトラックからインストールしたビルドで再度テストします。フィンガープリントがすでに一致している場合は、検証済みオリジンの外への遷移、リダイレクト、使用中のブラウザを確認してください。
この順番で直す
そのあと、自分でインストールしたビルドではなく、Google Playからインストールしたバージョンでテストしてください。
このガイドで扱う修正は1つだけです。ウェブサイトと、Google Playが配信するビルドとの関連付けです。TWA自体の作り方や、Playによるアプリの審査は扱いません。それぞれ下にリンクした専用のガイドがあります。ここで引用しているGoogleのページはすべて2026年10月16日に確認したもので、出典は末尾にまとめています。
このガイドの内容
Play版のインストールだけにブラウザバーが出る理由
Chromeは、インストールされたアプリに署名した証明書と、ウェブサイトが公開しているフィンガープリントを比較してTWAを検証します。ChromeのTWAクイックスタートによると、この検証に失敗した場合、ブラウザはサイトをCustom Tab(カスタムタブ)として表示する動作に切り替わります。この切り替えこそが、目に見えるアドレスバーの正体です。
Play App Signingを使う場合、証明書は通常2つあります。アップロードするバンドルには自分のアップロード鍵で署名し、Googleは配信するAPKにアプリ署名鍵で署名します。Chromeのウェブ開発者向けAndroidの概念のページには、Playストアからダウンロードされたときのアプリに対応するのはアプリ署名鍵のフィンガープリントだと書かれています。そのため、ローカルの証明書しか記載していないファイルは、手元では検証に通っても、Playからインストールしたすべてのスマートフォンで失敗します。
2つの鍵が常に異なるわけではありません。Androidのアプリ署名のドキュメントには、同じ鍵をアプリ署名鍵とアップロード鍵の両方として使う構成も説明されています。したがって、どちらの鍵かを思い込まず、実際の証明書を比較することが修正の基本です。
| ビルドの入手元 | 署名に使われた鍵 | assetlinks.jsonに必要なもの |
|---|---|---|
| Playのテストトラックまたは製品版からインストール | 署名に使われた鍵Playのアプリ署名鍵 | assetlinks.jsonに必要なものアプリ署名鍵の証明書のSHA-256。Play版のインストールを直すのはこれです。 |
| 自分のリリースAPKを手動でインストール | 署名に使われた鍵自分のアップロード鍵またはリリース鍵 | assetlinks.jsonに必要なものその鍵のSHA-256(これらのビルドも検証を通したい場合のみ) |
| Android Studioでのデバッグ実行 | 署名に使われた鍵ローカルのデバッグ鍵 | assetlinks.jsonに必要なものデバッグ用のSHA-256(デバッグビルドも検証を通したい場合のみ)。アプリケーションIDが異なる場合は、それ専用のステートメントが必要です。 |
| 内部アプリ共有のリンク | 署名に使われた鍵内部アプリ共有専用の別の鍵 | assetlinks.jsonに必要なものGoogleはこれらのアップロードを内部アプリ共有用の鍵で再署名するため、修正のテストはテストトラックで行ってください |
| 署名鍵のアップグレード後にリリースしたビルド | 署名に使われた鍵そのビルドにPlayが現在使っている証明書 | assetlinks.jsonに必要なものまだサポートしているビルドのすべての証明書。新しい証明書が表示されたという理由だけで、古いものを削除しないでください。 |
クローズドテストのテスターにも表示されます
クローズドテストのテスターはPlayで署名されたビルドをインストールするため、バーが最初に見つかるのはここであることがよくあります。これはクローズドテストの不具合ではありません。変わるのは、インストールされたAPKの証明書です。サイドロードしたAPKでしかテストしていないと、この問題をまったく見逃すことがあります。
Play Consoleでアプリ署名のSHA-256を見つける
現在、Google自身のドキュメントでは、同じ場所に対して2通りのラベルが記載されています。どちらも、アプリの左側メニューにある Protected with Play から始まります。
| Googleのページ | ルート | コピー元 |
|---|---|---|
| Play Consoleヘルプ:Play アプリ署名を使用する | ルートProtected with Play > Play Store distribution > Go to Play app signing | コピー元アプリ署名鍵(App signing key)のセクション |
| Android App Linksのドキュメント | ルートProtected with Play > Play Store protection > Manage Play app signing | コピー元App signing key certificate > SHA-256 certificate fingerprint |
古いガイド(Googleのページの一部を含む)では、今も Release > Setup > App signing や Setup > App integrity と書かれています。これらのラベルしか見つからない場合でも、探しているのは古い名前の同じページです。
Play Consoleでアプリを開く
TWAが使っているパッケージ名のアプリを選択します。アプリ署名鍵はアプリごとに異なります。
Play app signingに移動する
上の表のどちらのルートでもかまいません。どちらも、アプリ署名鍵とアップロード鍵が表示されるページに到達します。
アプリ署名鍵のSHA-256をコピーする
アプリ署名鍵のセクションから SHA-256 証明書フィンガープリントをコピーします。アップロード鍵のセクションではなく、SHA-1の行でもありません。コロンで区切られた16進数の文字ペアが32組並んだものです。全体をそのまま貼り付けてください。ブログ記事にある省略された例では検証に通りません。
該当するアプリ署名証明書はすべて残す
Googleの現在のヘルプページでは、量子耐性のあるハイブリッド署名について説明されており、その場合は3つの鍵のフィンガープリントをコピーします。新しい端末で使われる新しい従来型の鍵と耐量子の鍵、そして古い端末で使われる従来型の鍵です。ページにアプリ署名証明書が複数表示されている場合は、サポート対象の端末が受け取る可能性のあるものをすべて記載してください。これはその構成を使っているアプリだけに当てはまります。ほとんどのアプリでは、アプリ署名証明書は1つだけ表示されます。
自分で保有している鍵のフィンガープリントを読む
アップロード鍵やデバッグ鍵の場合は、Javaのkeytoolで同じ形式の値を表示できます。キーストアファイルとエイリアスを自分のものに置き換え、SHA256と書かれた行をコピーしてください。
keytool -list -v -keystore my-upload-key.jks -alias upload
多数のアプリを管理している場合は、Google Play Developer APIでも、Playが生成したAPKの証明書ハッシュ(生成済みAPKリストの certificateSha256Hash フィールド)を取得できます。1件だけ修正するなら、Play Consoleからコピーするほうが簡単です。
正しいassetlinks.jsonを作成して配信する
このファイルは、ステートメントのJSON配列です。TWAの場合、relationは delegate_permission/common.handle_all_urls で、targetはAndroidアプリです。つまり、namespaceの android_app、正確なアプリケーションID、そしてSHA-256フィンガープリントの配列を指定します。最小構成のファイルは次のとおりです。
[
{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.twa",
"sha256_cert_fingerprints": [
"PLAY_APP_SIGNING_KEY_SHA256",
"UPLOAD_KEY_SHA256"
]
}
}
]
com.example.twa を自分のアプリケーションIDに、各プレースホルダーをコロン区切りの完全なSHA-256に置き換えます。Play版のインストールだけ検証できればよい場合は、2つ目のエントリを削除してください。厳密なJSONのみ有効です。コメント、末尾のカンマ、SHA-1の値は使えません。
Googleが求めるファイルの配信方法
- 場所は完全一致。
https://your-domain/.well-known/assetlinks.jsonで、.well-knownの先頭のドットも必要です。example.comとwww.example.comは別のオリジンなので、アプリが開くオリジンそれぞれにファイルを公開してください。/app/.well-known/のようなサブディレクトリに置いたコピーは対象になりません。 - 直接のHTTP 200。GoogleのDigital Asset Linksのドキュメントには、「HTTP 200以外のサーバーからの応答はすべてエラーとして扱われ、空のステートメントリストになります」と書かれています。
- リダイレクトなし。301や302の応答はたどられません。httpからhttpsへの転送や、ドメイン名のみのアドレスからwwwへの転送も含みます。
- 有効な証明書チェーンを持つHTTPSと、
Content-Type: application/jsonヘッダー。200で応答するログインページやHTMLのエラーページは、有効なファイルではありません。
任意のターミナルから実際の応答を確認します。最初のステータス行が200で、コンテンツタイプがJSONであり、その前に3xxがないことが条件です。
curl -sI https://example.com/.well-known/assetlinks.json
複数のフィンガープリント、複数のアプリ
Androidのウェブサイトの関連付けガイドには、フィンガープリントの配列について「このフィールドは複数のフィンガープリントに対応しており、デバッグビルドと製品版ビルドなど、アプリの異なるバージョンをサポートするために使用できます」と書かれています。アップロード用やデバッグ用のフィンガープリントは、そのウェブサイトに本当に信頼させたいビルドについてだけ追加してください。別のデバッグパッケージなど、アプリケーションIDが異なるビルドには、配列内にそれ専用のステートメントが必要です。
BubblewrapまたはPWABuilderでTWAを作成した場合
既存のBubblewrapプロジェクトでは、Playのフィンガープリントを追加してファイルを再生成します。
bubblewrap fingerprint add "PLAY_APP_SIGNING_KEY_SHA256" --name="Play app signing"
bubblewrap fingerprint list
bubblewrap fingerprint generateAssetLinks
ファイルを生成しただけでは配置したことになりません。新しいassetlinks.jsonをウェブサイトにアップロードし、curlで確認してください。bubblewrap validate はPWAを品質基準に照らしてチェックするもので、署名の関連付けはチェックしません。そこで合格しても、フィンガープリントについては何も証明されません。PWABuilderの現在の手順書も署名について同じ点を指摘しており、「.aabファイルをアップロードすると、Google Playがアプリに再署名します」としたうえで、生成されたファイルにPlayのフィンガープリントを追加するよう案内しています。フィンガープリントの修正はウェブサイトの変更であり、アプリのバイナリの変更ではありません。
関連付けを検証してから、Play版のインストールをテストする
関わる層は4つあります。ウェブサイト上のファイル、GoogleのDigital Asset Links API、Android自身のリンク検証、そしてTWAを起動するブラウザです。1つの層を通過しても次の層が通る保証にはならないため、順番に確認し、最後は端末で確かめてください。
ウェブサイト上のファイル
上記のcurlによる確認を実行します。ほかの箇所を調べる前に、リダイレクト、誤ったコンテンツタイプ、200以外のステータスを修正してください。
GoogleのStatement List Generator and Tester
GoogleのStatement List Generator and Testerは、ドメイン、パッケージ名、SHA-256を入力すると、そのステートメントが存在するかをテストします。目で見て確かめる方法としては最も手早い手段です。
APIによる厳密なチェック
assetlinks.checkメソッドは、「この証明書を持つこのパッケージは、このウェブサイトと関連付けられているか」という1つの具体的な問いに答えます。オリジン、パッケージ、フィンガープリント、キーを置き換え、値をURLエンコードしたうえで、"linked": true があるかを確認してください。
https://digitalassetlinks.googleapis.com/v1/assetlinks:check?source.web.site=https%3A%2F%2Fexample.com&relation=delegate_permission%2Fcommon.handle_all_urls&target.android_app.package_name=com.example.twa&target.android_app.certificate.sha256_fingerprint=URL_ENCODED_SHA256&key=YOUR_API_KEY
sourceにはファイルのURLではなくオリジンを指定します。statements.listメソッドはウェブサイトが公開している内容を一覧表示するだけなので、リストが空でなくても、自分のパッケージと証明書が含まれていることの証明にはなりません。GoogleのガイドではAPIキーが求められます。認証エラーや割り当て(quota)のエラーはAPIへのアクセスの問題であり、関連付けの失敗ではありません。
ウェブサイトが公開しているすべての内容を確認するには、オリジンとrelationだけを指定するlistリクエストを使います。返されたtargetを読み、自分の正確なパッケージと証明書があるかを探してください。
https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https%3A%2F%2Fexample.com&relation=delegate_permission%2Fcommon.handle_all_urls
テスターがインストールするアプリ
サイドロードしたAPKや内部アプリ共有のリンクではなく、Playのテストトラックからインストールしてアプリを開きます。それでもバーが残る場合は、adbでChromeの検証ログを読みます。Chromeのドキュメントによると、Statement failure matching fingerprint. と表示される場合、アプリの署名がassetlinks.jsonと一致していません。
adb logcat -v brief | grep -e OriginVerifier -e digital_asset_links
Android StudioのApp Links Assistant(Tools > App Links Assistant)は、Android App Linksの関連付けとマニフェストをチェックします。それらの確認には便利ですが、TWAが全画面で開くかどうかは教えてくれません。それがわかるのは端末でのテストだけです。
上級:Android自身の検証状態
Android 12以降については、Androidの検証ガイドにApp Links用の次のコマンドが記載されています。パッケージを置き換えて最初の2つを実行し、数分待ってから状態を読み取ります。
adb shell pm set-app-links --package YOUR_PACKAGE 0 all
adb shell pm verify-app-links --re-verify YOUR_PACKAGE
adb shell pm get-app-links YOUR_PACKAGE
verified はAndroidのドメイン検証を表すもので、TWAがブラウザUIなしで開くかどうかを示すものではありません。1024以上のコードは検証ツール固有のエラーであり、SHA-256が間違っているという診断ではありません。TWAそのものについては、上記のChromeのログを使ってください。
フィンガープリントは一致しているのにバーが消えない
バーが表示されていても、SHA-256が間違っているとは限りません。上記のチェックで linked: true が返るのにバーが残っている場合は、次の原因を順に確認してください。
| 見えている症状 | 考えられる原因 | 対処法 |
|---|---|---|
| リンク、ログイン、リダイレクトの後にバーが出る | 考えられる原因検証済みのオリジンから離れた | 対処法Chromeの複数オリジンのガイドには「ユーザーが検証済みのオリジンから離れると、Custom TabのUIが表示されます」と書かれています。自分が管理するすべてのオリジンをアプリで宣言し、それぞれにassetlinks.jsonを公開してください。IDプロバイダなど、他社のドメインにあるログインページは関連付けの範囲外です。そのファイルは公開できないため、そこでブラウザのUIが出るのは想定どおりです。 |
| 最初の画面からバーがあり、ドメインがリダイレクトしている | 考えられる原因開始URLと宣言したオリジンのホストが異なる | 対処法起動URL、宣言したオリジン、ファイルのホストを同じにします(たとえばすべて www にそろえる)。フィンガープリントが一致していたBubblewrapの事例として、まさにこの方法で解決したという報告があります。 |
| Chromeでは全画面、別のデフォルトブラウザではバーが出る | 考えられる原因ブラウザプロバイダの選択 | 対処法Chromeのクイックスタートによると、デフォルトブラウザがTWAに対応していればそれが使われ、対応していなければTWAに対応する別のインストール済みブラウザ、それもなければCustom Tabが使われます。adb logcat -v brief | grep -e TWAProviderPicker を実行すると、どのブラウザが選ばれたかを確認できます。 |
| ネットワークが不安定またはない状態での新規インストール | 考えられる原因検証を実行できなかった | 対処法ネットワークに再接続してアプリを開き直します。これはコミュニティで報告されているパターンであり、ドキュメントに記載された動作ではありません。 |
Androidは verified と報告するが、TWAにブラウザUIが出る |
考えられる原因Androidのチェックとブラウザのチェックは別物 | 対処法上記のlogcatコマンドで、ブラウザのオリジン検証メッセージを取得してください。これが説明するのはTWAの結果であり、Androidの状態ではありません。 |
| アプリがブラウザで動作しているという短いメッセージの後、全画面になる | 考えられる原因常時表示のバーではなく、ブラウザの通知である可能性 | 対処法関連付けの失敗と判断する前に、正確な文言と表示される時間を記録してください。この症状はコミュニティで報告されたもので、Googleのドキュメントには記載されていません。 |
修正したファイルが反映されるまでの時間
GoogleはTWAについて単一の待ち時間を公表していません。複数のキャッシュが関わり、それぞれに独自のルールがあるためです。
- サーバーやCDNが古いファイルを配信し続けている可能性があります。キャッシュを削除し、curlで実際の応答を確認してください。
- Digital Asset Links APIは、各応答の有効期間を
maxAgeフィールドで示します。 - Android App Linksは別のタイミングで動きます。Androidの検証ガイドによると、Android 15以降では変更がすべての端末に届くまで最大7日かかることがあり、Android 14以前では通常、アプリのインストール時または更新時にファイルが読み込まれます。
- ブラウザが独自の状態を保持している場合があります。Chromeのデータを消去したら解決したという開発者の報告があります。
したがって、キャッシュを削除し、公開中のファイルを確認してから、Google Playから再インストールしてください。テスト端末では、新規インストールやブラウザのデータ消去によって、キャッシュされた状態が原因かどうかを切り分けられます。これは診断の手順であり、すべてのユーザーに求めることではありません。決まった時間数を前提に計画しないでください。
審査落ち、審査、クローズドテスト
assetlinks.jsonがない、または間違っていること自体が審査落ちの原因になるとは、ドキュメントには記載されていません。ドキュメントで説明されているのは、ブラウザUI付きのCustom Tabへの切り替えです。審査は別の問題です。Google Playの機能に関するポリシーには「クラッシュする、強制終了する、フリーズする、その他の異常な動作をするアプリは許可されません」とあり、これは関連付けの状態に関係なく適用されます。正しいフィンガープリントでバーは直りますが、審査が決着するわけではありません。審査落ちの通知を受け取った場合は、メールに記載されたポリシーから確認を始めてください。
古い記事の中には、品質チェックに失敗したTWAをChromeがクラッシュさせると書いているものがあります。ChromiumはそのQualityEnforcerのコードを2023年5月4日に削除しているため、その助言は現在のブラウザの説明ではなく、過去の話として扱ってください。
審査落ちの通知を受け取った場合は、通知に書かれた理由から対処してください。Broken Functionality(機能の不具合)による審査落ちの記事で、最もよくある機能に関する通知を順を追って解説しています。ブラウザバーが出るという理由だけでTWAをWebViewで作り直さないでください。AIビルダーで作ったアプリなら、バイブコーディングしたアプリをGoogle Playで公開する方法で、プロジェクトからPlayまでの全工程を解説しています。
新しい個人アカウントでTWAをテストする場合
2023年11月13日以降に作成された個人用デベロッパーアカウントでは、製品版へのアクセスを申請する前に、12人以上のテスターが14日以上連続でオプトインしたクローズドテストが今も必要です。そのテスターがインストールするのはPlayで署名されたビルドであり、まさにこの不具合が現れる場所です。PrimeTestLabは実在のテスター12人以上を$19.99からご用意します(別途サービス手数料5%)。テストを最後まで実施してもGoogleから製品版へのアクセスが認められなかった場合は、無料再テストまたは全額返金をお選びいただけます。テスター12人サービスの仕組みを見る。
よくある質問
Play App Signingを使う場合、assetlinks.jsonにはどのSHA-256を記載しますか?
Play ConsoleのPlay app signingに表示される、アプリ署名鍵の証明書のSHA-256です。この証明書が、Google Playからインストールされるビルドに署名します。自分でインストールするビルドも検証を通したい場合に限り、アップロード用またはデバッグ用のフィンガープリントも追加してください。
TWAがAndroid Studioからだと正常なのに、Google PlayからだとURLバーが出るのはなぜですか?
自分でインストールするビルドはデバッグ鍵またはアップロード鍵で署名されていますが、Google Playはアプリ署名鍵で署名したアプリを配信します。ウェブサイトにローカルの証明書しか記載されていないと、Play版のインストールでは検証に失敗し、Chromeはブラウザバー付きのCustom Tabに切り替えます。
現在のPlay Consoleでは、アプリ署名鍵はどこにありますか?
Protected with Playの下です。Googleは現在、2つのルートを記載しています。Play Store distributionからGo to Play app signingへ進むルートと、Play Store protectionからManage Play app signingへ進むルートです。アプリ署名鍵の証明書のセクションから、SHA-256証明書フィンガープリントをコピーしてください。
assetlinks.jsonに複数のSHA-256フィンガープリントを記載できますか?
はい。sha256_cert_fingerprintsフィールドは配列で、同じパッケージに対して複数のフィンガープリントを記載できます。たとえば、デバッグビルドとPlayで署名されたビルドです。アプリケーションIDが異なる場合は、それ専用のステートメントが必要です。
assetlinks.jsonを修正してから、ブラウザバーが消えるまでどのくらいかかりますか?
GoogleはTWAについて単一の待ち時間を公表していません。CDNのキャッシュを削除し、公開中のファイルがリダイレクトなしでJSONとしてHTTP 200を返すことを確認してから、Google Playからアプリを再インストールしてください。テスト端末では、ブラウザのデータを消去すると、キャッシュされた状態が原因かどうかを切り分けられます。Android App Linksの検証には別のタイミングがあり、Android 15以降では最大7日かかることがあります。
assetlinks.jsonが間違っていると、Google PlayでTWAが審査落ちしますか?
現在のドキュメントに記載されているのは、自動的な審査落ちではなく、ブラウザUI付きのCustom Tabへの切り替えです。Playの審査では、アプリが動作し、実質的な体験を提供しているかが判断されます。そのため、正しいファイルでバーは直りますが、それだけで審査が決着するわけではありません。
クローズドテストのテスターにもブラウザバーは表示されますか?
はい。ウェブサイトにアプリ署名鍵の証明書が記載されていなければ表示されます。クローズドテストのテスターはPlayで署名されたビルドをインストールするためです。修正のテストはサイドロードしたAPKではなくそのインストールで行い、内部アプリ共有のリンクは別の鍵で署名されることも覚えておいてください。
Digital Asset Linksのチェックは通ります。なぜバーが残るのですか?
何が通ったのかを確認してください。ステートメントリストには別のパッケージや証明書の関連付けが含まれていることがあり、厳密なチェックでさえ、入力した値をテストしているだけです。インストールされたビルドがその識別情報を使っていることを確認し、アプリが実際に到達するオリジンをたどり、ブラウザの検証ログを読んでください。AndroidのApp Linksの状態は別のシグナルです。
wwwへのリダイレクトやログインページでバーが戻ることはありますか?
はい。TWAの検証はオリジン単位で適用され、検証済みのオリジンから離れるとブラウザUIが表示されます。リダイレクト後にアプリがどこに到達するかを確認し、自分が管理するすべてのオリジンを、アプリと各オリジン自身のassetlinks.jsonの両方で設定してください。他社のドメインにあるログインページは自分のファイルの対象外で、その関連付けを公開することはできません。
bubblewrap validateはPlayの署名フィンガープリントをチェックしますか?
いいえ。Bubblewrapのドキュメントでは、validateはPWAを品質基準に照らしてチェックするものとされています。そのため合格しても、Playからインストールしたアプリが証明書リストと一致するかについては何もわかりません。fingerprintコマンドでassetlinks.jsonを準備して公開し、正確なドメイン、パッケージ、証明書をチェックしてから、Play版のインストールをテストしてください。
バーをなくすには、TWAをWebViewに切り替える必要がありますか?
最初の手段としては不要です。インストールされたアプリの署名の識別情報、ウェブサイトのファイルの配信方法、アプリが開くオリジンを修正してから、再テストしてください。本当の問題が、サポートされていないブラウザの動作、認証、または特定のポリシー通知である場合は、別のラッパーがアプリに合うかを判断する前に、その問題を個別に調べてください。
まとめ
要点
PlayからインストールしたTWAにブラウザバーが出る問題は、1つの比較から始まります。インストールされたビルドに署名した証明書と、ウェブサイトのassetlinks.jsonにあるフィンガープリントの比較です。Play app signingからアプリ署名鍵のSHA-256をコピーし、正確なオリジンに厳密なJSONを直接のHTTP 200で公開し、正確なパッケージと証明書をチェックしてから、テスターがインストールするビルドでテストしてください。フィンガープリントがすでに一致しているなら、何かを作り直す前に、オリジン、リダイレクト、ブラウザ、キャッシュを確認してください。
2026年10月16日に確認した出典
Play Consoleのメニューラベルは、このページで最も変わりやすい情報です。上記のルートが現在のConsoleと一致しない場合は、Protected with Playの下にあるPlay app signingを探すか、Console内で「app signing」を検索してください。