Ga naar de inhoud

Gids voor afwijzingen 2026

TWA-app afgewezen op Google Play? Stap over op WebView

Blijft je Trusted Web Activity bij de gesloten test stranden op "testers were not engaged"? In onze ervaring is herbouwen als een gewone WebView-app de betrouwbaarste oplossing. Je leest waarom TWA- en PWA-wrappers vaker worden gemarkeerd en hoe je overstapt zonder de teller van 14 dagen terug te zetten.

TWAVaker gemarkeerd
WebViewBetrouwbare oplossing
14 dagenTeller blijft lopen
99,9%PTL-succespercentage
Testers were not engaged
AfgewezenTWA- / PWA-wrapperDraait in de Chrome-laag
Shell van je appChrome Custom TabWebcontent

Zwak gebruikssignaal → afgewezen

GoedgekeurdGewone WebViewDraait in je eigen proces
Shell van je appWebView (in-process)Webcontent

Activiteit wordt gemeten → betere beoordeling

Kort antwoord

Blijft je TWA-app de gesloten test (closed testing) niet halen met de melding "testers were not engaged", dan is in onze ervaring de betrouwbaarste oplossing hem herbouwen als een gewone WebView-app met Android Studio WebView, Capacitor of Cordova, en die build publiceren. Behoud hetzelfde package name en upload hem als update, zodat de teller van 14 dagen niet wordt teruggezet. WebView pakt het probleem met gebruikssignalen aan, maar stelt je niet vrij van de thin-wrapperbeoordeling. Maak er dus een echte app van. Heb je vooral moeite om 12 actieve testers 14 dagen vast te houden, dan regelt PrimeTestLab dat vanaf $19.99 plus 5% servicekosten. Testen begint doorgaans binnen 4-6 uur.

Dit is een van de frustrerendste afwijzingen voor een zelfstandige ontwikkelaar. Je testers waren echt actief. Je had 12 mensen. De 14 dagen waren voorbij. Toch antwoordde Google dat "your testers were not engaged enough". Heb je de app gebouwd als Trusted Web Activity (TWA) of PWA-wrapper, dan beeld je je het patroon niet in. Bij de meer dan 7.400 apps die wij hebben begeleid, krijgen wrapper-builds deze afwijzing veel vaker dan gewone native of WebView-builds. Deze gids legt uit waarom, toont het belangrijke architectuurverschil en helpt je overstappen zonder de testdagen die je al hebt opgebouwd weg te gooien.

Waarom worden TWA-apps bij de gesloten test afgewezen?

Een Trusted Web Activity rendert je website via Chrome Custom Tabs in plaats van de schermen binnen je eigen app te tekenen. Het is een snelle manier om een site of PWA installeerbaar te maken en voor veel apps in productie werkt dat prima. Het probleem ontstaat vooral wanneer een persoonlijk ontwikkelaarsaccount eerst de gesloten test van 14 dagen moet doorlopen voordat het productietoegang kan aanvragen.

In onze ervaring met meer dan 7.400 apps krijgen TWA-builds en PWA-wrappers de afwijzing "testers were not engaged" veel vaker dan gewone native apps, zelfs wanneer testers de app elke dag gebruikten. Het patroon is zo consistent dat we ontwikkelaars WebView adviseren zolang hun app de gesloten test nog moet halen.

Bevinding 01

Zwakke gebruikssignalen

De activiteit die Google leest, lijkt zwakker door te komen wanneer content in de Chrome-laag draait en niet in het proces van je app. Echt gebruik kan daardoor op weinig gebruik lijken.

Bevinding 02

Afwijzing "testers not engaged"

Dit is de melding die we het vaakst bij TWA-builds zien. Testers meldden zich aan, installeerden de app en gebruikten hem dagelijks, maar de beoordeling noemt het gebruik toch onvoldoende.

Bevinding 03

Weinig actieve gebruikers in Play Console

Sommige ontwikkelaars melden ook onverwacht lage aantallen actieve gebruikers op het dashboard voor TWA-builds. Dat past bij hetzelfde gedrag van de Chrome-laag.

Bevinding 04

Opnieuw afgewezen na herindienen

Wanneer de architectuur de oorzaak is, strandt dezelfde TWA-build bij herindienen vaak opnieuw. Daarom helpt een kleine patch zelden en een rebuild doorgaans wel.

Een eerlijke kanttekening

Een eerlijke kanttekening: Google publiceert niet precies welke signalen het bij de beoordeling van productietoegang weegt. Zie het mechanisme daarom als onze waarneming en niet als officieel beleid. Forumreacties die zeggen de exacte telemetrie te kennen, verdienen scepsis. Wat wij wel kunnen melden, is het patroon dat we blijven zien: TWA-builds stranden op gebruikssignalen en vergelijkbare WebView-builds doorstaan die beoordeling betrouwbaarder.

