Привет! Я — один из администраторов в проекте 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

Как водится, сначала были красивые‑красивые (и то на первый взгляд) концепты. Картинки в качестве фона, кнопки всевозможных форм и размеров… В итоге это всё оказалось непонятным, неудобным и излишне вычурным уже на стадии реализации.

«Проба пера» в Figma. Красивые, но не очень функциональные макеты
«Проба пера» в Figma. Красивые, но не очень функциональные макеты
«Проба пера» в Figma. Красивые, но не очень функциональные макеты

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

Так выглядела первая версия дизайна приложения. Информативно, но не красиво
Так выглядела первая версия дизайна приложения. Информативно, но не красиво
Так выглядела первая версия дизайна приложения. Информативно, но не красиво

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

Так выглядит приложение сейчас
Так выглядит приложение сейчас
Так выглядит приложение сейчас

Работа над архитектурой

Сначала все действия казалось логичным запихнуть в одну‑единственную Activity, но уже через несколько месяцев разработки добавление любой функции стало подобием поиска устойчивой кочки в болоте. Что делать? Скрепя душу, переписывать всё под MVC. Появились собственные View для разных целей, конфигурационные файлы, константы.

Подготовка к выпуску на тест

Конечно, хобби — это «для души», но и капелька рекламы не помешает. Так как аудитория планировалась преимущественно из СНГ, были выбраны решения от Яндекса. Также я добавил сервисы для отслеживания багов, вылетов, crash‑free и в целом аналитики: уже во время альфа‑теста сообщения по типу «вылетает в случайный момент» заставили ощутить потребность в таковых. Выбор остановился на Google Firebase и, в частности, Crashlytics. Уже перед самым выпуском я добавил контроль версии сборки: при каждом запуске приложение «сверяет» свою версию с сервером и при необходимости показывает уведомление о выходе обновления.

Настоящее и будущее: перспективы развития

После выпуска сразу была проведена небольшая реклама: в сообществе проекта ForBlitz во «ВКонтакте» был выпущен информационный пост о релизе, а недавно приложение стало первым официальным расширением к приложению проекта.

Страница ForBlitz Statistics в Google Play

Страница ForBlitz Statistics в Google Play
Страница ForBlitz Statistics в Google Play

Сейчас приложение преодолело «моральную планку» в 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
#SIC_Russia_2023 #enabling_people #SamsungInnovationCampus

Комментарии (0)