Публикация в 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 открывается с адресной строкой (или с выбором «Открыть с помощью»).
В Студии, на странице игры, в разделе Приложение для 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) показывает, что ещё осталось сделать; «Отправить на проверку» остаётся неактивной, пока чего-то не хватает.
- Создать приложение: название, язык по умолчанию, Игра, Бесплатное, декларации.
- Контент приложения (Политики > Контент приложения), каждая декларация:
- Политика конфиденциальности: публичный адрес из шага 0;
- Реклама: рекламы нет (JumPHP её не добавляет);
- Доступ к приложению: всё доступно без особого доступа (нет аккаунта);
- Целевая аудитория: возрасты, для которых сделана игра. Если выбрать возраст младше 13 лет, приложение попадает в программу для семей (более строгие правила, меньшая видимость): делайте это, только если игра действительно сделана для детей;
- Классификация контента (анкета IARC): категория «Игра»; отвечайте честно для вашей игры (мультяшное или фантастическое насилие, кровь, страх, азартные игры, контент, созданный игроками, общение между игроками, геолокация, покупки);
- Безопасность данных: игра JumPHP без аккаунтов и статистики не собирает и не передаёт никаких данных (сохранения остаются на устройстве; если ваша игра обращается к веб-сервису, укажите это);
- Рекламный идентификатор: не используется;
- Правительственные приложения, финансовые функции, здоровье: нет.
- Настройки Play Store (Развитие > Присутствие в Play Store > Настройки): категория (Аркады, Экшен, Головоломки…) и контактный адрес электронной почты. Оба обязательны: без них появится «Your app cannot be published yet». Адрес публичный.
- Основная карточка: название (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/), чтобы переделывать их для следующих версий. - Тесты: Тестирование и публикация > Тесты > Внутреннее тестирование (или закрытое тестирование для 12 тестировщиков нового аккаунта) > Создать релиз >
.aab> примечания к версии > Сохранить > Проверить > Начать развёртывание. Тестировщики: список адресов; каждый открывает ссылку-приглашение, войдя в этот аккаунт Google, и нажимает Стать тестировщиком. - Веб-приложение: после этой первой загрузки добавьте отпечаток ключа Google (шаг 3), установите приложение по тестовой ссылке и проверьте полноэкранный режим.
- Рабочая версия: Рабочая версия > Страны / регионы > Добавить, выберите, Сохранить (релиз без стран отклоняется), затем Создать релиз >
.aab> примечания > Далее > Сохранить. - Обзор публикации > Отправить на проверку, подтвердите. Проверка занимает от нескольких часов до 7 дней; консоль и электронная почта аккаунта сообщат, когда приложение выйдет.
6. Примечания к версии
Один блок на язык, теги на отдельных строках:
<fr-FR>
Première version.
</fr-FR>
<en-US>
First release.
</en-US>
7. Следующие версии
- Веб-приложение: игра обновляется вместе с сайтом (вы делаете пуш, она публикуется): нового приложения не нужно. Новое приложение требуется, только если меняются название, иконка, цвета, стартовый адрес или пакет:
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.