Wat is een TWA werkelijk en hoe wordt die gebouwd?

Voor je de afwijzing oplost, is het nuttig precies te begrijpen wat je hebt gepubliceerd. Een Trusted Web Activity is een Android-app die in wezen je website schermvullend in een echte browserengine draait, zonder adresbalk of andere browserinterface. Voor de gebruiker ziet hij eruit en voelt hij aan als een native app. Onder de motorkap blijft het je live website.

TWA-apps worden meestal gemaakt met de Bubblewrap-CLI van Google of met PWABuilder. Beide bouwen voort op de bibliotheek androidbrowserhelper van Google. Je geeft de tool een URL, hij maakt een Android-project, waarna je het ondertekent en de AAB naar Google Play uploadt.

Waarom ontwikkelaars voor een TWA kiezen

Eén codebase

Je hebt al een website, idealiter een PWA. Een TWA brengt die naar de Play Store zonder alles in Kotlin, Flutter of React Native te herschrijven.

Directe updates

Omdat de app je live site laadt, publiceer je wijzigingen door de site uit te rollen. Er is geen app-update of nieuwe beoordelingswachtrij nodig.

Goedkoop en snel

Een TWA genereren duurt minuten in plaats van weken. Voor een bestaande PWA is dit de kortste route naar Android.

De keerzijde die de afwijzing veroorzaakt

Wat een TWA goedkoop maakt, maakt hem kwetsbaar bij de gesloten test:

  • Internet is nodig. De app is een venster naar je site, dus een zwakke verbinding betekent een zwakke app tenzij je PWA goede offline-ondersteuning heeft.
  • Risico op afwijzing in de Play Store. Het beleid voor minimale functionaliteit en herverpakte content richt zich op apps die slechts een website in een wrapper zijn. Een TWA zonder echte native mogelijkheden kan worden afgewezen of verwijderd. Native functies zoals pushmeldingen, offlinemodus, camera of share targets helpen je aan de juiste kant van die grens te blijven.
  • Het probleem met gebruikssignalen uit de vorige sectie verklaart waarom persoonlijke accounts bij de gesloten test van 14 dagen de melding "testers not engaged" blijven krijgen.

Het misverstand: een TWA is GEEN WebView

Dit is waar veel artikelen de fout in gaan. Nauwkeurigheid is belangrijk, omdat dit bepaalt hoe je het probleem oplost. Een TWA gebruikt het WebView-component van Android helemaal niet.

De mythe

"Een TWA is gewoon een WebView-wrapper"

De WebView van Android is een uitgeklede, insluitbare browser die door de app wordt bestuurd. Een TWA gebruikt hem niet.

De werkelijkheid

Een TWA gebruikt de Custom Tabs-engine

De TWA geeft je URL door aan de volledige geïnstalleerde browser van de gebruiker, meestal Chrome, en laat die de pagina schermvullend zonder interface renderen.

Omdat een TWA de engine achter Custom Tabs gebruikt, krijg je dezelfde renderingengine, JavaScript-engine en beveiligingssandbox als in Chrome. Cookies en opslag worden met Chrome gedeeld, browserupdates zijn automatisch en de volledige webstandaard wordt ondersteund. Dat is krachtig voor een gewone gepubliceerde app, maar betekent ook dat je schermen buiten het proces, in Chrome draaien. Daar ligt de waarschijnlijke bron van zowel zwakkere gebruikssignalen als lage aantallen actieve gebruikers.

De startvolgorde, stap voor stap

1
De gebruiker tikt op het appicoon

Android start de LauncherActivity van de TWA uit androidbrowserhelper.

2
Die activity vraagt Chrome je URL te openen

De pagina opent in een schermvullende Custom Tab zonder browserinterface. Er zijn geen adresbalk, tabbladen of andere browserknoppen.

3
Voor de adresbalk verdwijnt, voert Chrome een vertrouwenscontrole uit

Dat is het "Trusted"-deel van Trusted Web Activity. Kan de app niet aantonen dat hij bij de site hoort, dan blijft de adresbalk zichtbaar en verdwijnt de native illusie.

De vertrouwenscontrole: Digital Asset Links

Chrome verbergt de adresbalk alleen wanneer de app via Digital Asset Links kan aantonen dat hij bij de website hoort. De app declareert welke site hij vertegenwoordigt. De site moet op /.well-known/assetlinks.json een bestand aanbieden met het package en de SHA-256-vingerafdruk van het ondertekeningscertificaat.

