Как разработчики создали 1500 мобильных слот-игр, меняя только текстуры: инженерный кейс по автоматизации и доход $50 000

Как разработчики создали 1500 мобильных слот-игр, меняя только текстуры: инженерный кейс по автоматизации и доход $50 000

1. Контекст: рынок мобильных игр в 2013–2014 годах

В начале 2010-х годов модель платной премиум-игры («заплатил один раз и играй») на мобильных платформах начала стремительно сдавать позиции. Причина — появление и доминирование F2P (free-to-play) с внутриигровыми покупками и рекламой. Крупные студии переходили на «условно-бесплатные» проекты с длительными циклами удержания игроков. На противоположном полюсе возник огромный рынок низкокачественных, шаблонных игр — так называемых «мусорных» (shovelware). Это были клоны «Трёх в ряд», симуляторы свиданий, бесконечные раннеры и, конечно, игровые автоматы (слоты).

Два разработчика из США — Алекс Шварц (один из создателей паззл-аркады Jack Lumber) и Зиба Скотт (автор инди-хита Girls Like Robots) — попробовали классическую стратегию: сделать качественный платный продукт. Обе их игры получили положительные обзоры на TouchArcade и IGN, были отмечены на фестивалях, но финансовая отдача оказалась катастрофической. В одном из интервью Шварц позже говорил: «Мы вкалывали полгода, а заработали меньше, чем дворник за неделю».

Наблюдая за тем, как безвестные студии ежедневно заливают в Google Play десятки примитивных слотов и зарабатывают на рекламе, они пришли к выводу: рынок не поощряет качество, а поощряет количество и правильную монетизацию. Если конкуренты штампуют поделки вручную (копируя проект, меняя иконку и название), то почему бы не автоматизировать этот процесс полностью — от генерации контента до публикации?

Так родился эксперимент. Его цель была не сатирической (хотя доля иронии присутствовала), а сугубо инженерно-бизнесовой: проверить, можно ли настроить полностью автоматический конвейер по производству мобильных приложений, которые будут генерировать стабильный рекламный доход без какого-либо участия человека после старта.

Как разработчики создали 1500 мобильных слот-игр, меняя только текстуры: инженерный кейс по автоматизации и доход $50 000

2. Технологический стек: как был построен конвейер

Система не была монолитной. Она состояла из четырёх независимых модулей: генератор визуала, звуковой движок, скрипт сборки в Unity и модуль публикации в Google Play.

2.1. Ядро: Unity + готовая 3D-модель

В качестве базы использовался стандартный ассет из Unity Asset Store — трёхмерная модель игрового автомата с вращающимися барабанами. Стоимость лицензии составила $15. Вращение и подсчёт очков уже были запрограммированы в демо-сцене. Разработчики не меняли логику случайных чисел (RNG) и алгоритм выигрыша — он оставался крайне простым: три одинаковых символа давали 10 очков, два — 2 очка.

Визуальная настройка происходила через замену текстур в рантайме. Для этого использовался стандартный Unity Material.SetTexture(). Шварц и Скотт написали C#-скрипт, который:

  • Выбирал случайную тему из текстового файла (список из 200+ тем: «дельфины», «кегли для боулинга», «книги», «арбузы», «ретро-автомобили», «медицинские инструменты» и т.д.);
  • Скачивал через API поиска Bing (использовалась бесплатная версия с лимитом 50 запросов в час) первые 10 изображений по запросу, например, «dolphin seamless texture»;
  • Применял загруженную текстуру к барабанам, а другую — к фону сцены.

Отказоустойчивость была минимальной: если изображение не загружалось (например, Bing возвращал ошибку 403), подставлялась белая текстура-заглушка.

2.2. Генерация названий и описаний

Название игры генерировалось по простой формуле:[Случайное число от 1 до 100] + [Прилагательное] + [Существительное] + "Slots".

Примеры: «3D Sexy Librarian Slots», «77 Magic Bowling Slots», «0 Cool Penguin Slots» (ноль тоже использовался). Для английского языка правило орфографии не соблюдалось — «0 Cool» выглядело нелепо, но на трафик это не влияло.

Описание в Google Play составлялось из шаблонных фраз:«Best [тема] slot machine! Spin now and win big! No in-app purchases, just fun!»Длина описания — ровно 700 символов (старый лимит для короткого описания). Никакой SEO-оптимизации не проводилось, так как экспериментаторы не рассчитывали на органический поиск — упор делался на баннерную рекламу внутри своих же приложений (кросс-промо) и внешние сети.

2.3. Звук: Google Translate Text-to-Speech

