Im Play Store veröffentlichen, Schritt für Schritt
Die vollständige Anleitung, um ein JumPHP-Spiel auf Google Play zu bringen und dort zu pflegen: was du bauen musst, was du aufbewahren musst, was du auf einem Smartphone prüfen musst, und die Play Console von A bis Z. Sie gilt für beide App-Arten:
| Die Web-App (Auf Google Play) | Die native App (Native Android-App) | |
|---|---|---|
| Befehl | bin/jumphp twa mon-jeu --url https://jumphp.net/mon-jeu |
bin/jumphp android mon-jeu |
| Was es ist | die Spielseite in Chrome, im Vollbild | PHP, SDL und das Spiel in der App, ohne Netz |
| Das Spiel aktualisiert sich | mit der Website, sofort (keine neue App) | mit einer neuen Version der App |
Dein Claude kennt diese Anleitung (sie steht in der AGENTS.md deines Projekts und in docs/google-play.md): Sag ihm einfach
„bring mein Spiel auf Google Play“. Er erledigt die Technik; die Entscheidungen und das Absenden bleiben bei dir (siehe Ende).
0. Bevor du anfängst
- Ein Google-Play-Entwicklerkonto: play.google.com/console, einmalig 25 $, mit einer Identitätsprüfung. Es ist dein Konto: Du bist es, der die Bedingungen von Google akzeptiert.
- Ein neues privates Konto muss einen geschlossenen Test mit mindestens 12 Testern über 14 Tage durchführen, bevor es in die Produktion darf. Starte ihn früh.
- Der Paketname (
io.github.<dein GitHub-Konto>.<mon_jeu>): die Kennung der App auf Google Play. Er ändert sich nie mehr. Der Befehl fragt beim ersten Mal danach. - Die Lizenz des Android-SDK: Du akzeptierst sie beim ersten Mal in deinem Terminal (das SDK, ~1 GB,
landet in
~/.jumphp). Dein Claude bittet dich, den Befehl selbst auszuführen (! bin/jumphp twa …). - Eine Datenschutzerklärung unter einer öffentlichen Adresse: Google verlangt sie, auch wenn das Spiel nichts erfasst.
Eine kurze Seite genügt: Das Spiel erfasst, sendet und teilt keinerlei personenbezogene Daten; kein Konto, keine
Werbung, kein Tracking; Einstellungen und Spielstände bleiben auf dem Gerät; eine Kontaktadresse.
Lege sie in der Website des Spiels ab,
games/mon-jeu/site/privacy.html: Sie wird unterhttps://play.jumphp.net/mon-jeu/privacy.htmlausgeliefert (oder diePRIVACY.mddeines öffentlichen Repositorys). Öffne die Adresse einmal, bevor du sie Google gibst: Ein 404-Fehler blockiert die Prüfung.
1. Die Schlüssel: sichere sie zuerst
Der erste Build erstellt deinen Upload-Schlüssel: ~/.jumphp/android/keys/<Paket>.keystore und sein Passwort
in <Paket>.env.
- Nie in Git, auch nicht in einer Notiz oder Nachricht. Sichere beide Dateien an anderer Stelle (Passwort-Manager, verschlüsselte Festplatte). Ohne sie erzeugt ein neuer Build einen anderen Schlüssel, und Google Play lehnt das Update ab.
- Mit der Play App-Signatur durch Google (Standard) behält Google seinen eigenen Schlüssel, den, der die App auf den Smartphones signiert. Deiner belegt nur, dass die Uploads von dir stammen; geht er verloren, kann Google ihn ersetzen (Einrichtung > App-Signatur), aber das dauert Tage.
- Es gibt also zwei SHA-256-Fingerabdrücke: den deines Schlüssels (vom Befehl angezeigt) und den des Schlüssels von Google (Play Console > Einrichtung > App-Signatur, nach dem ersten Upload).
2. Die App bauen
bin/jumphp twa mon-jeu --url https://jumphp.net/mon-jeu # die Web-App
bin/jumphp android mon-jeu # oder die native App
- Jeder Build erhöht die Versionsnummer um 1 (Google Play lehnt eine bereits hochgeladene Nummer ab; ein fehlgeschlagener Versuch verbraucht eine Nummer, das ist nicht schlimm).
- Committe die Versionsdatei sofort:
games/mon-jeu/android/twa-manifest.json(Web-App) odergames/mon-jeu/android/app.json(native App). Niemalsdist/. - Der Name unter dem Symbol:
pwa: {short_name: …}ingame.yaml(12 Zeichen sind vollständig sichtbar). Das Symbol:assets/icon.png.
3. Nur Web-App: Die Website bürgt für die App
Android öffnet die Seite nur dann im Vollbild, wenn die Website die App deklariert: den Paketnamen und beide
Fingerabdrücke (deinen und den von Google). Nur mit deinem funktioniert die aus deiner .apk installierte App,
aber die über Google Play installierte öffnet sich mit einer Adressleiste (oder einer „Öffnen mit“-Auswahl).
Im Studio, auf der Spielseite, im Bereich Android-App (oder dein Claude: update_project). Die Website veröffentlicht sie
unter https://jumphp.net/.well-known/assetlinks.json. Auf deinem eigenen Server:
https://deine-domain/.well-known/assetlinks.json.
4. Auf einem echten Smartphone ausprobieren
Mit aktiviertem USB-Debugging und adb:
adb install -r games/mon-jeu/dist/android/mon-jeu-<version>.apk
adb shell pm get-app-links <Paket> # Web-App: „jumphp.net: verified“
adb exec-out screencap -p > capture.png # sieh nach: Das Spiel muss da sein
- Die App muss sich auf dem Titelbildschirm des Spiels öffnen.
- Eine mit deinem Schlüssel signierte
.apklässt sich nicht über dieselbe App von Google Play installieren (INSTALL_FAILED_UPDATE_INCOMPATIBLE): Deinstalliere zuerst (die Spielstände der App gehen verloren). - Die Web-App öffnet sich und schließt sich sofort wieder, mit einer „Öffnen mit“-Auswahl: Das Smartphone hat zwei Chrome, meist wegen eines Klon-Bereichs / zweiten Bereichs / doppelter Apps (Xiaomi, Samsung …). Die App von JumPHP verlangt den Chrome des Hauptprofils, was den Fall für die Spieler löst; auf deinem Test-Smartphone löscht das Entfernen des Klon-Bereichs alle Apps darin.
- Dass sich das Spiel in Chrome öffnet, beweist nicht, dass die App funktioniert: Probiere die App aus.
5. Die Play Console, beim ersten Mal
Die Liste „App einrichten“ im Dashboard (X von 11) zeigt, was noch zu tun ist; „Zur Prüfung senden“ bleibt ausgegraut, solange etwas fehlt.
- App erstellen: Name, Standardsprache, Spiel, Kostenlos, die Erklärungen.
- App-Inhalte (Richtlinie > App-Inhalte), jede Erklärung:
- Datenschutzerklärung: die öffentliche Adresse aus Schritt 0;
- Werbung: keine Werbung (JumPHP fügt keine hinzu);
- App-Zugriff: Alles ist ohne besonderen Zugang zugänglich (kein Konto);
- Zielgruppe: die Altersstufen, für die das Spiel gemacht ist. Wählst du Altersstufen unter 13 Jahren, fällt die App ins Programm für Familien (strengere Regeln, weniger Sichtbarkeit): Tu das nur, wenn das Spiel wirklich für Kinder gemacht ist;
- Inhaltseinstufung (IARC-Fragebogen): Kategorie Spiel; antworte ehrlich für dein Spiel (Cartoon- oder Fantasy-Gewalt, Blut, Angst, Glücksspiel, von Spielern erstellte Inhalte, Austausch zwischen Spielern, Standort, Käufe);
- Datensicherheit: Ein JumPHP-Spiel ohne Konto und ohne Statistiken erfasst und teilt keinerlei Daten (die Spielstände bleiben auf dem Gerät; wenn dein Spiel einen Webdienst aufruft, gib das an);
- Werbe-ID: nicht verwendet;
- Regierungs-Apps, Finanzfunktionen, Gesundheit: nein.
- Play-Store-Einstellungen (Wachsen > Store-Präsenz > Einstellungen): die Kategorie (Arcade, Action, Denkspiel …) und die Kontakt-E-Mail-Adresse. Beides ist Pflicht: Ohne sie heißt es „Your app cannot be published yet“. Die Adresse ist öffentlich.
- Haupteintrag: Titel (30 Zeichen), Kurzbeschreibung (80), vollständige Beschreibung (4000), Symbol
512 × 512 PNG (
bin/jumphp builderzeugt es:dist/web/icon-512.png), Bild 1024 × 500, mindestens 2 Smartphone- Screenshots (bin/jumphp shot mon-jeu, um einen ganzzahligen Faktor vergrößert, oder auf einem Smartphone aufgenommen). Behalte die Bilder im Spiel (games/mon-jeu/store/), um sie bei den Folgeversionen neu zu erstellen. - Tests: Testen und veröffentlichen > Tests > Interne Tests (oder Geschlossener Test für die 12 Tester eines neuen
Kontos) > Release erstellen > die
.aab> Versionshinweise > Speichern > Prüfen > Einführung starten. Die Tester: eine Liste von Adressen; jeder öffnet den Einladungslink angemeldet mit diesem Google-Konto und tippt auf Tester werden. - Web-App: Füge nach diesem ersten Upload den Fingerabdruck des Schlüssels von Google hinzu (Schritt 3), installiere über den Testlink und prüfe den Vollbildmodus.
- Produktion: Produktion > Länder / Regionen > Hinzufügen, auswählen, Speichern (ein Release ohne Länder wird
abgelehnt), dann Release erstellen > die
.aab> Hinweise > Weiter > Speichern. - Veröffentlichungsübersicht > Zur Prüfung senden, bestätige. Die Prüfung dauert von wenigen Stunden bis zu 7 Tagen; die Console und die E-Mail des Kontos sagen, wann die App online ist.
6. Die Versionshinweise
Ein Block pro Sprache, die Tags jeweils in einer eigenen Zeile:
<fr-FR>
Première version.
</fr-FR>
<en-US>
First release.
</en-US>
7. Die Folgeversionen
- Web-App: Das Spiel aktualisiert sich mit der Website (du pushst, es wird veröffentlicht): keine neue App. Eine
neue App nur, wenn sich Name, Symbol, Farben, Startadresse oder Paket ändern:
bin/jumphp twa mon-jeu. - Native App: Jede Änderung am Spiel ist eine neue App:
bin/jumphp android mon-jeu --version-name 1.1.
Danach: Committe die Versionsdatei, probiere die .apk auf einem Smartphone aus, dann Play Console > derselbe Track >
Release erstellen > die neue .aab > Hinweise > Zur Prüfung senden. Die Erklärungen bleiben gültig, außer wenn das
Spiel ändert, was sie beschreiben (Online-Spiel, Käufe, Daten): Aktualisiere sie vorher.
8. Die Stolperfallen, auf die wir gestoßen sind
| Symptom | Ursache, Lösung |
|---|---|
| Die App öffnet sich mit einer Adressleiste | Ein Fingerabdruck (der von Google) oder das Paket fehlt auf der Website: Schritt 3 |
| Die Web-App öffnet sich und schließt sich sofort | zwei Chrome auf dem Smartphone (Klon-Bereich): Schritt 4 |
INSTALL_FAILED_UPDATE_INCOMPATIBLE |
Die installierte App stammt von Google Play (anderer Schlüssel): zuerst deinstallieren |
| „Versionscode wurde bereits verwendet“ | neu bauen (Version + 1) |
| Google Play lehnt den Schlüssel des Updates ab | Upload-Schlüssel verloren oder neu erstellt: Backup wiederherstellen oder Google bitten, ihn zurückzusetzen |
| „Your app cannot be published yet“ | Play-Store-Einstellungen: Kategorie und Kontakt-E-Mail |
| „Zur Prüfung senden“ ausgegraut | Ein Schritt von „App einrichten“ fehlt; ein Release ohne Länder |
| „Lade mindestens 1 Asset hoch“ | Das Bild liegt in der Mediathek, ist aber nicht am Eintrag angehängt: Füge es über das Mediathek-Panel hinzu |
| Ein Tester wird nicht hinzugefügt | Gib die Adresse ein und drücke Enter (das Label), dann Speichern und bestätigen |
| Die Datenschutzerklärung wird abgelehnt | Ihre Adresse liefert 404 oder ist nicht öffentlich: Öffne sie in einem privaten Fenster |
Was dein Claude nicht ohne dich tut
- die Lizenz des Android-SDK oder die Bedingungen von Google akzeptieren oder den Einstufungsfragebogen beantworten, ohne dir seine Antworten zu nennen;
- die Zielgruppe wählen (zu sagen, das Spiel sei „für Kinder“, ändert die Regeln und die Sichtbarkeit);
- in die Produktion senden, ohne dass du diesem Senden zugestimmt hast;
- einen Klon-Bereich löschen oder eine App von deinem Smartphone deinstallieren (Daten gehen verloren);
- Schlüssel, Passwörter oder
dist/in Git ablegen.