ForBlitz Statistics: Как я в 10 классе сделал приложение на 10K+ установок
Привет! Я — один из администраторов в проекте ForBlitz, разработчик приложения ForBlitz Statistics и выпускник программы «IT Школа Samsung» в Санкт-Петербургском Дворце творчества юных. В июле 2023 года я стал победителем ежегодного конкурса по разработке мобильных приложений «IT Школа выбирает сильнейших!», заняв 2-е место в номинации «Программирование» с приложением ForBlitz Statistics, предназначенного для ведения соревновательной статистики по боям на танках в известной игре. Учась в 10 классе, я создал продукт, получивший 10K+ установок уже за первые полгода после выпуска, и теперь хочу поделиться краткой историей тернистого, но интересного пути разработки.
Изучение Android-разработки с нуля, три версии дизайна, несколько полных рефакторингов, публикация в Google Play — вот, как это было…
Небольшая предыстория
В СНГ‑пространстве мало кто не слышал про «танки» (WoT/Мир Танков) — одну из популярнейших (по данным исследования Wargaming и Superdata от 2019 года эта игра стала самой прибыльной в категории F2P в России) игр среди взрослой аудитории. А вот менее известным является тот факт, что многие игроки возводят игровой процесс в статус киберспорта. А где киберспорт, там и стремление к как можно более высоким результатам, и, как результат, упор в «циферки» — статистику своих успехов и неудач. То же самое касается и мобильной версии «танков» — WoT/Tanks Blitz, пиковый дневной онлайн которых достигает 25 000.
Как ни странно, в самих «танках» статистика почти не представлена: всего лишь для одного игрового режима, и то в минимальном виде. Зато компании‑разработчики (в 2022 году разработка и права на RU‑ и BY‑регионы под новым названием «Мир Танков» и «Танки Blitz» были переданы компании Lesta Studios, а остальные оставлены Wargaming) предоставляют доступ к Wargaming Public API — инструменту для получения подробнейших данных об игре и аккаунтах. В итоге большинству желающих приходится для отслеживания своих результатов всё же пользоваться сторонними ресурсами, в основном — сайтами.
Почти с первых дней игры меня заинтересовали внутриигровые модификации: сначала я просто устанавливал чужие моды, затем начал публиковать уже свои, потом получил приглашение в команду небольшого сообщества, состоящего из таких же начинающих мододелов (так называют людей, создающих модификации), а оттуда уже получилось вступить в ForBlitz — самый большой и самый старый проект на эту тему, существующий с 2016 года. Прошло несколько месяцев, и создание модов наскучило, зато заинтересовало программирование. К этому времени проект получил собственный сайт и мобильное приложение, и рук сильно не хватало: всего два администратора‑программиста «тянули» на себе десятки тысяч пользователей. При этом всё ещё хотелось расширить проект за рамки обычных модификаций.
На этом фоне и возникла общая идея создать быстрое, удобное и функциональное приложение для просмотра статистики. Я сам к моменту начала разработки играл несколько лет и, будучи игроком «выше среднего», часто ощущал нехватку такого инструмента, так что предложение попробовать себя в разработке принял на ура.
Подробнее о аналогах и нишевости
Главными игроками на этом рынке были сайты wblitz.net и kttc.ru. В силу особенностей API они имели сильные ограничения по скорости и по какой‑то непонятной причине также давали не очень много информации. Так или иначе их в целом вполне хватало, чтобы облегчить отслеживание статистики.
Среди Android‑приложений был лишь один конкурент: informal WoT BLITZ Statistics. Вроде как «монополист», но… возможности почти не превышали таковые в самой игре.
Бэкенд: наконец, разработка
Сперва — разобраться с самим Wargaming Public API. К счастью, у этого инструмента от разработчиков есть даже полноценная документация! Данные идут в обычном JSON. На этом этапе оставалась лишь сериализация. Интересно, что при всей своей продуманности API имеет множество вариаций исключений, никак в документации не описанных. Позже пришлось некоторые случаи буквально «хардкодить» через if. Грустно, но терпимо.
Как ни странно, самой сложной частью оказалась работа с сетью. Удивительно: самая популярная библиотека для создания HTTP‑запросов, Retrofit, не предусматривает, что интернета может и не быть! Решением оказалось встраивание проверки наличия сети при каждом intercept в связке с повторением запроса, если он всё же падает (к примеру, по timeout). Уже из чисто спортивного интереса добавлено и соответствующее диалоговое окно, создание которого потребовало отдельного service.
Фронтенд: путь к современному UI при хорошем UX
Как водится, сначала были красивые‑красивые (и то на первый взгляд) концепты. Картинки в качестве фона, кнопки всевозможных форм и размеров… В итоге это всё оказалось непонятным, неудобным и излишне вычурным уже на стадии реализации.
Скрытый текст
На очереди были строго функциональные концепты. Лаконично и просто. Пришло осознание, что изобретать велосипед не обязательно: привыкшие к расположению элементов в стандартном клиенте и существующих аналогах люди захотят увидеть подобную структуру и в новом приложении. Только вот дизайн каждой своей деталью буквально молил о переработке.
Скрытый текст
И, наконец, нечто среднее. Фон — не совсем монотонный, добавился градиент. Layout стали полупрозрачными чёрно‑белыми «карточками», надписи — разными по яркости, кнопки — с цветовыми акцентами. После недолгих раздумий были добавлены и анимации. Теперь на главном экране отображаются ключевые значения, остальное вынесено «под спойлер».
Скрытый текст
Работа над архитектурой
Сначала все действия казалось логичным запихнуть в одну‑единственную Activity, но уже через несколько месяцев разработки добавление любой функции стало подобием поиска устойчивой кочки в болоте. Что делать? Скрепя душу, переписывать всё под MVC. Появились собственные View для разных целей, конфигурационные файлы, константы.
Подготовка к выпуску на тест
Конечно, хобби — это «для души», но и капелька рекламы не помешает. Так как аудитория планировалась преимущественно из СНГ, были выбраны решения от Яндекса. Также я добавил сервисы для отслеживания багов, вылетов, crash‑free и в целом аналитики: уже во время альфа‑теста сообщения по типу «вылетает в случайный момент» заставили ощутить потребность в таковых. Выбор остановился на Google Firebase и, в частности, Crashlytics. Уже перед самым выпуском я добавил контроль версии сборки: при каждом запуске приложение «сверяет» свою версию с сервером и при необходимости показывает уведомление о выходе обновления.
Настоящее и будущее: перспективы развития
После выпуска сразу была проведена небольшая реклама: в сообществе проекта ForBlitz во «ВКонтакте» был выпущен информационный пост о релизе, а недавно приложение стало первым официальным расширением к приложению проекта.
Скрытый текст
Сейчас приложение преодолело «моральную планку» в 10,000 установок в Google Play. Судя по отзывам, в основном пришли люди, ранее пользовавшиеся сайтами на схожую тематику: нативное приложение оказалось удобнее. Из других причин выделяли быстродействие и некоторые эксклюзивные виды статистики, которые привлекли не нашедших этого в конкурентах.
На очереди — полная реализация всего API, включая требующие авторизации виды статистики, внедрение общей для всего бренда подписки за синхронизацию с облаком и общие доработки, информация о которых собирается до сих пор: приложение находится в стадии бета-теста. В совсем дальней перспективе — перевод разработки на Kotlin Multiplatform и релиз на iOS.
Фидбек
Весь процесс разработки сопровождался и сопровождается по сей день обширным сбором отзывов. Сначала это был альфа‑тест среди избранных тестеров. Находили баги, нюансы совместимости… Потом пришло время бета‑теста, в котором приложение находится и сейчас.
Как и ожидалось, отзывы смешанные: на момент написания статьи средний рейтинг — 4,4/5. Почти все замечания связаны с несколькими моментами UX. К счастью, то, ради чего приложение создавалось, не подвело: его хвалят за быстродействие и информативность.
Про обучение в «IT Школе Samsung»
Здесь я хочу сказать о том, какую важную роль сыграло обучение в создании приложения. Можно долго говорить про самообразование, но… в реальности всё оказалось не так радужно.
К началу 2022/2023 учебного года у меня уже были наработки по приложению: на первый взгляд всё даже работало. Но вот на «второй взгляд» открывалась темная сторона самостоятельного изучения такой глубокой темы без продуманности и системы. Приложение вылетало при отсутствии сети (извечная проблема при использовании Retrofit, самой популярной библиотекой для работы с API), зависало при создании длинных списков, не умело обрабатывать ошибки поиска.
И тут, к счастью, началось моё обучение в «IT Школе Samsung». Наиважнейшими я склонен считать обратную связь от куратора‑преподавателя, Георгия Семёнова, и саму по себе учебную программу. За мучительным падением розовых очков последовало осознание: надо переделывать… абсолютно всё. Сразу были внесены правки UI, UX, а главная работа была проведена над кодом. Один класс превратился в десятки, появилось соответствие стандартам, даже банальный Git — и тот был новинкой! Прошло полгода, и код пришлось переписать практически полностью, по большей части с нуля. Большая часть правок была проведена благодаря моему преподавателю, за что я ему и сейчас очень благодарен: он неоднократно проводил полное код‑ревью и практически в любое время суток давал рекомендации по исправлению проблем, которые ему удавалось находить даже в решениях, казавшихся мне до того совершенными.
Конкурс проектов «IT Школы Samsung»
Обучение в «IT Школе Samsung» вместо экзаменов завершается созданием и защитой своих разработанных приложений — что‑то вроде дипломной работы в институте. Более того: с каждой группы площадок жюри выбирают лучшие проекты, которые в дальнейшем выходят в Финал ежегодного конкурса по разработке мобильных приложений «IT Школа выбирает сильнейших!», в этом году ставшего интернациональным — впервые в этом году к выпускникам «IT Школа Samsung» 2022/2023 учебного года присоединились ученики из Армении.
Конечно, именно ForBlitz Statistics стал моим выпускным проектом. Бессонные ночи подготовки к конкурсу и… выход в его финал! А значит — что? Снова рефакторинг!
Подготовка к финалу была похожа на трагикомедию: проведение финала практически идеально совпало с отключением Интернета у единственного оператора в глухой карельской деревне, в которой я находился, так что все на мероприятия приходилось ездить в деревню побольше и сидеть в придорожном кафе у заправки.
Перед сдачей организаторами был проведен тренинг, на котором мы потренировали произношение, жестикуляцию, — в общем, умение «правильно» выступать.
Как ни странно, сам финал для меня прошел почти без волнения. Наверное, потому, что на это не было времени: тысяча проверок оборудования, в полевых условиях становящегося особенно капризным, тысяча напутствий от преподавателя, однокурсников, близких людей… И, наконец, выступление.
Выступал я вторым из всех финалистов, так что подготовиться к ответам жюри времени почти не было. А вопросы были: к разработке, к релизу и, конечно же, к техническим моментам. Несколько волнительных минут — и сдача завершена; финалисты продолжают свои выступления, а я «со всех ног» бегу на единственный в этих местах автобус.
На следующий день узнаю результаты и… второе место!
Скрытый текст
Эпилог
С начала разработки прошло уже немало времени. Попутно почти с нуля став Android‑разработчиком, я превратил смутную идею в реальный, пусть и небольшой, коммерческий продукт. Познакомился с талантливыми людьми, которыми были мои одногруппники, работал под руководством прекрасного преподавателя, пообщался с невероятными жюри и организаторами конкурса.
Теперь я искренне надеюсь, что, может быть, кому‑то эта статья даст понять: возраст и опыт не всегда являются определяющими факторами. Программирование даётся упорным — и пусть таковым и остаётся!
Ярослав - выпускник бесплатной программы по подготовке будущих IT-специалистов «IT Школа Samsung», которая является частью глобальной инициативы Samsung Innovation Campus. Можно заниматься как очно, так и онлайн на десятках площадок в России, а с прошлого года также и в Армении. Хотите достичь уровня Junior-разработчика мобильных приложений на Java уже в школе? Скоро начинается учебный год, успейте подать заявку здесь: https://innovationcampus.ru/itschool/
#SIC_Russia_2023 #enabling_people #SamsungInnovationCampus