Для озвучки выигрышей использовался синтезатор речи Google Translate. Скрипт на Python отправлял GET-запрос к https://translate.google.com/translate_tts с параметрами:

  • tl=en (язык — английский);
  • q — фраза типа «Jackpot! 1000 coins!» или «You win! 10 points!»;
  • client=tw-ob (обход простой защиты).

Запросы слались с подменой User-Agent на обычный браузерный. Полученный MP3-файл сохранялся и вшивался в сборку Unity. Скорость речи была максимальной (параметр speed=1.2), интонация — монотонная, механическая. Шварц в своём блоге отмечал, что звук получился «настолько унылым, что игроки пугались не выигрыша, а самого голоса». Но технически всё работало.

Музыкальное сопровождение отсутствовало полностью. Фоновый шум не добавлялся.

2.4. Сборка и подпись приложений

Unity предоставляет интерфейс командной строки: Unity.exe -batchmode -quit -projectPath ... -executeMethod BuildScript.BuildAll. Шварц и Скотт написали скрипт на C#, который:

  1. Создавал новый проект Unity из шаблона;
  2. Заменял текстуры и аудиофайлы;
  3. Менял название приложения в PlayerSettings;
  4. Генерировал уникальный package name (com.schwarz.randomword.slots);
  5. Запускал билд под Android (APK-файл).

Одна сборка занимала в среднем 4 минуты на машине с Intel Core i5 и 8 ГБ RAM. За час собиралось около 15 APK. Работа велась на двух компьютерах параллельно.

Подпись APK выполнялась стандартным jarsigner с одним и тем же ключом для всех приложений (что впоследствии не вызвало проблем с Google Play, так как тогда не было строгой проверки уникальности подписи на один аккаунт).

Как разработчики создали 1500 мобильных слот-игр, меняя только текстуры: инженерный кейс по автоматизации и доход $50 000

3. Публикация: автоматическая заливка в Google Play

Самый технически сложный модуль — автоматическая публикация. В 2014 году у Google Play не было официального API для загрузки APK (сейчас есть Google Play Developer API). Поэтому разработчики использовали браузерную автоматизацию.

Инструменты:

  • Selenium WebDriver (Python);
  • ChromeDriver;
  • Профиль браузера с сохранённой сессией логина.

Алгоритм заливки одного приложения:

  1. Открыть веб-интерфейс Google Play Console.
  2. Нажать кнопку «Добавить приложение».
  3. Заполнить поля: название (из сгенерированного), короткое описание, полное описание, категория «Игры → Казино».
  4. Загрузить APK (через send_keys с путём к файлу).
  5. Загрузить скриншоты (генерировались тем же скриптом — автоматический скриншот игрового процесса через Unity в headless-режиме).
  6. Установить цену «Бесплатно».
  7. Опубликовать (кнопка «Publish»).

Лимиты и обходы:

  • Google Play разрешал не более 15 приложений в день на один аккаунт разработчика (антиспам-ограничение). Шварц и Скотт использовали один аккаунт и точно укладывались в лимит.
  • Каждая публикация занимала около 10 минут из-за задержек на загрузку скриншотов и проверок интерфейса. За 24 часа скрипт успевал сделать 15 итераций.
  • Для обхода капчи использовалась минимальная пауза и ручное вмешательство (разработчики один раз в день вводили капчу при первой публикации, затем сессия держалась несколько часов).

Всего за время работы системы было опубликовано около 1500 уникальных приложений. Ни одно из них не получило предупреждения от Google за нарушение политик (кроме последующих массовых блокировок позже, уже после закрытия эксперимента).

4. Экономика и результаты

4.1. Трафик и установки

Разработчики не занимались продвижением. Приложения были скрыты в глубине каталога Google Play, не имели ASO-оптимизации. Тем не менее, совокупное количество установок за несколько месяцев достигло 1,6 миллиона. Откуда брался трафик? Основные каналы:

  • Кросс-промо внутри самих игр: в каждом приложении баннер предлагал установить «другую крутую игру» (ссылку вели на случайное приложение из той же сети Шварца-Скотта).
  • Органический поиск по длинным хвостовым запросам (например, «free dolphin slots no download»).
  • Рекламные сети (пользователи кликали на внешнюю рекламу в других приложениях, не принадлежащих авторам).

Важно: ни одного платного инсталла не было — бюджет на рекламу равнялся нулю.

4.2. Монетизация и реклама

В приложения была интегрирована рекламная сеть Playhaven (ныне не существует). Баннеры показывались внизу экрана и перекрывали часть игрового поля (пользователь не мог их закрыть). Частота показа — каждые 30 секунд, без какой-либо оптимизации.

