Réponse rapide
Si une TWA s’affiche en plein écran quand vous installez votre propre version, mais montre une barre de navigateur une fois installée depuis Google Play, vérifiez d’abord si votre site mentionne le certificat de signature de Play. Dans la Play Console, ouvrez Play app signing sous Protected with Play et copiez le SHA-256 du certificat de la clé de signature d’application. Ajoutez-le au tableau sha256_cert_fingerprints de https://your-domain/.well-known/assetlinks.json, servez ce fichier en HTTPS avec un HTTP 200 direct, sans redirection et en application/json, puis testez de nouveau avec une version installée depuis un canal de test Play. Si l’empreinte correspond déjà, cherchez une navigation hors de l’origine validée, des redirections et le navigateur utilisé.
Corrigez dans cet ordre
Testez ensuite la version installée depuis Google Play, pas une version que vous avez installée vous-même.
Ce guide traite d’une seule réparation: l’association entre votre site et la version que Google Play distribue. Il ne couvre ni la création de la TWA elle-même ni l’examen de l’application par Play, qui ont leurs propres guides, en lien ci-dessous. Chaque page Google citée ici a été vérifiée le 16 octobre 2026, et les sources figurent à la fin.
Dans ce guide
Pourquoi la barre de navigateur n’apparaît que sur l’installation Play
Chrome vérifie une TWA en comparant le certificat qui a signé l’application installée avec les empreintes publiées par votre site. Quand cette vérification échoue, le guide de démarrage rapide TWA de Chrome indique que le navigateur se rabat sur l’affichage de votre site dans un onglet personnalisé (Custom Tab). C’est ce repli qui produit la barre d’adresse que vous voyez.
Avec Play App Signing, il y a généralement deux certificats. Vous signez le bundle que vous importez avec votre clé d’importation, et Google signe les APK qu’il distribue avec la clé de signature d’application. La page Android concepts for web developers de Chrome indique que l’empreinte de la clé de signature d’application est celle qui correspond à votre application lorsqu’elle est téléchargée depuis le Play Store. Un fichier qui ne mentionne que votre certificat local passe donc sur votre bureau et échoue sur chaque téléphone qui a installé l’application depuis Play.
Les deux clés ne sont pas toujours différentes. La documentation Android sur la signature d’application décrit des configurations où la même clé sert à la fois de clé de signature d’application et de clé d’importation. La solution consiste donc à comparer les vrais certificats, pas à supposer lequel vous avez.
| Provenance de la version | Signée avec | Ce qu’assetlinks.json doit contenir |
|---|---|---|
| Installée depuis un canal de test Play ou la production | Signée avecLa clé de signature d’application de Play | Ce qu’assetlinks.json doit contenirLe SHA-256 du certificat de la clé de signature d’application. C’est lui qui corrige l’installation Play. |
| Votre propre APK de release, installé à la main | Signée avecVotre clé d’importation ou de release | Ce qu’assetlinks.json doit contenirLe SHA-256 de cette clé, seulement si vous voulez que ces versions soient aussi vérifiées |
| Exécution debug depuis Android Studio | Signée avecVotre clé de debug locale | Ce qu’assetlinks.json doit contenirLe SHA-256 de debug, seulement si vous voulez que les versions debug soient vérifiées. Un ID d’application différent nécessite sa propre déclaration. |
| Lien de partage interne d’applications | Signée avecUne clé distincte de partage interne d’applications | Ce qu’assetlinks.json doit contenirGoogle signe à nouveau ces importations avec une clé de partage interne d’applications: testez donc la correction sur un canal de test |
| Une version publiée après une mise à niveau de la clé de signature | Signée avecLe certificat que Play utilise désormais pour cette version | Ce qu’assetlinks.json doit contenirChaque certificat des versions que vous prenez encore en charge. Ne supprimez pas un ancien certificat uniquement parce qu’un nouveau apparaît. |
Les testeurs du test fermé la voient aussi
Les testeurs d’un test fermé installent la version signée par Play, c’est donc souvent là que la barre apparaît en premier. Ce n’est pas un défaut du test fermé: la variable est le certificat de l’APK installé. Si vous ne testez jamais qu’un APK installé manuellement, le problème peut vous échapper complètement.
Trouver le SHA-256 de signature d’application dans la Play Console
La documentation de Google donne actuellement deux libellés pour le même emplacement. Les deux partent de Protected with Play dans le menu de gauche de votre application.
| Page Google | Chemin | Copier depuis |
|---|---|---|
| Aide Play Console: Utiliser la signature d’application Play | CheminProtected with Play > Play Store distribution > Go to Play app signing | Copier depuisSection de la clé de signature d’application (App signing key) |
| Documentation Android App Links | CheminProtected with Play > Play Store protection > Manage Play app signing | Copier depuisApp signing key certificate > SHA-256 certificate fingerprint |
Des guides plus anciens, y compris certaines pages Google, indiquent encore Release > Setup > App signing ou Setup > App integrity. Si vous ne trouvez que ces libellés, c’est la même page sous un ancien nom.
Ouvrez l’application dans la Play Console
Sélectionnez l’application dont votre TWA utilise le nom de package. Chaque application a sa propre clé de signature d’application.
Accédez à Play app signing
Utilisez l’un ou l’autre des chemins du tableau ci-dessus. Les deux mènent à la page qui affiche la clé de signature d’application et la clé d’importation.
Copiez le SHA-256 de la clé de signature d’application
Copiez l’empreinte de certificat SHA-256 depuis la section de la clé de signature d’application, pas depuis la section de la clé d’importation ni depuis la ligne SHA-1. Elle compte 32 paires de caractères hexadécimaux séparées par des deux-points. Collez-la en entier: un exemple raccourci tiré d’un article de blog ne sera pas vérifié.
Conservez chaque certificat de signature d’application concerné
La page d’aide actuelle de Google décrit la signature hybride prête pour l’ère quantique, où vous copiez les empreintes de trois clés: de nouvelles clés classique et post-quantique utilisées sur les appareils récents, et la clé classique utilisée sur les appareils plus anciens. Si votre page affiche plus d’un certificat de signature d’application, mentionnez chacun de ceux que vos appareils pris en charge peuvent recevoir. Cela ne concerne que les applications qui utilisent cette configuration; la plupart des applications affichent un seul certificat de signature d’application.
Lire l’empreinte d’une clé que vous détenez vous-même
Pour votre clé d’importation ou une clé de debug, l’outil keytool de Java affiche le même format. Remplacez le fichier keystore et l’alias par les vôtres, puis copiez la ligne intitulée SHA256:
keytool -list -v -keystore my-upload-key.jks -alias upload
Si vous gérez de nombreuses applications, l’API Google Play Developer peut aussi renvoyer le hachage du certificat des APK générés par Play (le champ certificateSha256Hash de la liste des APK générés). Pour une correction ponctuelle, copier depuis la Play Console est plus simple.
Rédiger et servir un fichier assetlinks.json correct
Le fichier est un tableau JSON de déclarations. Pour une TWA, la relation est delegate_permission/common.handle_all_urls, et la cible est votre application Android: l’espace de noms android_app, votre ID d’application exact et un tableau d’empreintes SHA-256. Un fichier minimal ressemble à ceci:
[
{
"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"
]
}
}
]
Remplacez com.example.twa par votre ID d’application et chaque espace réservé par un SHA-256 complet, séparé par des deux-points. Supprimez la deuxième entrée si vous voulez seulement que les installations Play soient vérifiées. Du JSON strict uniquement: pas de commentaires, pas de virgules finales, pas de valeurs SHA-1.
Comment Google exige que le fichier soit servi
- Emplacement exact.
https://your-domain/.well-known/assetlinks.json, avec le point dans.well-known.example.cometwww.example.comsont des origines différentes; publiez le fichier sur chacune de celles que votre application ouvre. Une copie dans un sous-répertoire comme/app/.well-known/ne compte pas. - Un HTTP 200 direct. La documentation Digital Asset Links de Google indique: “Any response from the server besides HTTP 200 is treated as an error, and will result in an empty statement list.” (toute réponse du serveur autre que HTTP 200 est traitée comme une erreur et produit une liste de déclarations vide)
- Aucune redirection. Les réponses 301 et 302 ne sont pas suivies. Cela inclut un passage de http à https et un passage du domaine nu vers www.
- HTTPS avec une chaîne de certificats valide, et l’en-tête
Content-Type: application/json. Une page de connexion ou une page d’erreur HTML qui répond 200 n’est pas un fichier valide.
Vérifiez la réponse en ligne depuis n’importe quel terminal. La première ligne d’état doit être 200 et le type de contenu doit être JSON, sans aucun 3xx avant:
curl -sI https://example.com/.well-known/assetlinks.json
Plusieurs empreintes, plusieurs applications
Le guide Android sur l’association de sites web dit du tableau d’empreintes: “This field supports multiple fingerprints, which can be used to support different versions of your app, such as debug and production builds.” (ce champ accepte plusieurs empreintes, pour prendre en charge différentes versions de votre application, par exemple debug et production). N’ajoutez une empreinte d’importation ou de debug que pour les versions auxquelles vous voulez vraiment que ce site fasse confiance. Une version avec un ID d’application différent, comme un package de debug distinct, nécessite sa propre déclaration dans le tableau.
Si vous avez créé la TWA avec Bubblewrap ou PWABuilder
Dans un projet Bubblewrap existant, ajoutez l’empreinte de Play et régénérez le fichier:
bubblewrap fingerprint add "PLAY_APP_SIGNING_KEY_SHA256" --name="Play app signing"
bubblewrap fingerprint list
bubblewrap fingerprint generateAssetLinks
Générer le fichier ne revient pas à le déployer: importez le nouveau assetlinks.json sur votre site et vérifiez-le avec curl. bubblewrap validate évalue votre PWA selon des critères de qualité; il ne vérifie pas l’association de signature, donc une réussite à ce test ne prouve rien sur l’empreinte. Les instructions actuelles de PWABuilder font la même remarque sur la signature, “Once you've uploaded your .aab file, Google Play re-signs your app” (une fois votre fichier .aab importé, Google Play signe à nouveau votre application), et vous demandent d’ajouter l’empreinte de Play au fichier généré. Corriger une empreinte, c’est modifier votre site, pas le binaire de l’application.
Vérifier l’association, puis tester l’installation Play
Quatre couches entrent en jeu: le fichier sur votre site, l’API Digital Asset Links de Google, la vérification des liens propre à Android et le navigateur qui lance votre TWA. Réussir une couche ne prouve pas que la suivante passera: vérifiez-les dans l’ordre et terminez sur l’appareil.
Le fichier du site
Lancez la vérification curl ci-dessus. Corrigez toute redirection, tout mauvais type de contenu ou tout statut autre que 200 avant de chercher ailleurs.
Le Statement List Generator and Tester de Google
Le Statement List Generator and Tester de Google prend votre domaine, votre nom de package et votre SHA-256, puis teste si la déclaration est présente. C’est la vérification visuelle la plus rapide.
La vérification exacte via l’API
La méthode assetlinks.check répond à une question précise: ce package, avec ce certificat, est-il lié à ce site? Remplacez l’origine, le package, l’empreinte et la clé, encodez les valeurs pour l’URL et cherchez "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
La source est l’origine, pas l’URL du fichier. La méthode statements.list se contente de lister ce que le site publie: une liste non vide ne prouve donc pas que votre package et votre certificat y figurent. Le guide de Google demande une clé API; une erreur d’autorisation ou de quota est un problème d’accès à l’API, pas un échec de l’association.
Pour voir tout ce que le site publie, la requête de liste ne prend que l’origine et la relation. Lisez les cibles renvoyées et cherchez votre package et votre certificat exacts:
https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https%3A%2F%2Fexample.com&relation=delegate_permission%2Fcommon.handle_all_urls
L’application qu’un testeur installe
Installez depuis votre canal de test Play, pas un APK installé manuellement ni un lien de partage interne d’applications, puis ouvrez l’application. Si la barre est toujours là, lisez le journal de vérification de Chrome via adb. La documentation de Chrome indique que si vous voyez Statement failure matching fingerprint., la signature de l’application ne correspond pas à votre assetlinks.json:
adb logcat -v brief | grep -e OriginVerifier -e digital_asset_links
L’App Links Assistant d’Android Studio (Tools > App Links Assistant) vérifie l’association Android App Links et votre manifeste. Il est utile pour cela, mais il ne vous dit pas si votre TWA s’ouvre en plein écran; seul le test sur l’appareil le fait.
Avancé: l’état de vérification propre à Android
Sur Android 12 et versions ultérieures, le guide de vérification d’Android documente ces commandes pour les App Links. Remplacez le package, exécutez les deux premières, attendez quelques minutes, puis lisez l’état:
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 décrit la validation de domaine d’Android, pas le fait que votre TWA s’ouvre sans l’interface du navigateur. Les codes de 1024 ou plus sont des erreurs propres au vérificateur, pas le diagnostic d’un SHA-256 erroné. Pour la TWA elle-même, utilisez le journal Chrome ci-dessus.
L’empreinte correspond mais la barre reste
Une barre visible ne prouve pas que le SHA-256 est faux. Quand la vérification ci-dessus renvoie linked: true et que la barre est toujours là, passez en revue ces causes.
| Ce que vous voyez | Cause probable | Que faire |
|---|---|---|
| La barre apparaît après un lien, une connexion ou une redirection | Cause probableVous avez quitté l’origine vérifiée | Que faireLe guide multi-origine de Chrome indique: “When a user navigates off the validated origin, Custom Tab UI is shown.” (quand l’utilisateur quitte l’origine validée, l’interface Custom Tab s’affiche). Déclarez dans l’application chaque origine que vous contrôlez et publiez assetlinks.json sur chacune. Une page de connexion sur le domaine d’une autre entreprise, comme un fournisseur d’identité, sort de votre association: vous ne pouvez pas y publier de fichier, l’interface du navigateur y est donc normale. |
| La barre est là dès le premier écran, et votre domaine redirige | Cause probableL’URL de démarrage et l’origine déclarée sont des hôtes différents | Que faireAlignez l’URL de lancement, l’origine déclarée et l’hôte du fichier, par exemple tous en www. Un cas Bubblewrap signalé, avec une empreinte correcte, a été résolu exactement ainsi. |
| Plein écran avec Chrome, une barre avec un autre navigateur par défaut | Cause probableChoix du navigateur fournisseur | Que faireGuide de démarrage rapide de Chrome: le navigateur par défaut est utilisé s’il prend en charge les TWA, sinon un autre navigateur installé qui les prend en charge, sinon un Custom Tab. Lancez adb logcat -v brief | grep -e TWAProviderPicker pour voir quel navigateur a été choisi. |
| Une nouvelle installation avec un réseau mauvais ou absent | Cause probableLa vérification n’a pas pu s’exécuter | Que faireReconnectez-vous et rouvrez l’application. Il s’agit d’un comportement signalé par la communauté, non documenté. |
Android indique verified, mais la TWA affiche l’interface du navigateur |
Cause probableLa vérification d’Android et celle du navigateur sont distinctes | Que faireCapturez le message de vérification d’origine du navigateur avec la commande logcat ci-dessus; il explique le résultat de la TWA, pas l’état Android. |
| Un bref message indiquant que l’application s’exécute dans votre navigateur, puis le plein écran | Cause probablePeut-être une notification du navigateur, pas une barre persistante | Que faireNotez le texte exact et sa durée d’affichage avant de conclure à un échec de l’association. Ce symptôme est signalé par la communauté et n’est pas documenté par Google. |
Combien de temps avant qu’un fichier corrigé prenne effet
Google ne publie aucun délai unique pour les TWA, car plusieurs caches interviennent et chacun a ses propres règles:
- Votre serveur ou votre CDN peut encore servir l’ancien fichier. Videz le cache et confirmez la réponse en ligne avec curl.
- L’API Digital Asset Links indique dans son champ
maxAgecombien de temps chaque réponse reste valide. - Android App Links a son propre calendrier. Le guide de vérification d’Android indique que sur Android 15 et versions ultérieures, les modifications peuvent mettre jusqu’à sept jours pour atteindre tous les appareils, et que sur Android 14 et versions antérieures le fichier est généralement pris en compte lors de l’installation ou de la mise à jour de l’application.
- Le navigateur peut conserver son propre état. Un développeur a signalé un succès après avoir effacé les données de Chrome.
Videz donc le cache, confirmez le fichier en ligne et réinstallez depuis Google Play. Sur un appareil de test, une nouvelle installation ou l’effacement des données du navigateur permet d’écarter un état en cache; c’est une étape de diagnostic, pas une démarche à demander à chaque utilisateur. Ne comptez pas sur un nombre d’heures fixe.
Refus, examen et test fermé
Un fichier assetlinks.json absent ou erroné n’est pas documenté comme une cause de refus à lui seul. Ce que la documentation décrit, c’est le repli vers un Custom Tab avec l’interface du navigateur. L’examen est une autre question: le règlement sur les fonctionnalités de Google Play indique “We don’t allow apps that crash, force close, freeze, or otherwise function abnormally,” (les applications qui plantent, se ferment de force, se figent ou fonctionnent anormalement de toute autre manière ne sont pas autorisées) et cela s’applique quel que soit l’état de votre association. Une empreinte correcte supprime la barre; elle ne règle pas l’examen. Si vous avez reçu un refus, partez du règlement cité dans l’e-mail.
Certains articles plus anciens affirment que Chrome fait planter une TWA qui échoue à ses contrôles de qualité. Chromium a supprimé ce code QualityEnforcer le 4 mai 2023: considérez donc ce conseil comme historique, et non comme une description des navigateurs actuels.
Si vous avez reçu un refus, partez du motif indiqué dans la notification: le refus Broken Functionality détaille la notification de fonctionnalité la plus courante. Ne reconstruisez pas votre TWA en WebView uniquement à cause d’une barre de navigateur. Si votre application sort d’un outil de création par IA, publier une application vibe-codée sur Google Play couvre tout le parcours, du projet jusqu’à Play.
Tester une TWA avec un nouveau compte personnel
Les comptes de développeur personnels créés après le 13 novembre 2023 doivent toujours exécuter un test fermé auprès d’au moins 12 testeurs inscrits pendant 14 jours consécutifs avant de demander un accès en production. Ces testeurs installent la version signée par Play, exactement là où ce bug se manifeste. PrimeTestLab fournit 12+ vrais testeurs dès $19.99 (+5% de frais de service), et si Google n’accorde pas l’accès en production après le test complet, vous choisissez: nouveau test gratuit ou remboursement intégral. Découvrez comment fonctionne le service de 12 testeurs.
Questions fréquentes
Quel SHA-256 mettre dans assetlinks.json quand j’utilise Play App Signing?
Le SHA-256 du certificat de la clé de signature d’application affiché sur la page Play app signing de la Play Console. Ce certificat signe les versions que les utilisateurs installent depuis Google Play. N’ajoutez aussi votre empreinte d’importation ou de debug que si vous voulez également que les versions installées par vos soins soient vérifiées.
Pourquoi ma TWA fonctionne-t-elle depuis Android Studio mais affiche-t-elle la barre d’URL depuis Google Play?
Les versions que vous installez vous-même sont signées avec votre clé de debug ou d’importation, tandis que Google Play distribue votre application signée avec la clé de signature d’application. Si votre site ne mentionne que votre certificat local, la vérification échoue pour l’installation Play et Chrome se rabat sur un Custom Tab avec une barre de navigateur.
Où se trouve la clé de signature d’application dans la Play Console actuelle?
Sous Protected with Play. Google documente actuellement deux chemins: Play Store distribution, puis Go to Play app signing, et Play Store protection, puis Manage Play app signing. Copiez l’empreinte de certificat SHA-256 depuis la section du certificat de la clé de signature d’application.
assetlinks.json peut-il contenir plus d’une empreinte SHA-256?
Oui. Le champ sha256_cert_fingerprints est un tableau et accepte plusieurs empreintes pour le même package, par exemple une version debug et la version signée par Play. Un ID d’application différent nécessite sa propre déclaration.
Combien de temps après la correction d’assetlinks.json la barre de navigateur disparaît-elle?
Google ne publie aucun délai unique pour les TWA. Videz tout cache CDN, confirmez que le fichier en ligne renvoie un HTTP 200 en JSON sans redirection et réinstallez l’application depuis Google Play; sur un appareil de test, effacer les données du navigateur permet d’écarter un état en cache. La vérification Android App Links a son propre calendrier, qui peut aller jusqu’à sept jours sur Android 15 et versions ultérieures.
Un assetlinks.json erroné fait-il refuser une TWA sur Google Play?
La documentation actuelle décrit un repli vers un Custom Tab avec l’interface du navigateur, pas un refus automatique. L’examen Play juge si l’application fonctionne et offre une véritable expérience: un fichier correct supprime donc la barre, mais ne règle pas à lui seul l’examen.
Les testeurs du test fermé voient-ils aussi la barre de navigateur?
Oui, si le site ne contient pas le certificat de signature d’application, car les testeurs du test fermé installent la version signée par Play. Testez la correction avec cette installation plutôt qu’avec un APK installé manuellement, et n’oubliez pas que les liens de partage interne d’applications sont signés avec une autre clé.
La vérification Digital Asset Links réussit. Pourquoi la barre est-elle toujours là?
Vérifiez ce qui a réussi. Une liste de déclarations peut contenir une association pour un autre package ou un autre certificat, et même une vérification exacte ne teste que les valeurs que vous avez fournies. Confirmez que la version installée utilise cette identité, suivez l’origine sur laquelle l’application arrive réellement et lisez le journal de vérification du navigateur. L’état App Links d’Android est un signal distinct.
Une redirection www ou une page de connexion peut-elle faire revenir la barre?
Oui. La vérification TWA s’applique aux origines, et quitter une origine validée affiche l’interface du navigateur. Vérifiez où l’application arrive après les redirections et configurez chaque origine que vous contrôlez à la fois dans l’application et dans son propre assetlinks.json. Une page de connexion sur le domaine d’une autre entreprise n’est pas couverte par votre fichier, et vous ne pouvez pas publier son association.
bubblewrap validate vérifie-t-il mon empreinte de signature Play?
Non. Bubblewrap documente validate comme une évaluation de votre PWA selon des critères de qualité: une réussite ne dit donc rien sur la correspondance entre l’application installée depuis Play et votre liste de certificats. Utilisez les commandes fingerprint pour préparer assetlinks.json, publiez-le, vérifiez le domaine, le package et le certificat exacts, puis testez l’installation Play.
Dois-je passer ma TWA en WebView pour supprimer la barre?
Pas en premier recours. Corrigez l’identité de signature de l’application installée, la façon dont le site sert le fichier et les origines que l’application ouvre, puis testez de nouveau. Si le vrai problème est un comportement de navigateur non pris en charge, l’authentification ou une notification de règlement précise, étudiez-le séparément avant de décider si un autre wrapper convient à votre application.
L’essentiel
En bref
Une barre de navigateur sur une TWA installée depuis Play commence par une comparaison: le certificat qui a signé la version installée face aux empreintes du fichier assetlinks.json de votre site. Copiez le SHA-256 de la clé de signature d’application depuis Play app signing, publiez du JSON strict à l’origine exacte avec un HTTP 200 direct, vérifiez le package et le certificat exacts, puis testez la version qu’un testeur installerait. Si l’empreinte correspond déjà, examinez les origines, les redirections, le navigateur et les caches avant de reconstruire quoi que ce soit.
Sources vérifiées le 16 octobre 2026
Les libellés des menus de la Play Console sont l’information qui change le plus vite sur cette page. Si les chemins ci-dessus ne correspondent plus à votre Console, cherchez Play app signing sous Protected with Play, ou recherchez "app signing" dans la Console.