# Empaqueter Petits Papiers pour Google Play

Le jeu part sur le Play Store en **TWA** (*Trusted Web Activity*) : l'application
Android n'embarque pas une copie du jeu, elle ouvre le site dans un Chrome sans
barre d'adresse. Une seule base de code, une mise à jour du site met à jour
l'application, et surtout **« Continuer avec Google » fonctionne** — ce qui n'est
pas le cas dans une WebView, que Google refuse (`disallowed_useragent`).

`twa-manifest.json` est la configuration complète du projet. Tout le reste est
engendré par Bubblewrap et n'a pas à vivre dans git.

## Les deux choses que vous seul pouvez faire

**Le nom de paquet est définitif.** `fr.petitspapiers.jeu` est le nom retenu
dans `twa-manifest.json`. Une fois la première version publiée, il ne peut plus
jamais changer : c'est l'identité de l'application sur le Play Store. Si vous
préférez autre chose, changez-le **maintenant**, avant le premier envoi, et
répercutez-le dans `public/.well-known/assetlinks.json`.

**La clé de signature ne doit pas passer par d'autres mains que les vôtres.**
C'est elle qui prouve que les mises à jour viennent bien de vous ; la perdre
signifie ne plus jamais pouvoir mettre l'application à jour. Créez-la vous-même
(voir plus bas), sauvegardez-la ailleurs que sur votre machine, et ne la
committez jamais — `.gitignore` la refuse déjà.

## Prérequis

- **JDK 17** et le **SDK Android** (Android Studio les installe tous les deux).
- **Bubblewrap** : `npm install -g @bubblewrap/cli`
- `bubblewrap doctor` doit répondre sans erreur. Il propose d'installer ce qui
  manque et de retenir les chemins.

## 1. Créer la clé de signature

À faire une seule fois, dans ce dossier. Choisissez un mot de passe solide et
rangez-le dans votre gestionnaire de mots de passe :

```bash
keytool -genkeypair -v -keystore android.keystore -alias petitspapiers -keyalg RSA -keysize 2048 -validity 10000
```

Sauvegardez `android.keystore` **hors du dépôt** — un disque externe, un coffre
chiffré. Sans lui, plus aucune mise à jour n'est possible.

## 2. Engendrer le projet Android

```bash
bubblewrap init --manifest ./twa-manifest.json
```

Bubblewrap lit la configuration, télécharge ce qu'il faut et écrit le projet
Gradle dans ce dossier. Répondez en gardant les valeurs proposées : elles
viennent de `twa-manifest.json`.

## 3. Construire le bundle

```bash
bubblewrap build
```

Sortie : `app-release-bundle.aab`, c'est ce fichier qu'on envoie au Play Store.
Pour essayer sur un téléphone branché en USB avant d'envoyer quoi que ce soit :

```bash
bubblewrap install
```

## 4. Relier le site à l'application

Sans cette étape, **la barre d'adresse de Chrome reste visible** dans
l'application : elle a l'air d'un navigateur déguisé, et Play peut la refuser.

Il faut deux empreintes SHA-256, pas une :

```bash
keytool -list -v -keystore android.keystore -alias petitspapiers
```

donne l'empreinte de **votre clé** (celle qui signe l'envoi). Mais Play resigne
l'application avec **sa propre clé** : la seconde empreinte se lit dans la Play
Console, *Configuration → Intégrité de l'application → Certificat de la clé de
signature d'application*.

Mettez les deux dans `public/.well-known/assetlinks.json`, redéployez le site,
puis vérifiez que `https://<domaine>/.well-known/assetlinks.json` répond bien
avant de tester l'application.

## 5. Ce que Play demande, et où ça en est

Déjà en place dans le jeu :

- suppression du compte **dans** l'application et à une **adresse publique**
  (`/suppression-compte.html`, à déclarer dans la fiche Play) ;
- signalement et masquage entre joueurs ;
- retour système qui navigue au lieu de quitter l'application ;
- icônes 192, 512 et *maskable*, orientation portrait, `scope` déclaré ;
- mentions légales, confidentialité et conditions d'utilisation, lisibles
  **sans compte**.

Reste à faire dans la Play Console, et que le code ne peut pas fournir :

- **l'adresse e-mail de contact** dans les textes légaux (elle est encore en
  `[à compléter]` dans `public/app.js`) ;
- le formulaire **Sécurité des données**, qui doit dire la même chose que la
  page Confidentialité : identifiant Google, adresse e-mail, photo de profil,
  nom d'utilisateur ;
- la **classification du contenu**, cohérente avec l'âge minimum annoncé dans
  les conditions (15 ans) et avec le fait qu'il existe une discussion entre
  joueurs ;
- la déclaration **professionnel / non professionnel** exigée par le DSA. En
  « professionnel », vos coordonnées — dont une adresse postale — deviennent
  publiques sur la fiche.

## Quand le domaine changera

`petits-papiers-golden-efde.vercel.app` est un sous-domaine d'hébergeur. Le jour
où le jeu prend son propre nom de domaine, il faudra reprendre `host`,
`startUrl`, `iconUrl`, `maskableIconUrl`, `webManifestUrl` et `fullScopeUrl`
dans `twa-manifest.json`, republier `assetlinks.json` sur le nouveau domaine, et
reconstruire. Le nom de paquet, lui, ne bouge pas — c'est bien pour ça qu'il ne
reprend pas le domaine actuel.
