RU

Публикация в 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) показывает, что ещё осталось сделать; «Отправить на проверку» остаётся неактивной, пока чего-то не хватает.

  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. Следующие версии

  • Веб-приложение: игра обновляется вместе с сайтом (вы делаете пуш, она публикуется): нового приложения не нужно. Новое приложение требуется, только если меняются название, иконка, цвета, стартовый адрес или пакет: 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.