https://yoursite.com/.well-known/assetlinks.jsonJSON
[{
  "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
    ]
  }
}]
Zo wordt de controle uitgevoerd

De app declareert de site

Het manifest noemt het https-domein dat de app vertegenwoordigt.

De site levert assetlinks.json

Het bestand bevat het package name en de SHA-256-vingerafdruk.

Chrome vergelijkt beide

De vingerafdruk moet bij het ondertekeningscertificaat van de app passen.

Komt overeenDe app draait schermvullend als een native app. De adresbalk blijft verborgen.
Ontbreekt / 404 / verkeerde vingerafdrukDe app opent, maar Chrome toont de adresbalk. Dit is de meest voorkomende TWA-fout.
De meest voorkomende TWA-fout

Zien testers bovenaan je "app" een browseradresbalk, dan ontbreekt assetlinks.json, geeft het een 404 terug of bevat het de verkeerde SHA-256-vingerafdruk. Herstel het bestand en zorg dat de vingerafdruk past bij de sleutel waarmee Google Play onder Play App Signing tekent. Dit herstelt alleen de schermvullende weergave. Het verhelpt niet de afwijzing wegens gebruikssignalen. Daarvoor heb je de WebView-rebuild nodig.

De route van gebruikssignalen: TWA tegenover WebView

De eenvoudigste manier om de afwijzing te begrijpen, is volgen waar de activiteit van een tester werkelijk terechtkomt. Bij een TWA staan je schermen één laag verder van je app, in Chrome Custom Tabs. Bij een WebView-app draaien dezelfde schermen binnen het proces van je eigen app en worden ze rechtstreeks aan je package toegeschreven. Dat verschil bepaalt hoe sterk de activiteit wordt geregistreerd.

Waar de activiteit van een tester wordt toegeschreven

TWA
Tester tikt op de appJe packageChrome Custom TabWebcontent
Zwak
WebView
Tester tikt op de appJe packageWebView (in-process)Webcontent
Sterk
Het belangrijkste inzicht

Een WebView laadt de URL van je site binnen je eigen app, waardoor activiteit aan je package wordt toegeschreven zoals de beoordeling van Google die verwacht. Bij een TWA vormt de Custom Tab een extra sprong die het signaal lijkt te verdunnen. Lage cijfers in je eigen webanalytics betekenen bij een TWA niet automatisch dat Google geen gebruik ziet. Praktisch blijft de oplossing voor de gesloten test hetzelfde: een WebView-rebuild registreert activiteit betrouwbaarder.

Een TWA herkennen, van buiten en van binnen

Weet je niet zeker of de app die jij of een opdrachtnemer heeft opgeleverd echt een TWA is? Zo stel je het vast, eerst op het oog en daarna definitief via de APK of een aangesloten apparaat.

Snelle visuele aanwijzingen voor gebruikers

  • De app gedraagt zich precies als de website, omdat hij de website is.
  • Bij een verkeerde configuratie zie je bovenaan een browseradresbalk. Dat is een duidelijke aanwijzing, zie de assetlinks-fout hierboven.
  • Content verandert zonder app-update in de Play Store.

Definitieve technische aanwijzingen in de APK of op het apparaat

KenmerkWat het betekent
Een DelegationService die de actie TRUSTED_WEB_ACTIVITY_SERVICE declareertDe betrouwbaarste vingerafdruk. Alleen TWA-apps declareren dit.
LauncherActivity, vaak ManageDataLauncherActivity, uit com.google.androidbrowserhelperDe launcher van Bubblewrap.
Een geverifieerd https-domein in de linkinstellingen van de app, assetlinks.json werktDe site die door de TWA wordt verpakt.
Geen libflutter.so, geen index.android.bundle, weinig native codeHet is een webwrapper en geen Flutter-, React Native- of native build.

Bevestig het met adb

Op een aangesloten apparaat of emulator geven twee opdrachten uitsluitsel:

terminalbash
# 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)
De uitkomst lezen

De uitkomst lezen: zie je een DelegationService en een LauncherActivity uit androidbrowserhelper, dan kijk je vrijwel zeker naar een TWA. Zie je een eigen MainActivity, native .so-bibliotheken en geen delegatieservice, dan is het een echte native app of een Flutter- of React Native-app. Het probleem met gebruikssignalen uit deze gids is daarop niet van toepassing.

TWA tegenover WebView bij de gesloten test

Beide architecturen verpakken webcontent. Voor de gesloten test van 14 dagen telt vooral waar die content draait en waaraan activiteit wordt toegeschreven. Zo verschillen ze op de punten die bepalen of je in één cyclus productie bereikt.

