Перейти к содержимому
AppFoyer
Начать

Подготовьте приложение к магазинам с помощью ИИ-агента для программирования

Агент читает приложение, которое перед ним, — SDK, разрешения, bundle id — и по найденному готовит черновик каждой страницы для соответствия требованиям. Вы читаете черновики и публикуете их. Агент этого сделать не может.

Прежде чем начать

Вам нужны Claude Code и аккаунт AppFoyer. Бесплатного тарифа достаточно: создайте аккаунт. Ключ создавать не нужно — при первом подключении агент попросит вас одобрить его в браузере.

ИИ-агента нет вообще? Шесть полей в браузере дают те же пять страниц без плагина.

Не пользуетесь Claude Code? Плагину он нужен, а страницам политики конфиденциальности и условий — нет: в их редакторах в дашборде есть промпт, заполненный данными вашего приложения, который вы запускаете в любом ассистенте и вставляете ответ обратно. Он приведён целиком в руководстве по политике конфиденциальности и руководстве по условиям использования.

Установка

claude
/plugin marketplace add appfoyer/claude-plugin
/plugin install appfoyer@appfoyer

Для начала аккаунт не нужен: агент читает сборку, показывает, что нашёл, и задаёт вопросы на вашем компьютере, а подключиться просит только тогда, когда есть что сохранить. При первом обращении к AppFoyer в браузере откроется страница одобрения: войдите или создайте бесплатный аккаунт, проверьте название и адрес, куда вернётся браузер, и одобрите. Claude Code хранит подключение и сам его продлевает; ничего не копируется и ничего не сохраняется в вашей оболочке. Если браузер не открылся, выполните /mcp, выберите appfoyer и нажмите Authenticate. В десктопном приложении Claude Code подключитесь один раз этим способом из терминала, а затем начните там новую сессию: уже запущенная сессия не видит нового подключения. Отключите его на странице Agent в дашборде, и следующий вызов сразу завершится ошибкой. Claude Code не обновляет сторонний маркетплейс сам: в /plugin → Marketplaces → appfoyer выберите Enable auto-update, чтобы получать новые версии.

На этой машине нет браузера — удалённый сервер, контейнер, запуск из скрипта? Используйте вместо этого API-ключ: создайте его в Agent → API key — for CI and headless use, установите плагин, как описано выше, ради сценария работы и добавьте сервер ещё раз с ключом в заголовке:

export APPFOYER_API_KEY=cpk_…
claude mcp add --transport http appfoyer-key https://app.appfoyer.com/mcp --header "Authorization: Bearer $APPFOYER_API_KEY"

Плагин берёт ключ только из этой переменной окружения — skill его никогда не видит, и он передаётся только в заголовке Authorization, который заполняет Claude Code.

Другой MCP-клиент — claude.ai, Claude Desktop, Cursor, VS Code — может подключиться к https://app.appfoyer.com/mcp так же, через ту же страницу одобрения. Он получит инструменты; пошаговый сценарий, который читает ваши файлы сборки, поставляется с плагином для Claude Code.

Что сказать

Запускайте это внутри репозитория вашего приложения, а не в пустой папке:

СкажитеЧто происходит
Make this app store-ready Сканирует файлы сборки, уточняет факты, которые не смог вывести сам, готовит черновик каждой страницы и возвращает ссылку на проверку.
Is this app store-ready? Аудит по чек-листу соответствия требованиям, только чтение. Ничего не записывает.
Wire the store-ready links into the app После публикации: предлагает ссылки на политику конфиденциальности и поддержку внутри приложения в виде diff, который вы проверяете.
Add the AppFoyer drift check Предлагает GitHub workflow, который отмечает pull request, добавляющие SDK или разрешение, которые страницы, возможно, не описывают. Как это работает.

Примеры

Говорите своими словами; вот случаи, с которыми справляется skill.

Одно приложение, первый запуск

> Make this app store-ready
  • Перечисляет, что нашёл в файлах сборки, — SDK, разрешения, bundle id — с файлом и строкой для каждого.
  • Спрашивает только то, чего не смог найти: название компании, email поддержки, юрисдикцию, ссылки на магазины. Не больше двух раундов.
  • Создаёт приложение, загружает значок из репозитория и готовит черновики всех пяти страниц.
  • Заканчивает ссылкой на проверку. Ничего не становится публичным, пока вы не опубликуете там.

Повторный запуск после изменения

> Make this app store-ready
  • Находит существующее приложение по его application id и сравнивает новые факты с сохранёнными.
  • Переписывает черновики только тех страниц, которых касается изменение, например политики конфиденциальности после нового SDK аналитики.
  • Не трогает значок и адрес, если вы не попросите.

