UK

Публікація в Play Store крок за кроком

Повна інструкція, як розмістити гру JumPHP у Google Play і підтримувати її там: що потрібно зібрати, що потрібно зберегти, що перевірити на телефоні, і Play Console від початку до кінця. Вона стосується обох видів застосунків:

Вебзастосунок (У Google Play) Нативний застосунок (Нативний застосунок Android)
Команда bin/jumphp twa mon-jeu --url https://jumphp.net/mon-jeu bin/jumphp android mon-jeu
Що це сторінка гри в Chrome на весь екран PHP, SDL і гра всередині застосунку, без мережі
Гра оновлюється разом із сайтом, одразу (нового застосунку не потрібно) з новою версією застосунку

Ваш Claude знає цей посібник (він є в AGENTS.md вашого проєкту та в docs/google-play.md): попросіть його «розмісти мою гру в Google Play». Він робить технічну частину; вибір і надсилання залишаються за вами (див. кінець).

0. Перш ніж почати

  • Акаунт розробника Google Play: play.google.com/console, 25 $ одноразово, з перевіркою особи. Це ваш акаунт: умови Google приймаєте ви.
  • Новий особистий акаунт має провести закрите тестування щонайменше з 12 тестувальниками протягом 14 днів, перш ніж зможе публікувати у продакшн. Запустіть його раніше.
  • Назва пакета (io.github.<ваш акаунт github>.<mon_jeu>): ідентифікатор застосунку в Google Play. Він більше ніколи не змінюється. Команда запитує його під час першого запуску.
  • Ліцензія Android SDK: ви приймаєте її у своєму терміналі під час першого запуску (SDK, ~1 ГБ, зберігається в ~/.jumphp). Ваш Claude попросить вас запустити команду самостійно (! bin/jumphp twa …).
  • Політика конфіденційності за публічною адресою: Google вимагає її, навіть якщо гра нічого не збирає. Достатньо короткої сторінки: гра не збирає, не надсилає й не передає жодних персональних даних; без акаунта, без реклами, без стеження; налаштування та збереження залишаються на пристрої; контактна адреса. Розмістіть її на сайті гри, games/mon-jeu/site/privacy.html: вона доступна за адресою https://play.jumphp.net/mon-jeu/privacy.html (або PRIVACY.md вашого публічного репозиторію). Відкрийте адресу один раз, перш ніж давати її Google: помилка 404 блокує перевірку.

1. Ключі: спершу збережіть їх

Перше збирання створює ваш ключ завантаження: ~/.jumphp/android/keys/<пакет>.keystore і його пароль у <пакет>.env.

  • Ніколи в git, ні в нотатці, ні в повідомленні. Збережіть обидва файли деінде (менеджер паролів, зашифрований диск). Без них нове збирання створить інший ключ, і Google Play відхилить оновлення.
  • З підписуванням застосунку Google Play (за замовчуванням) Google зберігає власний ключ, яким підписує застосунок на телефонах. Ваш лише доводить, що завантаження надходять від вас; якщо його втрачено, Google може його замінити (Налаштування > Підписування застосунку), але це займає дні.
  • Тому є два відбитки SHA-256: вашого ключа (її показує команда) і ключа Google (Play Console > Налаштування > Підписування застосунку, після першого завантаження).

2. Зібрати застосунок

bin/jumphp twa mon-jeu --url https://jumphp.net/mon-jeu     # вебзастосунок
bin/jumphp android mon-jeu                                   # або нативний застосунок
  • Кожне збирання збільшує номер версії на 1 (Google Play відхиляє вже надісланий номер; невдала спроба споживає номер, це не страшно).
  • Одразу закомітьте файл версії: games/mon-jeu/android/twa-manifest.json (вебзастосунок) або games/mon-jeu/android/app.json (нативний застосунок). Ніколи dist/.
  • Назва під іконкою: pwa: {short_name: …} у game.yaml (12 символів видно повністю). Іконка: assets/icon.png.

3. Лише вебзастосунок: сайт ручається за застосунок

Android відкриває сторінку на весь екран, лише якщо сайт оголошує застосунок: назву пакета та обидва відбитки (ваш і Google). Лише з вашим відбитком застосунок, встановлений із вашого .apk, працює, але той, що встановлений із Google Play, відкривається з адресним рядком (або з вибором «Відкрити за допомогою»).

У Studio, на сторінці гри, у розділі Застосунок Android (або ваш Claude: update_project). Сайт публікує їх у https://jumphp.net/.well-known/assetlinks.json. На вашому власному сервері: https://votre-domaine/.well-known/assetlinks.json.

4. Спробувати його на справжньому телефоні

З увімкненим налагодженням USB і adb:

adb install -r games/mon-jeu/dist/android/mon-jeu-<version>.apk
adb shell pm get-app-links <paquet>          # вебзастосунок: «jumphp.net: verified»
adb exec-out screencap -p > capture.png      # подивіться: гра має бути на місці
  • Застосунок має відкритися на титульному екрані гри.
  • .apk, підписаний вашим ключем, не встановлюється поверх такого самого застосунку з Google Play (INSTALL_FAILED_UPDATE_INCOMPATIBLE): спершу видаліть його (збереження застосунку буде втрачено).
  • Вебзастосунок відкривається й одразу закривається з вибором «Відкрити за допомогою»: на телефоні два Chrome, як правило, через клонований простір / другий простір / подвійний застосунок (Xiaomi, Samsung…). Застосунок JumPHP запитує Chrome основного профілю, що розв'язує проблему для гравців; на вашому тестовому телефоні видалення клонованого простору стирає всі застосунки в ньому.
  • Те, що гра відкривається в Chrome, не доводить, що застосунок працює: спробуйте застосунок.