Wat voor jou telt
TWA- / PWA-wrapper
Gewone WebView
Waar schermen renderen
Chrome Custom Tabs
In het proces van je app
Sterkte van gebruikssignalen
Zwak
Sterk
Risico op "testers not engaged"
Hoog in onze gegevens
Laag
Actieve gebruikers in Play Console
Rapporteert vaak te weinig
Rapporteert betrouwbaar
Native controle, terugknop en offline
Beperkt
Volledige controle
Gedrag van in-appanalytics
Onvoorspelbaar, telt te weinig
Standaard
Thin-wrapperbeoordeling
Blijft gelden
Blijft gelden
Betrouwbaarheid tijdens 14 dagen
Wisselend
Betrouwbaar
Groter afwijzingsrisico

TWA- / PWA-wrapper

Geschikt voor: apps die al zijn goedgekeurd en geen gesloten test meer hoeven te halen.

Snel op te zetten vanuit een bestaande PWA
Schermvullende ervaring zonder adresbalk
Activiteit draait één laag verderop in Chrome
Hoger risico op "testers not engaged"
Kan actieve gebruikers in Play Console te laag rapporteren
Aanbevolen voor gesloten tests

Gewone WebView

Geschikt voor: apps die de gesloten test van 14 dagen met 12 testers moeten halen.

Schermen draaien in het proces van je app
Activiteit wordt rechtstreeks aan je package toegeschreven
Volledige native controle over terugknop, offline en fouten
Standaardgedrag van analytics
Heeft nog steeds echte meerwaarde nodig voor de thin-wrapperbeoordeling
Interactief

Compatibiliteitscontrole voor je framework

WebView gedraagt zich anders dan Chrome op een desktop. Kies je stack en bekijk welke instelling bij de lancering het vaakst problemen geeft.

Kies hierboven je framework voor het bijbehorende WebView-advies.

Schakel DOM Storage in

SPA / client-side routing

Single-page apps gebruiken localStorage en sessionStorage voor client-side routing en authenticatiestatus. Zonder settings.domStorageEnabled = true kan je routing bij het starten breken. Testers zien dan een leeg scherm of een vastgelopen laadindicator, wat op weinig gebruik lijkt.

Behoud ook javaScriptEnabled = true en stuur navigatie binnen de app via een WebViewClient, zodat deep links niet naar Chrome springen.

Declareer native rechten voor embeds en uploads

No-codebuilder

WebView behandelt iframe-embeds anders dan Chrome op een desktop. No-codebuilders steunen daar vaak sterk op. Declareer uploadrechten native in AndroidManifest.xml en koppel WebChromeClient.onShowFileChooser, anders kunnen formulieren en media-uploads stil mislukken.

Voeg <uses-permission android:name="android.permission.INTERNET"/> toe en, als je media accepteert, camera- en opslagrechten. Vraag die vervolgens tijdens runtime aan.

Voeg offlinecache en echte native meerwaarde toe

Statisch / CMS

Een gewone statische site in een WebView is het schoolvoorbeeld van een thin wrapper. Stel cacheMode = LOAD_DEFAULT in voor een bruikbaar offlinealternatief, voeg bij een verbroken verbinding een eigen foutscherm met opnieuw-proberenknop toe en bouw minstens één native functie in, zoals pushmeldingen, een share target of snelkoppelingen op het startscherm.

Zo verandert een CMS- of statische export van een ingelijste site in een app met voldoende functionaliteit voor de beoordeling.

De oplossing: bouw een gewone WebView-app

In plaats van een TWA te repareren of er sterkere signalen uit te proberen halen, is de duidelijkste route je app rond een WebView-component herbouwen en die build publiceren. Je hebt drie gangbare routes. Alle drie laden je site binnen je eigen app:

1
Native WebView in Android Studio

De directste route. Plaats een WebView in je main activity, wijs hem naar je URL en schakel JavaScript en DOM storage in. Je houdt maximale controle zonder extra framework.

2
Capacitor

Is je app al een webproject of PWA, dan verpakt Capacitor die in een native WebView-shell en levert het native plugins voor camera, push en opslag. Dit is een logische stap vanaf een PWA zonder het signaalprobleem van TWA.

3
Cordova

De oudste, maar nog steeds bruikbare optie. Het principe blijft hetzelfde: je webcontent draait in de WebView van je app en niet in Chrome Custom Tabs.

De minimale WebView-opzet, klaar om te kopiëren

De kern is klein: een WebView die je URL laadt met JavaScript en opslag ingeschakeld, navigatie binnen de app houdt en de Android-terugknop correct afhandelt. Kies je taal en kopieer de basis:

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

Drie toevoegingen die je voor de beoordeling nodig hebt