Несколько flavor, названных в промпте

> Make com.acme.weather.free and com.acme.weather.pro store-ready
  • Создаёт два приложения и ничего не спрашивает о выборе.
  • Читает собственную папку, название и зависимости каждого flavor. Рекламный SDK, который использует только бесплатный flavor, не попадает в политику конфиденциальности flavor pro.
  • Возвращает ссылку на проверку и таблицу URL для консолей по каждому flavor.

Несколько flavor, не названных в промпте

> Make this app store-ready
  • Перечисляет flavor с их application id, все заранее выбраны, а вы решаете, какие из них получат сайт.
  • Типы сборки, такие как debug и staging, перечисляются как исключённые и не предлагаются.

Измерения бренд × окружение

> Make every brand store-ready
  • Перечисляет комбинации (brandAProd, brandBProd), а не отдельные flavor.
  • Предлагает только производственное окружение. dev и qa никогда не попадают в магазин.
  • Берёт название приложения из Gradle (resValue, manifestPlaceholders) или из перенесённых source sets, если сборка задаёт его там.
  • Если не может понять, окружения это или бренды, спрашивает.

Собственный адрес (Pro и Advanced)

> Make this app store-ready
  • Составляет адрес из английского названия приложения, например weather-now.
  • Если он занят или слишком похож на название бренда, пробует следующий — weather-now-app, acme-weather — не больше пяти раз, затем спрашивает вас.
  • На бесплатном тарифе оставляет адрес app-… и сообщает, что собственный адрес доступен на Pro.
  • Адрес app-… продолжает отдавать тот же сайт.

Смена адреса, который уже используется

> Change the address to weather-radar
  • Сначала спрашивает. Старый собственный адрес освобождается сразу, и страница в магазине, где он всё ещё указан, перестаёт работать.
  • Меняет его только после вашего согласия.

Обновление значка

> Update the app icon
  • Находит значок приложения: значок Play 512, самое большое изображение mipmap или маркетинговое изображение AppIcon для iOS — в первую очередь собственный значок flavor.
  • Если он больше 512 КБ, уменьшает копию во временной папке. Ваш репозиторий не затрагивается.
  • Сообщает, какой файл загрузил. У опубликованного приложения новый значок сразу становится видимым.

Приложение с рекламой

> Make this app store-ready. AdMob publisher id pub-0000000000000000
  • Пишет app-ads.txt из строк, которые вы даёте. Publisher id нет в вашем коде, поэтому агент никогда его не угадывает.
  • Напоминает указать сайт как сайт разработчика на странице приложения в магазине.
  • AdMob подтвердил файлы app-ads.txt на наших адресах; дайте ему до 24 часов на обход.

Синхронизация страниц со сборкой

> Add the AppFoyer drift check
  • Каждый запуск “make this app store-ready” записывает appfoyer.json в корень репозитория: SDK, типы данных и разрешения, на основе которых написаны страницы. Его пишет тот же сканер, что запускает проверка, и никогда — вручную.
  • Этот промпт показывает GitHub workflow для бесплатного appfoyer/check-action и, если вы согласны, записывает .github/workflows/appfoyer.yml. Уже существующий файл он никогда не перезаписывает.
  • С этого момента каждый pull request перечисляет, что он добавил или убрал с момента написания страниц, с файлом и строкой. Повторный запуск плагина обновляет черновики и appfoyer.json.
  • За вас ничего не коммитится. В руководстве по синхронизации политики конфиденциальности есть подробности и настройка для других CI-систем.

Проверка без изменений

> Is this app store-ready?
  • Прогоняет чек-лист для каждого подходящего приложения и сообщает, чего не хватает. Ничего не записывает.
  • Flavor, для которого ещё нет приложения, отмечается как отсутствующий.

Добавление ссылок в приложение

> Wire the store-ready links into the app
  • Нужны опубликованные страницы.
  • Предлагает diff для ссылок на политику конфиденциальности и поддержку в экране настроек или строках. Применяет его, только когда вы согласны, и никогда не коммитит.

Что покидает ваш компьютер

Только выведенные факты:

  • название приложения, платформа и bundle id или application id;
  • названия SDK и разрешений, найденных в ваших файлах сборки;
  • подтверждённые вами ответы — название компании, email поддержки, юрисдикция, URL в магазинах;
  • текст страниц, который готовит агент; он хранится в вашем аккаунте как черновик;
  • собственный значок приложения, отправленный один раз по одноразовой ссылке для загрузки.

