Сборка и поддержка более 100 приложений Sports.ru в единой кодовой базе

Заказчик
Sports.ru — цифровое спортивное издательство и медиа платформа о спорте на русском языке, объединяющая веб-проект, шоу на YouTube, подкасты, рекламную сеть и агентство маркетинга.
Задача
Разработать для заказчика пул мобильных приложений для поклонников спортивных соревнований.

Сайт Sports.ru выходит за рамки обычного агрегатора новостей на спортивную тематику – для каждого клуба на страницах веб-сервиса есть собственная страница с уникальным адресом вида sports.ru/spartak для клубов и спортсменов, отдельные потоки в соцсетях агрегируют уникальную событийную ленту под интересы пользователя. 

Такой функционал с избранным контентом для каждого читателя был реализован в тематических сервисах. Для создания серии мобильных решений этого типа мы создали единую кодовую базу, позволившую собрать более 200 различных приложений. Большинство функций дочерних ПО собрано во флагманском софте Sports.ru, за 10 лет поддержки в него было интегрировано очень много функций для удобства клиентов.

Стартовый экран встречает предложением выбора избранных тем для новостной ленты с разбивкой на более детальные запросы и подкатегории.

Онбординг приложения сразу предлагает настроить уведомления о важных событиях, по отдельным видам спорта, выбранным тегам, сведениям о матчах.
Аккаунт создается с авторизацией через соцсети, гугл или почту. Это обязательное требование для создания персональной ленты, написания комментариев и постов, оценки текстов других пользователей. Таким образом мы превратили мобильное СМИ в спортивную социальную сеть – объединили комьюнити, дав возможность читателям обмениваться сообщениями, получать письма, писать комментарии к статусам.

Мы вынесли на главную страницу основные события, персональную ленту и уведомления. Динамическое меню предоставляет возможность пользователю кастомизировать окружение, добавлять собственные вкладки на любимые виды спорта, спортсменов и тренеров. Лента переключается по вкладкам “Главная”, “Новости”, “Материалы”, “Блоги” и “Статусы” одним тапом для комфортного серфинга новостных каналов.
Вкладка “избранное” хранит подписки и важные сообщения из раздела быстрого доступа. Модуль рекомендованных постов позволяет продолжать чтение материалов по теме даже если лента пролистана до конца.

Большой блок приложения – матч-центр самых массовых видов спорта, футбольных, хоккейных и баскетбольных матчей со встроенным модулем онлайн-трансляции, динамической таблицей дивизионов, статистикой матчей, прогнозами на игры, возможностью делиться событиями в соцсетях и интеграцией с календарем.
Дополнительный блок статистики включает в себя актуальные таблицы чемпионатов, календари и статистику по национальным и международным лигам.

Общение болельщиков, их эмоции и переживания – важная часть спортивной игры, для них в приложении реализованы уже упомянутые комментарии и сообщения, доступны подкасты для прослушивания. Болельщики публикуют свои посты на интересующие темы, некоторые авторы стали настолько популярны, что получили предложение стать официальными журналистами портала. В помощь модераторам внедрены механизмы антихейта, защиты от буллинга и “черные списки”.
Обратная связь с поддержкой осуществляется напрямую из интерфейса.

Модули 

Программный пакет имеет модульную структуру - весь код разбит на множество фрагментов, разделение есть как по слоям (базовые модули с общим кодом, базовый UI и т.д.), так и по фичам (модули для матча, отображения контента новостей или различных списков). Основная часть содержит в себе базовую навигацию, обработку кастомизации приложения, а также точки входа в приложение.

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

Техническая часть

iOS-версия разбита на несколько слоев - применяется подход SOA. Основная архитектура презентационного слоя - MVVM. Мы также используем RxSwift для биндинга данных. Активно используем DI-библиотеки с помощью Swinject, что хотя и увеличивает количество сущностей и ресурсы в проекте, дает возможность контролировать зависимости объектов, делать их внешними и гибкими. В сеть ходим как по REST, так и по GraphQL и используем для этого Moya и Apollo соответственно. Технологическая платформа флагманов и колонок – это единая кодовая база: новые возможности и дополнения при следующей сборке автоматически попадают во все программы с одинаковым функционалом. Системные билды позволяют менеджеру выбирать разделы, данные, иконки нового ПО, визуальную часть и конструировать приложение, не погружаясь в код. Процесс сборки прост и минимизирует рутинные процессы для заказчика.

Sports.ru поддерживает множество платформенных фишек iOS - красивые Rich Push Notifications, виджеты, работа с Siri.

Стабильная работа поддерживается не только на iPhone, но и на iPad с минимальными изменениями в коде.

Разработка Android приложения ведется длительное время, но стек держится в актуальном состоянии, т.к. постоянно уделяется время рефакторингу. На данный момент используемый стек можно считать весьма современным:

- Kotlin Coroutines

- Dagger 2 в качестве DI

- связка okHttp + Retrofit для работы с сетью

Ведется активная миграция java кода на kotlin для повышения производительности и стабильности всей коллекции приложений. 

В карточку агентства

Письмо автору кейса

Подпишитесь на рассылку
Читайте также
Кейсы по теме#СМИ, издательства