Een kale WebView die alleen loadUrl() aanroept, blijft een thin wrapper. Deze drie toevoegingen maken er een echte app van en voorkomen dat testers op lege schermen uitkomen:

1
Handel de Android-terugknop af

Koppel OnBackPressedCallback, zoals in het voorbeeld hierboven, zodat de knop eerst door de webgeschiedenis teruggaat en de app pas sluit wanneer er niets meer terug te gaan is. Zonder deze afhandeling sluit één tik de app en ziet hij direct uit als een gebrekkige thin wrapper.

2
Behandel offline- en foutstatussen

Implementeer onReceivedError in je WebViewClient en toon een echt offlinescherm met een opnieuw-proberenknop in plaats van een witte pagina. Een leeg scherm bij een verbroken verbinding is de snelste manier om als thin wrapper over te komen.

3
Voeg echte native meerwaarde toe

Denk aan pushmeldingen via FCM, offlinecache, een share target, bestandsuploads via WebChromeClient.onShowFileChooser of apparaatintegratie. Voeg iets toe dat de app duidelijk meer maakt dan de geladen URL. Dat helpt hem aan het beleid voor minimale functionaliteit te voldoen.

Heb je al een PWA? Gebruik Capacitor

Wil je niet zelf Android-code schrijven, dan verpakt Capacitor je bestaande webproject in een native WebView-shell. Je krijgt standaard afhandeling van de terugknop, een native splashscreen en plugins voor push, camera en bestandssysteem. Het is de directste route van PWA naar WebView en vermijdt het Custom Tabs-gedrag van TWA volledig.

De regel die telt

Publiceer de app die je hebt getest. Bouw de WebView-app, doorloop met die build de gesloten test en publiceer dezelfde build. Test niet één architectuur om die daarna door een andere app te vervangen. Dat kan volgens het beleid van Google voor misleidend gedrag tot opschorting van de app of het account leiden. Blijf je bij WebView, dan is wat je test ook wat je lanceert.

Overstappen zonder je teller van 14 dagen terug te zetten

Ben je al halverwege de test, dan hoef je niet opnieuw te beginnen. De teller van 14 dagen blijft bij een app-update lopen zolang je dezelfde testtrack en hetzelfde package name gebruikt. Zo stap je veilig over:

1
Bouw de WebView-app met hetzelfde package name

Behoud exact hetzelfde applicationId als je huidige TWA. Een ander package name maakt een nieuwe appvermelding en dwingt een nieuwe cyclus van 14 dagen af.

Tip: zet je versionCode minimaal 1 hoger dan bij de TWA-build, anders weigert Play Console de upload als dubbele versie.
2
Laat hem als een echte zelfstandige app werken

Zorg voor betrouwbaar laden, correcte afhandeling van de Android-terugknop, logische offline- en foutstatussen en geen lege schermen. Dat verkleint ook het risico bij de thin-wrapperbeoordeling in de volgende sectie.

3
Upload hem als update naar je bestaande gesloten testtrack

Open je gesloten testtrack, maak een nieuwe release en upload de WebView-AAB. Maak geen nieuwe track of nieuwe app.

4
Laat testers updaten en doorgaan

Je aangemelde testers updaten naar de WebView-versie en gaan verder. De teller blijft lopen zolang minstens 12 testers actief blijven.

De teller blijft lopen

Een update naar je gesloten testtrack zet de teller van 14 dagen niet terug. Google ziet actief doorontwikkelen tijdens het testen als een normaal onderdeel van het proces. Daardoor kun je halverwege de cyclus van TWA naar WebView overstappen zonder de opgebouwde dagen kwijt te raken.

Geldt een WebView-app nog steeds als thin wrapper?

Hier gaat het mis bij ontwikkelaars die WebView als wondermiddel zien. Overstappen van TWA naar WebView pakt het probleem met gebruikssignalen aan, maar stelt je niet vrij van het Google-beleid voor spam en minimale functionaliteit. Een WebView die niet meer is dan je homepage in een kader kan nog steeds als thin wrapper worden afgewezen. Daarmee bedoelen we een dunne wrapper: alleen een ingelijste website zonder echte native meerwaarde.

Zie dit als twee aparte poorten. Een testdienst of een WebView-rebuild kan je bij één poort helpen, maar niet automatisch bij de andere.

Poort 1

De gesloten testvereiste

Een controle op aantal en duur: minimaal 12 aangemelde testers die de afgelopen 14 dagen doorlopend actief zijn. WebView laat activiteit betrouwbaarder registreren en PrimeTestLab levert de testers.

Aantal + duur
Poort 2

Minimale functionaliteit