Никаких других файлов, никогда исходный код, никогда секреты или ключи, найденные в репозитории. Агент отправляет то, что политика конфиденциальности и так обязана указать.

Один файл записывается в ваш репозиторий и остаётся там: appfoyer.json — запись о том, на основе чего написаны страницы, создаваемая сканером, встроенным в плагин. Он никуда не отправляется. Агент никогда не коммитит ни его, ни что-либо ещё — это делаете вы.

Чего агент сделать не может

Подключается ли плагин через браузер или с API-ключом, у него учётные данные агента — поэтому публикация ему недоступна вовсе. Это обеспечивается на сервере, а не вежливой просьбой к агенту:

  • Инструмента для публикации нет. Агент пишет черновики; ваши опубликованные страницы не меняются.
  • У двух вещей нет черновика: у значка и у собственного адреса. У опубликованного приложения они сразу меняют живой сайт, и агент сообщает, когда установил их. Заменить уже используемый собственный адрес без вашего согласия он не может.
  • REST-маршрут, который публикует страницу, сразу отклоняет учётные данные агента — только сессия.
  • Каждая страница при публикации по-прежнему проходит ту же проверку содержимого, что и правка, сделанная вручную.
  • Каждый вызов агента записывается в журнал аудита аккаунта вместе с подключением или ключом, который его сделал.

Поэтому худшее, что может случиться при скомпрометированном подключении или ключе, — черновики, которые придётся отбросить, неправильный значок или новый адрес, а не страница, опубликованная от вашего имени.

Какие инструменты он получает

Плагин подключается к MCP-эндпоинту, который предоставляет ровно эти инструменты:

ИнструментЧто делает
list_apps Чтение Все приложения аккаунта со slug, публичным URL и признаком, опубликовано ли что-нибудь.
get_app Чтение Одно приложение: настройки, сохранённые факты о сборе данных и для каждой страницы — опубликованный текст, состояние публикации и ожидающий черновик.
create_app Запись Создаёт приложение со страницами из шаблонов. Ничего не публично.
create_apps Запись Создаёт до десяти приложений за один вызов, по одному на product flavor. Каждое начинает неопубликованным.
update_app Запись Меняет настройки, сохранённые факты о сборе данных или список SDK. Никогда не правит текст страниц.
set_page Запись Записывает черновик одной страницы. Опубликованная страница не затрагивается.
set_ad_lines Запись Заменяет app-ads.txt. Используется, только если есть рекламный SDK и вы указали publisher id.
get_checklist Чтение Чек-лист готовности к магазинам, вычисленный на сервере, плюс какие страницы ещё имеют неопубликованные черновики.
get_store_forms Чтение Черновики ответов для формы Data safety в Google Play и сведений App Privacy в Apple — по фактам и списку SDK. Вводите их в консоль вы сами.
request_publish Запись Сообщает, что черновики готовы, и возвращает URL для проверки. Ничего не публикует.
set_icon Запись Возвращает одноразовый URL для загрузки значка приложения. Применяется сразу — у значка нет черновика.
check_slug Чтение Проверяет собственный адрес (Pro и Advanced) по тем же правилам, что и дашборд.
set_slug Запись Занимает собственный адрес. Применяется сразу. Отказывается заменять уже имеющийся адрес без вашего согласия.

Если что-то пошло не так

СимптомПричина
Инструменты показывают "needs authentication" Подключение так и не было одобрено или было отключено. Выполните /mcp, выберите appfoyer и нажмите Authenticate.
Страница одобрения сообщает, что запрос нельзя использовать Срок действия ссылки истёк, или её открыли дважды. Начните заново из редактора; ничего не было подключено.
unauthorized при использовании API-ключа Ключ отозван в дашборде или принадлежит другому аккаунту. Создайте новый и снова экспортируйте его.
Публикация возвращает ошибку квоты Лимит опубликованных приложений по тарифу исчерпан. Приложение и его черновики сохраняются — снимите с публикации другое приложение или перейдите на более высокий тариф, затем опубликуйте с экрана проверки.
Черновик возвращается отклонённым или задержанным Проверка содержимого что-то обнаружила. В причинах перечислено, что совпало и как это исправить; отредактируйте и отправьте снова. Ничего публичного не изменилось.

Одно, чего это не меняет

Черновики — это шаблоны, дополненные по вашему коду, а не юридическая консультация. То, что агент написал их быстро, не делает их верными — прочитайте написанное перед публикацией, особенно список того, что собирает ваше приложение. Магазин считает ответственным именно вас.

Вопросы: support@appfoyer.com.