Ключевая метрика: CTR (Click-Through Rate) = 27%. Это аномально высокий показатель. Для баннерной рекламы нормальный CTR в мобильных играх — 1–5%. 27% означало, что каждый четвёртый игрок кликал на рекламу.

Почему так происходило? Шварц предположил, что разочарование и раздражение от унылого геймплея и монотонного голоса настолько велико, что пользователь воспринимает любой переход в другое приложение как спасение. Он назвал это «эффектом портала в лучший мир». Другой фактор — многие игроки были пожилыми людьми, которые случайно нажимали на баннер из-за крупных пальцев (интерфейс не был адаптирован).

Доход: за всё время около **$50 000**. Примерное распределение: $0,02–0,05 за клик (это стандартная ставка для мобильной рекламы в 2014 году). Количество кликов: 1,6 млн установок × 27% CTR × 1 клик в среднем на пользователя (грубая оценка) = 432 000 кликов. При $0,12 за клик получается $51 840. Реальные цифры могли немного отличаться.

4.3. Реакция пользователей

Самый неожиданный результат — рейтинг 4 звезды у нескольких игр. Одна из них, 3D Bowling Slots, собрала несколько положительных отзывов. Пример:

«Игра нормальная, но почему на барабанах кегли, а не карты? Непонятно. Но в целом неплохо, четыре звезды».

Ни одного вменяемого негативного отзыва с подробным разбором недостатков не было. Пользователи либо ставили 5 звёзд без комментария, либо жаловались на то, что выигрыши нельзя вывести на реальные деньги (хотя в описании этого и не обещалось).

5. Почему проект закрыли

Причина не в этике и не в моральном перегорании. Были сугубо прагматичные факторы.

5.1. Блокировка со стороны рекламной сети

Playhaven, которая выплачивала разработчикам деньги за клики, прислала уведомление: «Ваши пользователи демонстрируют наихудшие поведенческие метрики среди всех наших партнёров. Время в приложении менее 10 секунд, глубина просмотра рекламы нулевая, почти нет конверсий в платящих пользователей. Мы прекращаем сотрудничество».

Это означало, что монетизировать новые установки стало нечем. Альтернативные сети (AdMob, Chartboost) не были подключены из-за отсутствия автоматизации вставки SDK.

5.2. Обновление Google Play

В середине 2014 года Google обновил интерфейс консоли разработчика. Классы CSS и ID элементов изменились, появилась новая двухфакторная аутентификация (на тот момент опциональная). Написанные на скорую руку Selenium-скрипты перестали работать. Адаптировать их под новую вёрстку разработчики не стали, так как:

  • Доход уже упал до $100–200 в месяц;
  • Эксперимент себя исчерпал, ответ был получен;
  • Поддержка 1500 приложений вручную была невозможна.

5.3. Моральный фактор (не основной, но присутствовал)

Хотя мы пишем без морали, стоит отметить, что сами авторы чувствовали дискомфорт от осознания того, что они наводнили рынок мусором. Но к решению о закрытии это привело в минимальной степени — скорее, они просто потеряли интерес.

6. Выводы для бизнеса и технологий

  1. Полная автоматизация жизненного цикла мобильного приложения (сборка → подпись → публикация) технически реализуема даже без официального API. Сейчас это сложнее из-за усиления антифрода, но принципы остались теми же.
  2. Экономика «мусорных» игр в 2013–2014 годах была положительной при условии высокого CTR. Порог входа: $15 за ассет + несколько недель написания скриптов. Окупаемость при 1,6 млн установок — несколько месяцев.
  3. CTR не всегда коррелирует с качеством или вовлечённостью. В данном случае низкое качество привело к высокому CTR из-за желания пользователя «сбежать». Это обратная сторона монетизации на рекламе: вы не продаёте удовольствие, вы продаёте облегчение.
  4. Зависимость от внешних сервисов (рекламная сеть, API Bing, Google Play) — ключевая уязвимость. Изменение политики или интерфейса любого из них мгновенно убивает конвейер. Необходимо предусматривать fallback-каналы.
  5. Google Play того времени не имел эффективной защиты от автоматизированных масс-загрузок. Сейчас проекты такого масштаба без использования ферм аккаунтов и обхода антибот-систем невозможны.

Дополнительные детали

  • Стоимость хостинга: APK-файлы хранились на Google Drive (бесплатно до 15 ГБ). После публикации локальные копии удалялись.
  • Ошибки и баги: В примерно 3% сборок Unity выдавал ошибку из-за некорректных текстур (не степень двойки). Такие APK отбраковывались и не загружались.
  • Максимальное количество установок на одну игру: около 50 000 (для самой удачной — 3D Sexy Librarian Slots). Минимальное — 10 установок
4
3
1
2 комментария