Een beleids- en kwaliteitsbeslissing: biedt de app echte waarde of is het slechts een website in een kader? Alleen een inhoudelijke app haalt deze poort. Geen testdienst of architectuurwijziging doet dat voor je.

Beleid + kwaliteit

Het doel is dus niet alleen WebView in plaats van TWA, maar een WebView-app met genoeg echte waarde en native gedrag om zelfstandig te staan. In de praktijk betekent dat:

A
Handel de Android-terugknop goed af

Terug moet eerst door de webgeschiedenis navigeren en daarna netjes afsluiten. Laat een tester niet op een leeg scherm achter en sluit de app niet onverwacht.

B
Beheer offline- en foutstatussen

Toon een echt offlinescherm en een manier om opnieuw te proberen. Een wit scherm bij een verbroken verbinding laat je app direct op een dunne wrapper lijken.

C
Voeg echte native meerwaarde toe

Pushmeldingen, een goede startschermervaring, apparaatintegratie of offlinecache maken de app duidelijk meer dan de URL die hij laadt.

De lok-en-wisselregel, overtreed hem niet

Test niet een inhoudelijke app om die voor productie te vervangen door een wezenlijk andere of dunnere app. Dit is precies het misleidende gedrag waarvoor Google accounts kan opschorten.

Kies wel voor de WebView-architectuur, bouw een inhoudelijke app, test die build en publiceer precies die build. Houd dezelfde app aan tijdens het testen en in productie.

Wil je een uitgebreidere checklist van kwaliteitsproblemen? Onze gids over waarom gesloten tests worden afgewezen behandelt de meest voorkomende beleids- en beoordelingsfouten naast gebruikssignalen.

Weet je niet of je app een TWA is? Wij controleren het bij je bestelling

Je hoeft niet zelf adb-opdrachten uit te voeren of door je APK te graven. PrimeTestLab kan voor je vaststellen of je app een TWA is. Zodra je onze testdienst bestelt, inspecteert ons team je build en bepaalt het of het om een TWA of PWA-wrapper gaat. Is dat zo, dan vertellen we precies wat je moet aanpassen voordat je 14 dagen besteedt aan een architectuur die op gebruikssignalen kan stranden.

200+TWA-apps gecontroleerd

Alleen al in de afgelopen maanden hebben we meer dan 200 TWA-apps geïnspecteerd en advies gegeven. Na onze aanbevelingen en aanpassingen konden die apps hun testcyclus betrouwbaar voortzetten. Herkennen we een TWA, dan krijg je een duidelijk, uitvoerbaar rebuildplan in plaats van een vaag "probeer het opnieuw".

Wat er gebeurt zodra je bestelt

1
Je bestelt en deelt je app

Zodra je je gesloten testtrack of build met ons deelt, komt je app zonder extra verzoek in onze beoordelingswachtrij.

2
We inspecteren de build direct op TWA-kenmerken

Ons team zoekt naar DelegationService, de launcher van androidbrowserhelper, Custom Tabs-gedrag en het ontbreken van native code. Dit zijn dezelfde kenmerken als in de herkenningssectie hierboven.

3
Is het een TWA, dan krijg je een concrete oplossing

Meestal adviseren we de WebView-rebuild uit deze gids, zodat je de architectuur aanpast voordat een cyclus van 14 dagen op de beoordeling van gebruikssignalen strandt.

4
Zodra de build goed staat, doorlopen onze testers de 14 dagen

Met de juiste architectuur en 12+ geverifieerde testers die 14 achtereenvolgende dagen actief blijven, zijn beide poorten afgedekt. Zo halen we een eerste-pogingsscore van 99,9%.

Waarom dit weken bespaart

Veel ontwikkelaars ontdekken pas na een mislukte cyclus van 14 dagen dat hun TWA het probleem is. Omdat wij het op dag nul herkennen, kun je de architectuur één keer aanpassen, één keer testen en dezelfde build publiceren. Dat voorkomt een maand vol herhaalde afwijzingen.

Hoe PrimeTestLab helpt bij de andere helft van het probleem

Architectuur is de ene helft. De andere helft, waar veel zelfstandige ontwikkelaars vastlopen, is 12 testers vinden die zich echt aanmelden en 14 dagen aangemeld blijven. Dat regelt PrimeTestLab.

Wij leveren geverifieerde, aangemelde testers op echte Android-apparaten. Ze houden je gesloten test gedurende de volledige vereiste actief, zodat één afhaker je reeks van 14 dagen niet breekt. Jij deelt de aanmeldingslink voor de gesloten test. Wij verzorgen uitnodigingen, controleren aanmeldingen, volgen dagelijks de activiteit en bewaken de retentie van 14 dagen. Meer dan 7.400 apps en een eerste-pogingsscore van 99,9%.