5. Play Console, перший раз

Список «Налаштуйте свій застосунок» на панелі (X з 11) показує, що ще залишилося зробити; «Надіслати на перевірку» залишається неактивною, доки чогось бракує.

  1. Створити застосунок: назва, мова за замовчуванням, Гра, Безкоштовний, декларації.
  2. Вміст застосунку (Політики > Вміст застосунку), кожна декларація:
    • Політика конфіденційності: публічна адреса з кроку 0;
    • Реклама: без реклами (JumPHP її не додає);
    • Доступ до застосунку: усе доступно без особливого доступу (без акаунта);
    • Цільова аудиторія: вік, для якого зроблено гру. Вибір віку до 13 років вводить застосунок у програму для сімей (суворіші правила, менша видимість): робіть це, лише якщо гра справді зроблена для дітей;
    • Класифікація вмісту (опитування IARC): категорія Гра; відповідайте чесно для своєї гри (мультиплікаційне або фентезійне насильство, кров, страх, азартні ігри, вміст, створений гравцями, обмін між гравцями, геолокація, покупки);
    • Безпека даних: гра JumPHP без акаунта та статистики не збирає й не передає жодних даних (збереження залишаються на пристрої; якщо ваша гра звертається до вебсервісу, вкажіть це);
    • Рекламний ідентифікатор: не використовується;
    • Урядові застосунки, фінансові функції, здоров'я: ні.
  3. Налаштування Play Store (Розвиток > Присутність у Play Store > Налаштування): категорія (Аркада, Екшн, Головоломки…) і контактна електронна адреса. Обидва обов'язкові: без них «Your app cannot be published yet». Адреса публічна.
  4. Головна сторінка: назва (30 символів), короткий опис (80), повний опис (4000), іконка 512 × 512 PNG (її створює bin/jumphp build: dist/web/icon-512.png), зображення 1024 × 500, щонайменше 2 скриншоти телефона (bin/jumphp shot mon-jeu, збільшені в ціле число разів, або зроблені на телефоні). Зберігайте зображення в грі (games/mon-jeu/store/), щоб переробляти їх для наступних версій.
  5. Тести: Тестування та публікація > Тестування > Внутрішнє тестування (або Закрите тестування для 12 тестувальників нового акаунта) > Створити випуск > .aab > примітки до випуску > Зберегти > Переглянути > Почати розгортання. Тестувальники: список адрес; кожен відкриває запрошення ввійшовши з цим акаунтом Google і натискає Стати тестувальником.
  6. Вебзастосунок: після цього першого завантаження додайте відбиток ключа Google (крок 3), встановіть за тестовим посиланням і перевірте повноекранний режим.
  7. Продакшн: Продакшн > Країни / регіони > Додати, виберіть, Зберегти (випуск без країн відхиляється), потім Створити випуск > .aab > примітки > Далі > Зберегти.
  8. Огляд публікації > Надіслати на перевірку, підтвердіть. Перевірка триває від кількох годин до 7 днів; консоль і електронна пошта акаунта повідомляють, коли застосунок з'явився онлайн.

6. Примітки до випуску

По блоку на мову, теги в окремих рядках:

<fr-FR>
Première version.
</fr-FR>
<en-US>
First release.
</en-US>

7. Наступні версії

  • Вебзастосунок: гра оновлюється разом із сайтом (ви робите push, і вона публікується): нового застосунку не потрібно. Новий застосунок потрібен, лише якщо змінюються назва, іконка, кольори, початкова адреса або пакет: bin/jumphp twa mon-jeu.
  • Нативний застосунок: кожна зміна гри — це новий застосунок: bin/jumphp android mon-jeu --version-name 1.1.

Потім: закомітьте файл версії, спробуйте .apk на телефоні, потім Play Console > та сама доріжка > Створити випуск > новий .aab > примітки > Надіслати на перевірку. Декларації залишаються чинними, якщо гра не змінює того, що вони описують (онлайн-гра, покупки, дані): оновіть їх перед цим.

8. Підводні камені, на які натрапляли

Симптом Причина, рішення
Застосунок відкривається з адресним рядком на сайті бракує відбитка (Google) або пакета: крок 3
Вебзастосунок відкривається й одразу закривається два Chrome на телефоні (клонований простір): крок 4
INSTALL_FAILED_UPDATE_INCOMPATIBLE встановлений застосунок із Google Play (інший ключ): спершу видаліть його
«Код версії вже використано» зберіть знову (версія + 1)
Google Play відхиляє ключ оновлення ключ завантаження втрачено або створено заново: відновіть резервну копію або попросіть Google скинути його
«Your app cannot be published yet» Налаштування Play Store: категорія та контактна електронна адреса
«Надіслати на перевірку» неактивна бракує одного кроку в «Налаштуйте свій застосунок»; випуск без країн
«Імпортуйте щонайменше 1 ресурс» зображення є в бібліотеці, але не прикріплене до сторінки: додайте його з панелі бібліотеки
Тестувальника не додано введіть адресу й натисніть Enter (з'явиться мітка), потім Зберегти та підтвердити
Політику конфіденційності відхилено її адреса повертає 404 або не є публічною: відкрийте її в режимі інкогніто

Чого ваш Claude не робить без вас

  • приймати ліцензію Android SDK, умови Google або відповідати на опитування класифікації, не повідомивши вам своїх відповідей;
  • вибирати цільову аудиторію (твердження, що гра «для дітей», змінює правила та видимість);
  • надсилати у продакшн без вашої згоди саме на це надсилання;
  • видаляти клонований простір або видаляти застосунок з вашого телефона (дані будуть втрачені);
  • класти ключі, паролі або dist/ у git.