エンゲージメントが弱く見える → 却下
アクティビティが登録される → 審査に通りやすい
クイック回答
TWAアプリがクローズドテスト(closed testing)で「testers were not engaged」となり続けるなら、経験上いちばん確実な直し方は標準のWebViewアプリとして作り直すことです(Android StudioのWebView、Capacitor、Cordova)。製品版に出すのもTWAではなくそのビルドにしてください。同じパッケージ名のままアップデートとしてアップロードすれば、14日間のカウントはリセットされません。WebViewはエンゲージメントシグナルの問題に効きますが、薄いラッパー審査の免除にはなりません。本物のアプリに仕上げてください。本当のボトルネックがテスター12人を14日連続で確保することなら、それがPrimeTestLabの役割です。$19.99から(別途サービス手数料5%)、テスト開始は通常4~6時間以内です。
個人開発者が直面する却下のなかでも、いちばん歯がゆいパターンのひとつです。テスターは本当に使っていました。人数も12人いました。14日も過ぎました。それでもGoogleは「your testers were not engaged enough.」と返してきます。アプリをTrusted Web Activity(TWA)やPWAラッパーで作っているなら、偶然ではありません。7,400+件のアプリを伴走してきたなかで、ラッパー系ビルドはこの種の却下に、標準のネイティブやWebViewよりはるかに多く当たります。本ガイドでは理由、効くアーキテクチャの差、すでに積んだテスト日数を捨てずにWebViewへ切り替える手順を説明します。
目次
なぜTWAアプリはクローズドテストで却下されやすいのか
Trusted Web Activityは、画面を自アプリ内に描くのではなく、Chrome Custom Tabsの表面経由でサイトを表示します。サイトやPWAをインストール可能にする手早い手段で、製品版のアプリでは問題なく動く例も多いです。困るのは、個人用デベロッパーアカウントが製品版へのアクセス前に必須の14日間クローズドテストをクリアしなければならないときです。
7,400+件超のアプリをそのプロセスで支援してきた経験では、TWAやPWAラッパーのビルドは、テスターが毎日本当に使っていても、標準のネイティブアプリより「testers were not engaged」の却下にはるかに多く当たります。パターンが安定しているため、14日間のクローズドテストをまだ通過する必要があるアプリでは、TWAから距離を置くよう案内しています。
弱いエンゲージメントシグナル
Googleの審査が読むアクティビティは、コンテンツが自アプリのプロセスではなくChromeの表面で動くと弱く見えるようです。実際の利用が、利用が少ないように見えることがあります。
「Testers not engaged」の却下
TWAビルドでいちばんよく見るメッセージです。テスターはオプトインし、インストールし、毎日使っているのに、製品版へのアクセス審査ではエンゲージメント不足とフラグが付きます。
Play Consoleのアクティブユーザーが少ない
TWAビルドではダッシュボード上のアクティブユーザー数が予想より低く出る、という報告もあります。同じChrome表面の挙動と整合します。
再提出でも同じ却下が続く
根本原因がアーキテクチャなので、同じTWAビルドの再提出は同じ結果になりがちです。パッチでは直りにくく、再構築が効くのはこのためです。
正直な注意:Googleは製品版へのアクセス審査の段階で、どのシグナルをどう重み付けするか公開していません。正確な仕組みは当社の観察であり、公式ポリシーではありません。テレメトリを断定するフォーラム投稿には懐疑的でいてください。自信を持って言えるのは繰り返し見る結果です。TWAビルドはエンゲージメントで却下されやすく、同種のWebViewビルドは審査に通りやすい、という点です。
TWAとは何か(どう作られているか)
却下を直す前に、何を出しているかを正確に理解しておくと役立ちます。Trusted Web Activityは本質的に、本物のブラウザエンジン内でフルスクリーン表示された自サイトです。アドレスバーもブラウザのクロムもなく、ユーザーにはWebページだと分かりません。見た目と操作感はネイティブアプリに近く、中身はライブのWebサイトです。
TWAは通常、GoogleのBubblewrap CLIやPWABuilderで生成され、どちらもGoogleのandroidbrowserhelperライブラリ上に載っています。URLを指定するとAndroidプロジェクトができ、署名してAABをGoogle Playにアップロードします。
開発者がTWAを選ぶ理由
コードベースが1つ
すでにサイト(できればPWA)があるなら、KotlinやFlutter、React Nativeで書き直さずにPlay Storeへ載せられます。
即時アップデート
アプリはライブサイトを読み込むため、変更はWebのデプロイだけで済みます。アプリ更新も審査待ちも不要です。
安くて速い
TWAの生成は数分で、数週間はかかりません。既存PWAならAndroidへの最短ルートです。
却下につながるトレードオフ
TWAを安くする同じ性質が、クローズドテストではもろくなります。
- インターネットが必要。サイトへの窓なので、接続が弱いとアプリも弱く見えます。PWAのオフライン対応がしっかりしていない限りそうです。
- Play Storeでの却下リスク。Minimum Functionality/再パッケージコンテンツのポリシーは、「ラッパーに入っただけのサイト」を対象にします。ネイティブ能力のないTWAは、とくに新規提出で却下や削除の対象になり得ます。プッシュ通知、オフライン、カメラ、共有ターゲットなどのネイティブ機能を足すと、その線の正しい側に立ちやすくなります。
- エンゲージメントシグナルの問題(上記)。個人アカウントが14日間のクローズドテストに向き合うと「testers not engaged」が続きやすい理由です。
誤解:TWAはWebViewではない
多くの記事がここを誤りがちで、直し方に直結するので正確に書きます。TWAはAndroidのWebViewコンポーネントを一切使いません。
「TWAはただのWebViewラッパー」
AndroidのWebViewは、アプリが制御する軽量な埋め込みブラウザです。機能は少なく、セキュリティ分離も弱めです。TWAはそれを使いません。
TWAはCustom Tabsエンジンを使う
ユーザーのインストール済みフルブラウザ(通常はChrome)にURLを渡し、UIなしのフルスクリーン描画を依頼します。埋め込みコンポーネントではなく、本物のブラウザエンジンです。
TWAはCustom Tabsの背後のエンジンを使うため、本物のChromeと同じレンダリングエンジン、JavaScriptエンジン、セキュリティサンドボックスに加え、ChromeとのCookie/ストレージ共有(Webでログイン済みならアプリでもそのまま)、ブラウザの自動更新、フルのWebプラットフォーム対応を得ます。通常の公開アプリとしては強力ですが、画面は自アプリではなくChrome内の別プロセスで動きます。エンゲージメントシグナルの希薄化とアクティブユーザー数の低さの両方の根です。
起動フロー(ステップごと)
AndroidがTWAのLauncherActivity(androidbrowserhelper由来)を起動します。
ページはフルスクリーンでUIのないCustom Tabで開きます。アドレスバーもタブもブラウザUIもありません。
Trusted Web Activityの「Trusted」です。アプリがサイト所有を証明できないと、アドレスバーが残り、ネイティブ風の見た目が崩れます。
信頼チェック:Digital Asset Links
Chromeがアドレスバーを消すのは、アプリがサイトを所有していると証明できたときだけです。手段はDigital Asset Linksです。アプリはどのサイトを表すかを宣言し、サイト側は/.well-known/assetlinks.jsonでアプリのパッケージ名と署名証明書のフィンガープリント(SHA-256)を返す必要があります。
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.yourapp.name",
"sha256_cert_fingerprints": [
"AB:CD:EF:...:99" // your signing cert SHA-256
]
}
}]
アプリがサイトを宣言
マニフェストが、アプリが表すhttpsドメインを示します。
サイトがassetlinks.jsonを配信
ファイルにパッケージ名とSHA-256フィンガープリントが載ります。
Chromeが双方を突き合わせ
フィンガープリントはアプリの署名証明書と一致する必要があります。
テスターが「アプリ」の上部にブラウザのアドレスバーが見えると報告するなら、assetlinks.jsonが無い、404、またはSHA-256が誤っています。ファイルを直し(Play App Signing下でGoogle Playが実際に署名する鍵のフィンガープリントと一致させること)、フルスクリーンの見た目は戻せます。ただしこれはエンゲージメントシグナルによる却下の直しにはなりません。そちらにはWebViewへの再構築が必要です。
エンゲージメントシグナルの経路:TWA vs WebView
却下を理解するいちばん簡単な方法は、テスターのアクティビティが実際にどこへ行くかを追うことです。TWAでは画面はアプリから一層離れた場所、つまりChrome Custom Tabsの表面にあります。WebViewアプリでは同じ画面が自アプリのプロセス内で動き、パッケージに直接帰属します。この一点が、アクティビティの登録の強さを変えます。
テスターのアクティビティがどこに帰属するか
WebViewはサイトのURLを自アプリの内側で読み込むため、Googleの審査が期待する形でアクティビティがパッケージに登録されます。TWAでは中間のCustom Tabが余分な一段となり、シグナルを薄めているように見えます。TWA上の自前Web分析(Google AnalyticsやWeb層のFirebase)が低くても、必ずしも「Googleが利用ゼロと見ている」とは限りません。ただしクローズドテストでの実務上の結果は同じです。WebViewへの再構築が頼れる直し方です。
TWAの見分け方(外からと中から)
自分(や委託先)が出したアプリが本当にTWAか分からない?目視で、次にAPKや接続端末から確定する方法です。
見た目の手がかり(ユーザー視点)
- 挙動がサイトとまったく同じです。中身がサイトだからです。
- 設定ミスがあると上部にブラウザのアドレスバーが出ます。決定的な手がかりです(上記のassetlinks不具合)。
- Play Storeのアプリ更新なしでコンテンツが変わります。
技術的な確定手がかり(APK / 端末の検査)
| マーカー | 意味 |
|---|---|
TRUSTED_WEB_ACTIVITY_SERVICEアクションを宣言するDelegationService |
いちばん信頼できる指紋。これを宣言するのはTWAだけです。 |
com.google.androidbrowserhelper由来のLauncherActivity(しばしばManageDataLauncherActivity) |
Bubblewrapのランチャーです。 |
| アプリのリンク設定で検証済みのhttpsドメイン(assetlinks.jsonが有効) | TWAが包むサイトです。 |
libflutter.soなし、index.android.bundleなし、ネイティブコードが少ない |
Webラッパーであり、Flutter / React Native / ネイティブビルドではありません。 |
adbで確認する
接続した端末(またはエミュレータ)で、次の2コマンドで決着します。
# Is it a TWA? Look for the delegation service: adb shell dumpsys package <package.name> | grep -i DelegationService # Which site does it wrap, and is the trust check passing? adb shell pm get-app-links <package.name> # -> "verified" = Digital Asset Links pass (fullscreen) # -> "1024" = verification failed (address bar shows)
結果の読み方:DelegationServiceとandroidbrowserhelper由来のLauncherActivityが見えれば、ほぼTWAです。代わりに独自のMainActivity、ネイティブの.so、デリゲーションサービスなしなら、本物のネイティブ(またはFlutter / React Native)アプリです。本ガイドのエンゲージメントシグナル問題は当てはまりません。
クローズドテスト向け:TWA vs WebView 比較
どちらもWebコンテンツを包みます。14日間のクローズドテストをクリアするうえで重要な差は、コンテンツがどこで動き、アクティビティがどう帰属するかです。1サイクルで製品版に届くかを左右する指標で比較します。
TWA / PWAラッパー
向いているのは:すでに承認済みで、クローズドテストを新たにクリアする必要がないアプリ。
標準WebView
向いているのは:14日間・テスター12人のクローズドテストをクリアする必要があるアプリ。
フレームワーク適合チェック
WebViewはデスクトップChromeと挙動が違います。スタックを選ぶと、起動時にいちばん壊れやすい設定が見えます。
DOM Storageを有効にする
SPA / クライアントルーティングシングルページアプリはクライアント側ルーティングと認証状態にlocalStorageとsessionStorageを使います。settings.domStorageEnabled = trueを入れないと起動時にWebルーティングが壊れ、テスターは真っ白画面や止まるローダーに当たり、「engagedしていない」と読まれます。
javaScriptEnabled = trueも維持し、WebViewClientでアプリ内ナビゲーションを扱い、ディープリンクがChromeに飛ばないようにします。
埋め込みとアップロード用のネイティブ権限を宣言
ノーコードビルダーWebViewはデスクトップChromeとiframeの扱いが違い、ノーコードはiframeに強く依存します。ファイルアップロード権限をAndroidManifest.xmlでネイティブ宣言し、WebChromeClient.onShowFileChooserを配線しないと、フォームやメディアアップロードが静かに失敗します。
<uses-permission android:name="android.permission.INTERNET"/>を追加し、メディアを受けるならカメラ/ストレージ権限も宣言して、実行時にリクエストします。
オフラインキャッシュと本物のネイティブ価値を足す
静的 / CMSWebViewに載せただけの静的サイトは、教科書どおりの「薄いラッパー」です。cacheMode = LOAD_DEFAULTで使えるオフラインフォールバックを付け、切断時のブランド付きエラー/再試行画面を用意し、ネイティブ機能を少なくとも1つ(プッシュ通知、共有ターゲット、ホーム画面ショートカットなど)を重ねます。
これでCMSや静的エクスポートが「枠に入ったサイト」から、Minimum Functionality審査を通しやすいアプリへ近づきます。
直し方:標準のWebViewアプリを作る
TWAを継ぎ接ぎしたり、シグナルを無理に押し上げたりするより、クリーンな道はWebViewコンポーネント中心に作り直し、そのビルドを出すことです。いずれもサイトを自アプリ内で読み込む主流の3ルートがあります。
いちばん直接の道です。メインActivityにWebViewを置き、URLを向け、JavaScriptとDOMストレージを有効にします。制御は最大で、追加フレームワークは不要です。
すでにWeb/PWAプロジェクトなら、CapacitorがネイティブWebViewシェルで包み、ネイティブプラグイン(カメラ、プッシュ、ストレージ)を足せます。TWAのシグナル問題なしでPWAからのきれいなアップグレードです。
古めですが今も使える選択肢です。核は同じで、WebコンテンツはChrome Custom Tabsではなくアプリ自身のWebView内で動きます。
最小のWebViewセットアップ(コピー用)
核は小さいです。URLを読み込み、JavaScriptとストレージを有効にし、ナビをChromeへ飛ばさずアプリ内に保ち、Googleの審査が期待する戻るボタン処理を配線したWebViewです。言語タブを切り替えてベースをコピーしてください。
val webView = findViewById<WebView>(R.id.webview)
webView.settings.apply {
javaScriptEnabled = true // most sites need this
domStorageEnabled = true // localStorage / sessionStorage
cacheMode = WebSettings.LOAD_DEFAULT
}
// Keep links INSIDE the app (this is the key difference vs a TWA)
webView.webViewClient = WebViewClient()
webView.loadUrl("https://yourwebsite.com")
// The exact back-button handler Google looks for
onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
if (webView.canGoBack()) {
webView.goBack()
} else {
finish()
}
}
})
WebView webView = findViewById(R.id.webview); WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); // most sites need this settings.setDomStorageEnabled(true); // localStorage / sessionStorage settings.setCacheMode(WebSettings.LOAD_DEFAULT); // Keep links INSIDE the app (this is the key difference vs a TWA) webView.setWebViewClient(new WebViewClient()); webView.loadUrl("https://yourwebsite.com"); // The exact back-button handler Google looks for getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) { @Override public void handleOnBackPressed() { if (webView.canGoBack()) { webView.goBack(); } else { finish(); } } });
# Wrap an existing web/PWA project in a native WebView shell npm install @capacitor/core @capacitor/cli npx cap init "YourApp" "com.yourapp.name" # Point Capacitor at your live site (capacitor.config.ts) # server: { url: "https://yourwebsite.com", cleartext: false } npm install @capacitor/android npx cap add android npx cap sync # Capacitor handles back-button + DOM storage natively. # Open in Android Studio to build a signed AAB: npx cap open android
審査を通しやすくするために足すべき3点
loadUrl()だけの素のWebViewは、まだ薄いラッパーです。本物のアプリにし、テスターを真っ白画面から遠ざけるのは次の3点です。
上のコピー用スニペットのOnBackPressedCallbackを配線し、戻るはまずWeb履歴を歩き、行き場がなくなったときだけ終了します。これがないと1タップでアプリ全体が閉じ、壊れたように見え、薄いラッパーの即フラグです。
WebViewClientのonReceivedErrorで、白いページではなく再試行ボタン付きの「オフラインです」画面を出します。切断時の真っ白画面は、薄いラッパーに見え、審査に落ちやすい最短ルートです。
プッシュ通知(FCM)、オフラインキャッシュ、共有ターゲット、WebChromeClient.onShowFileChooserによるファイルアップロード、端末連携など。読み込むURL以上の意味をアプリに持たせます。Minimum Functionalityポリシーへの対応です。
Androidコードを手書きしたくないなら、Capacitorが既存のWebプロジェクトをネイティブWebViewシェルで包み、戻る処理、ネイティブスプラッシュ、プラグイン(プッシュ、カメラ、ファイルシステム)を標準で出します。TWAのCustom Tabs挙動を完全に避けたPWA→WebViewの最短ルートで、プロセス内WebViewの帰属とネイティブ機能の両方を一度に得られます。
テストしたアプリを出す。WebViewアプリを作り、クローズドテストを通し、同じビルドを製品版に出します。あるアーキテクチャでテストしてから別アプリに差し替えないでください。審査通過用のビルドを出して製品版で根本的に違うものに替えると、Googleの欺瞞的行為ポリシーに触れ、アプリやアカウント停止につながり得ます。WebViewに固定すれば、テストしたものがそのままリリースになります。
14日間のカウントをリセットせずに切り替える
すでにテストの途中でも、最初からやり直す必要はありません。同じトラック・同じパッケージ名なら、アプリ更新後も14日間のカウンタは続きます。安全な移行手順です。
現在のTWAとまったく同じapplicationIdを保ちます。パッケージ名が違うと新規アプリ一覧になり、14日間が最初からになります。
versionCodeはTWAビルドより少なくとも1上げます。そうしないとPlay Consoleが重複バージョンとしてアップロードを却下します。安定した読み込み、正しいAndroidの戻るボタン、妥当なオフラインとエラー状態、真っ白画面なし。薄いラッパー審査を避けるためにも重要です(次セクション)。
クローズドテストトラックを開き、新しいリリースを作り、WebViewのAABをアップロードします。新しいトラックや新しいアプリは作らないでください。
オプトイン済みテスターはWebView版に更新して継続します。テスター12人以上がアクティブな限り、カウントは進み続けます。
クローズドテストトラックへのアップデートは、14日間のカウンタをリセットしません。カウントは続き、Googleはテスト中の反復を通常のプロセスとして扱います。途中でのTWA→WebView差し替えが、すでに積んだ日数を失わずにできるのはこのためです。
WebViewアプリでも「薄いラッパー」になるか?
WebViewを魔法の弾丸だと思うとハマる罠です。TWAからWebViewへの切り替えはエンゲージメントシグナルの問題に効きますが、GoogleのSpam and Minimum Functionalityポリシーの免除にはなりません。ホームページを枠に入れただけのWebViewは、素のTWAと同じく薄いラッパーとして却下され得ます。
これを2つの別ゲートとして捉えると分かりやすいです。テスト代行やWebView再構築は片方を通しやすくしますが、もう片方は通しません。
クローズドテスト要件
人数と期間のチェック:オプトインしたテスターが少なくとも12人、14日連続でアクティブ。WebViewはエンゲージメントを安定して読ませ、PrimeTestLabはテスターを用意します。
人数 + 期間Minimum Functionality(薄いラッパー)
ポリシーと品質の判断:本物の価値があるか、枠に入ったサイトだけか。実質的なアプリだけが通ります。サービスやアーキテクチャ差し替えだけでは代わりになりません。
ポリシー + 品質だから目標は「TWAではなくWebView」だけではありません。自前で立つだけの価値とネイティブ挙動を持ったWebViewアプリです。実務では次を意味します。
戻るはWeb履歴を歩き、その後に優雅に終了します。真っ白画面に落としたり、突然アプリを落とさないでください。
本物の「オフラインです」画面と再試行経路を出します。切断時の白い画面は、薄いラッパーに見える最短ルートです。
プッシュ通知、ホーム画面体験、端末連携、オフラインキャッシュなど。読み込むURL以上の意味を持たせます。
おとり差し替えルール(破らない)
しないこと:充実したアプリでテストし、製品版で根本的に違う(より薄い)アプリに差し替える。Googleがアカウントを停止する欺瞞的行為そのものです。
すること:WebViewアーキテクチャを選び、充実させ、そのビルドでテストし、そのビルドをそのまま出す。テストから製品版まで一貫してコミットします。
品質却下のトリガーをもっと深く知りたい場合は、クローズドテストが却下される理由のガイドで、エンゲージメント以外のよくあるポリシーと審査の失敗を分解しています。
TWAか分からない?注文の瞬間に確認します
adbを走らせたりAPKを自分で掘る必要はありません。はい。PrimeTestLabはアプリがTWAかどうかを確認できます。テストサービスを注文した瞬間に、チームがビルドを検査し、TWAやPWAラッパーかを特定し、該当すれば14日間のカウントを無駄にする前に、直すべき点を具体的に伝えます。エンゲージメントでフラグを受けやすいアーキテクチャのまま走らせないためです。
ここ数か月だけでTWAアプリ200件超を検査・助言しました。提案と修正のあと、いずれも審査を進め、製品版へのアクセス申請まで到達しました(過去実績)。TWAを見つけたら、ぼんやりした「もう一度」ではなく、実行可能な再構築プランをお渡しします。
注文した瞬間に起きること
クローズドテストトラックやビルドを共有いただいた時点で、レビュー待ちに入ります。追加リクエストは不要です。
チームはTWAの指紋(DelegationService、androidbrowserhelperランチャー、Custom Tabs挙動、ネイティブコードの欠如)を確認します(上記の見分け方セクションと同じマーカーです)。
典型的には本ガイドのWebView再構築など、具体的な提案を出します。エンゲージメント審査で落ちやすいビルドに14日間を使う前にアーキテクチャを直せます。
正しいアーキテクチャと、14日連続でアクティブなテスター12人以上で、両方のゲートをカバーします。成功率99.9%(過去実績)を保てるのはこのためです。
多くの開発者は、失敗した14日間のあとで初めてTWAが問題だと知り、やり直しになります。0日目に掴むから、アーキテクチャを一度直し、一度テストし、一度出せます。2週間で製品版申請の準備が整う道と、1か月の再却下の差です。
PrimeTestLabの支援(問題のもう半分)
アーキテクチャは問題の半分です。もう半分、個人開発者を止めるのは、14日連続で本当にオプトインし続けるテスター12人を見つけることです。それがPrimeTestLabの役割です。
実機Android上の確認済み・オプトイン済みテスターが、要件の全期間にわたってクローズドテストをアクティブに保ちます。1人抜けても14日連続が途切れにくい設計です。クローズドテストのオプトインリンクを共有いただければ、招待、オプトイン確認、日次エンゲージメント監視、14日間のリテンションを担います。7,400+件超、初回成功率99.9%(過去実績)です。
テスト代行はテスター要件をカバーします。アプリのアーキテクチャを選ぶことも、薄いラッパー審査を代わりに通すこともありません。勝つ組み合わせは充実したWebViewビルドと14日間フルの実在テスター12人です。どちらも却下の理由にならないようにします。
現在のプラン
よくある質問
なぜTWAアプリはクローズドテストで却下され続けるのか?
7,400+件を通じた経験では、TWAやPWAラッパーのビルドは、テスターが毎日アクティブでも、標準のネイティブより「testers were not engaged」却下にはるかに多く当たります。製品版へのアクセス審査が読むエンゲージメントシグナルは、Webコンテンツが自アプリのプロセスではなくChrome Custom Tabsの表面で動くと弱く届くのが有力な理由です。Googleはシグナルを公開していないため、当社の観察として扱い、公式ポリシーではありません。
TWAを直すよりWebViewへ切り替えるべき?
経験上、標準のWebViewアプリとして作り直す方が、TWAからエンゲージメントシグナルを無理に押し上げるより確実です。WebViewはサイトを自アプリ内で読み込むため、アクティビティがパッケージに、審査が期待する形で登録されます。WebViewへ移したら、製品版でTWAに戻さず、テストしたビルドを出してください。
WebViewアプリならクローズドテスト要件を自動で満たす?
いいえ。WebViewへの切り替えは、TWAで見るエンゲージメントシグナル問題を取り除きますが、GoogleのSpam and Minimum Functionalityポリシーの免除にはなりません。サイトを枠に入れただけのWebViewは薄いラッパーとして却下され得ます。本物のネイティブ価値、正しい戻る処理、オフラインとエラー状態を備えてください。
クローズドテスト中のアップデートは14日間のカウントをリセットする?
いいえ。クローズドテストトラックへのアップデートは14日間のカウンタをリセットしません。同じパッケージ名なら、サイクル途中でTWAをWebViewに差し替えても最初からになりません。Googleはテスト中の反復を通常とみなします。
なぜPlay ConsoleでTWAのアクティブユーザーが少ない?
TWAビルドでアクティブユーザーが低く出る、という報告があります。Googleは原因を文書化していませんが、Webコンテンツがアプリ内ではなくChrome Custom Tabsの表面で動くことに結びついているように見えます。WebViewビルドは画面が自プロセス内なので、アクティビティ報告が安定しやすいです。
TWAでテストしてWebViewを製品版に出してよいか?
安全なのは、同じビルドでテストし、同じビルドを出すことです。TWAでテストして別アプリに差し替えるより、先にWebViewとして作り、そのWebViewでクローズドテストを通し、そのビルドを製品版に出します。審査用と製品版で根本的に違うアプリを出すと、欺瞞的行為ポリシーで停止のリスクがあります。
TWAやPWAラッパーがGoogle Playで承認されることはある?
はい。Minimum Functionalityポリシーを満たし、クローズドテスト要件を完了すれば、ラッパーアプリも承認され得ます。ただし個人アカウントが14日間・テスター12人のクローズドテストをクリアする必要がある場合、WebViewビルドの方がエンゲージメント審査を安定して通しやすい、というのが一貫した観察です。その状況ではWebViewを案内しています。
TWAはAndroidのWebViewコンポーネントを使う?
いいえ。いちばん多い誤解です。TWAはAndroidのWebViewを使いません。Custom Tabsの背後のエンジンを使い、ユーザーのフルインストール済みブラウザ(通常Chrome)にURLを渡してUIなしフルスクリーン描画します。レンダリング、JavaScript、セキュリティサンドボックスはChromeと同じで、Cookieとストレージも共有します。一方Android WebViewはアプリが制御する埋め込みブラウザで、自プロセス内で動きます。WebView再構築がエンゲージメント帰属を直す理由です。
TWAの上部にブラウザのアドレスバーが出るのはなぜ?
Digital Asset Linksの信頼チェックが失敗しています。Chromeがアドレスバーを隠すのは、サイトが有効な/.well-known/assetlinks.jsonを配信し、アプリのパッケージと署名証明書のSHA-256を示しているときだけです。ファイルがない、404、Play App Signing下の署名鍵と一致しないと、アプリは開きますがアドレスバーが出ます。assetlinks.jsonの修正はフルスクリーンを戻しますが、クローズドテストのエンゲージメント却下は直しません。それにはWebView再構築が必要です。
アプリがTWAかどうかはどう見分ける?
ビルドを検査します。いちばん信頼できるマーカーは、TRUSTED_WEB_ACTIVITY_SERVICEアクションを宣言するDelegationServiceです。これを宣言するのはTWAだけです。多くの場合com.google.androidbrowserhelper由来のLauncherActivityがあり、FlutterやReact Nativeのネイティブライブラリはありません。接続端末ではadb shell dumpsys package <package> | grep -i DelegationServiceでサービスを、adb shell pm get-app-links <package>でDigital Asset Linksが「verified」か「1024」(失敗)かを確認できます。
PrimeTestLabはアプリがTWAか教えてくれる?
はい。テストサービスを注文した瞬間に、チームがビルドを検査し、TWAやPWAラッパーかを確認し、該当すれば14日間を無駄にする前に具体的な修正提案を送ります。ここ数か月でTWAアプリ200件超を確認し、提案と修正のあと、いずれも審査を進めて製品版申請まで到達しました(過去実績)。adbやAPK検査を自分でやる必要はありません。
PrimeTestLabのテスターはどれくらい早く始まる?
クローズドテストトラックが公開され到達可能なら、PrimeTestLabのテスターは通常4~6時間以内にオプトインを開始します。料金はテスター12人で$19.99から(別途サービス手数料5%)、7,400+件での成功率は99.9%(過去実績)です。
まとめ
要約
TWAビルドがGoogle Playのクローズドテストでエンゲージメント却下を繰り返すなら、いちばんきれいな直し方は標準のWebViewアプリとして作り直し、そのビルドを製品版に出すことです。あとからTWAに戻さないでください。同じパッケージ名を保てばアップデートで14日間のカウントはリセットされません。アプリはMinimum Functionality審査を通しやすい実質的な内容にし、PrimeTestLabがテスター12人・14日間の要件対応を担うと、テスト不足が却下理由になりにくくなります。WebViewがエンゲージメントのゲートに、本物のアプリが薄いラッパーのゲートに、PrimeTestLabがテスターに効きます。料金プランを見る →