Vanaf $19.9912 testers, plus 5% servicekosten
4-6 uurTot de test start
7.400+ apps99,9% succes
Om er duidelijk over te zijn

Een testdienst dekt de testervereiste. Hij kiest niet de architectuur van je app en doorstaat de thin-wrapperbeoordeling niet voor je. De sterke combinatie is een inhoudelijke WebView-build met 12 echte testers gedurende de volle 14 dagen, zodat geen van beide onderdelen je aanvraag laat stranden.

Huidige pakketten

Starter12 testers$19.99
  • Voldoet aan het minimum van Google
  • Echte Android-apparaten
  • Volledige dekking van 14 dagen
Bekijk plan
Beste waardeEnterprise25 testers$27.99
  • Maximale veiligheidsmarge
  • Beste apparaatspreiding
  • Sterkste eerste-pogingsscore
Bekijk plan
Professional20 testers$29.99
  • Veiligheidsbuffer inbegrepen
  • Betere apparaatspreiding
  • Meer vertrouwen bij de eerste poging
Bekijk plan

Plus 5% servicekosten · gratis hertest of volledige terugbetaling

Veelgestelde vragen

Waarom wordt mijn TWA-app steeds afgewezen bij de gesloten test?

In onze ervaring met meer dan 7.400 apps krijgen TWA-builds en PWA-wrappers veel vaker de afwijzing "testers were not engaged" dan gewone native apps, ook wanneer testers de app dagelijks gebruikten. Waarschijnlijk komen de gebruikssignalen die Google bij de beoordeling van productietoegang leest zwakker door wanneer webcontent via Chrome Custom Tabs draait in plaats van in het proces van je eigen app. Google publiceert de exacte signalen niet, dus zie dit als onze waarneming en niet als officieel beleid.

Moet ik van TWA naar WebView overstappen of de TWA proberen te herstellen?

In onze ervaring is herbouwen als een gewone WebView-app veel betrouwbaarder dan betere gebruikssignalen uit een TWA proberen te persen. Een WebView laadt je site binnen je eigen app, waardoor activiteit aan je package wordt toegeschreven zoals de beoordeling verwacht. Ben je eenmaal overgestapt, blijf dan bij WebView en publiceer de build die je hebt getest in plaats van voor productie terug te keren naar TWA.

Haalt een WebView-app automatisch de gesloten test?

Nee. Overstappen op WebView verhelpt het probleem met gebruikssignalen dat wij bij TWA-builds zien, maar stelt je niet vrij van het beleid van Google voor spam en minimale functionaliteit. Een WebView die alleen je website omlijst, kan nog steeds als thin wrapper worden afgewezen. Maak er dus een echte app van met native meerwaarde, correcte afhandeling van de terugknop en goede offline- en foutstatussen.

Zet een update tijdens de gesloten test de teller van 14 dagen terug?

Nee. Een update uploaden naar je gesloten testtrack zet de teller van 14 dagen niet terug. De teller blijft lopen, zodat je halverwege de cyclus een TWA-build door een WebView-build kunt vervangen zonder opnieuw te beginnen, zolang je hetzelfde package name behoudt. Google beschouwt actief doorontwikkelen tijdens het testen als normaal.

Waarom toont mijn TWA weinig actieve gebruikers in Play Console?

Sommige ontwikkelaars melden lage aantallen actieve gebruikers voor TWA-builds. Google documenteert de precieze oorzaak niet, maar het lijkt samen te hangen met webcontent die via Chrome Custom Tabs draait in plaats van binnen je app. Een WebView-build rapporteert activiteit doorgaans betrouwbaarder, omdat de schermen in het proces van je eigen app draaien.

Is het veilig om een TWA te testen en in plaats daarvan een WebView-app te publiceren?

De veilige aanpak is dezelfde build testen en publiceren. Test niet eerst een TWA om daarna een andere app te plaatsen. Bouw eerst om naar WebView, doorloop met die WebView-build de gesloten test en publiceer precies die build. Eén app indienen om de beoordeling te halen en die daarna vervangen door een wezenlijk andere app kan volgens het beleid van Google voor misleidend gedrag tot opschorting leiden.

Kan een TWA- of PWA-wrapper ooit worden goedgekeurd op Google Play?

Ja. Wrapper-apps kunnen worden goedgekeurd wanneer ze aan het beleid voor minimale functionaliteit en aan de gesloten testvereiste voldoen. Bij persoonlijke accounts die de gesloten test van 14 dagen met 12 testers moeten doorlopen, zien wij echter consequent dat WebView-builds de beoordeling van gebruikssignalen betrouwbaarder doorstaan dan TWA-builds. Daarom adviseren we in die situatie WebView.

Gebruikt een TWA het WebView-component van Android?

Nee. Dit is het meest voorkomende misverstand. Een TWA gebruikt niet het WebView-component van Android, maar de engine achter Custom Tabs. De URL wordt doorgegeven aan de volledige geïnstalleerde browser van de gebruiker, meestal Chrome, die de pagina schermvullend en zonder browserinterface rendert. Een Android WebView is juist een insluitbare browser die door de app wordt bestuurd en in het eigen appproces draait. Daarom herstelt een WebView-rebuild de toeschrijving van gebruikssignalen.

Waarom toont mijn TWA bovenaan een adresbalk?

Dan is de vertrouwenscontrole via Digital Asset Links mislukt. Chrome verbergt de adresbalk alleen wanneer je site een geldig /.well-known/assetlinks.json-bestand aanbiedt met het package van de app en de SHA-256-vingerafdruk van het ondertekeningscertificaat. Ontbreekt het bestand, geeft het een 404 terug of past de vingerafdruk niet bij de sleutel waarmee Google Play onder Play App Signing tekent, dan opent de app wel maar toont Chrome de adresbalk. assetlinks.json herstellen brengt de schermvullende weergave terug, maar verhelpt niet de afwijzing wegens gebruikssignalen. Daarvoor is de WebView-rebuild nodig.

Hoe weet ik of een app een TWA is?

Inspecteer de build. De betrouwbaarste aanwijzing is een DelegationService die de actie TRUSTED_WEB_ACTIVITY_SERVICE declareert. Alleen TWA-apps doen dat. Meestal zie je ook een LauncherActivity uit com.google.androidbrowserhelper en geen native bibliotheken van Flutter of React Native. Voer op een aangesloten apparaat adb shell dumpsys package <package> | grep -i DelegationService uit om de service te vinden en adb shell pm get-app-links <package> om te controleren of Digital Asset Links slaagt ("verified") of mislukt ("1024").

Kan PrimeTestLab controleren of mijn app een TWA is?

Ja. Zodra je onze testdienst bestelt, inspecteert ons team je build en stelt het vast of het om een TWA of PWA-wrapper gaat. Is dat zo, dan krijg je een concrete aanbeveling voordat de cyclus van 14 dagen verloren gaat. We hebben de afgelopen maanden meer dan 200 TWA-apps gecontroleerd. Na onze aanbevelingen en aanpassingen konden die apps hun testcyclus betrouwbaar voortzetten. Je hoeft zelf geen adb-opdrachten uit te voeren of de APK te inspecteren.

Hoe snel kan PrimeTestLab testers voor mijn gesloten test leveren?

Zodra je gesloten testtrack live en bereikbaar is, melden testers van PrimeTestLab zich doorgaans binnen 4-6 uur aan. Prijzen beginnen bij $19.99 plus 5% servicekosten voor 12 testers. Onze eerste-pogingsscore is 99,9% over meer dan 7.400 apps.

Conclusie

Samenvatting

Blijft een TWA-build bij de gesloten test van Google Play stranden op gebruikssignalen, dan is de duidelijkste oplossing hem herbouwen als een gewone WebView-app en die build naar productie brengen. Keer daarna niet terug naar TWA. Behoud hetzelfde package name, zodat de update je teller van 14 dagen niet terugzet. Maak de app inhoudelijk genoeg voor de beoordeling van minimale functionaliteit. Laat PrimeTestLab de vereiste van 12 testers en 14 dagen afdekken. WebView pakt het signaalprobleem aan, een echte app pakt het thin-wrapperrisico aan en PrimeTestLab levert de testers. Bekijk de prijsplannen →

Kefayatullah Khadem - specialist in publiceren op Google Play

Geschreven door

Kefayatullah Khadem

Software-engineer en specialist in publiceren op Google Play

Hij schrijft de gidsen van PrimeTestLab over gesloten tests op basis van echte cases en officiële documentatie van Play Console.

7.400+apps begeleid
99,9%slagingspercentage
120+landen
8+jaar software

Succespercentage van 99,9%

Herbouwd als WebView? Dek je test van 14 dagen af.

Echte testers. Echte apparaten. De volle 14 dagen. Zonder reset.

Vanaf $19.99, plus 5% servicekosten

Testen begint binnen 4-6 uur · 120+ landen · Gratis hertest of volledige terugbetaling

Sluit je aan bij 2.200+ ontwikkelaars die hun apps met PrimeTestLab lanceerden

Regel 12 testers · $19.99, plus 5% servicekosten WhatsApp