Главная » Portfolio » Контент-платформа для сети Android-приложений
CRM Мобильные приложения / Свой продукт

Контент-платформа для сети Android-приложений

Seganiko
Клиент Seganiko
Сфера Мобильные приложения / Свой продукт
Тип CRM
Используемые технологии Laravel, админка на Filament, REST API только на чтение, ключи и ограничение частоты, метки версий, конвертация в WebP, сводка из магазина и рекламной сети
Контекст

Задача

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

Что мы сделали

Приложение только читает: забирает манифест и набор материалов на своём языке, а пишет лишь обезличенные события. Метка версии на ответе избавляет от повторной загрузки неизменившегося — пришлось принимать все три её формы, потому что сжимающий прокси её переписывает. Изображения переводятся в WebP при загрузке, а показатели магазина и рекламной сети сводятся рядом с контентом.
Детали проекта

Один бэкенд на целую сеть приложений

Когда приложений два, контент можно держать в файлах внутри каждого. Когда их двадцать четыре, каждая правка в тексте превращается в новый релиз в Google Play и неделю ожидания.

Мы сделали платформу, в которой содержимое живёт отдельно от приложений: редактор правит его в админке, а телефоны забирают обновлённый набор сами — без обновления самого приложения.

Инфопанель платформы приложений: количество материалов и версия контента по каждому

Каждая плитка — приложение: сколько в нём материалов и какая версия контента сейчас опубликована.

Что это

  • Продукт: собственная разработка Seganiko
  • Назначение: контент-платформа для сети Android-приложений
  • Масштаб: 24 приложения, сотни тысяч материалов
  • Окружение: обычный хостинг, без root и контейнеров

Задачи

  • Править содержимое без релиза приложения.
  • Заводить новое приложение за считаные минуты, а не за неделю.
  • Не платить трафиком за то, что не изменилось.
  • Собирать статистику, не собирая персональных данных.

Что внутри

  • Админка с типами материалов под каждый формат.
  • API только на чтение, с ключом и ограничением частоты.
  • Конвейер медиа: оригинал и миниатюра в WebP.
  • Сводка показателей из Google Play и рекламной сети.

Приложение только читает

Главное решение архитектуры простое: телефон не пишет в платформу ничего, кроме обезличенных событий. Он забирает манифест, забирает набор материалов на своём языке — и всё. Нет ни учётных записей, ни синхронизации, ни конфликтов.

Благодаря этому новое приложение заводится почти без кода: в админке создаётся запись, генерируется ключ, заполняются рубрики и материалы, нажимается «Опубликовать» — и версия контента растёт на единицу. Ключ и адрес вписываются в приложение, дальше оно работает само.

Стадии приложения видны в списке: идея, концепция готова, в разработке, опубликовано. Платформа держит не только то, что уже в магазине, но и то, что пока в бэклоге — вместе с рубриками и материалами, которые к нему готовятся.

Двадцать четыре приложения в одной таблице

У каждого свой ключ доступа, свой набор языков, своя версия контента и своё состояние. Видно, что опубликовано, что в работе, а что лежит идеей. Это не витрина — это рабочий список, из которого ведётся вся сеть.

Список приложений со стадиями, категориями, API-ключами и версиями контента

Материалы разной формы

Рецепт, инструкция, вопрос викторины, карточка для игры, код ошибки, загадка, факт — у каждого формата своя форма редактирования, а не одно поле «текст». Добавить сотню материалов можно импортом: вставляется массив, выбирается тип и язык, и система показывает отчёт по строкам — что принялось, что нет и почему.

Раздел материалов: рецепты, викторины, карточки и справочники по приложениям

Не платить за то, что не изменилось

Набор материалов для одного приложения — это сотни килобайт. Качать их каждый раз при запуске бессмысленно, поэтому ответ подписан меткой версии: если на телефоне уже свежий набор, сервер отвечает «изменений нет» и не передаёт ничего.

Здесь была та самая ловушка, из-за которой экономия не работала: прокси, сжимающий ответы, переписывает метку в «слабую» форму, и строгое сравнение перестаёт совпадать. Телефон каждый раз качал всё заново. Сравнение пришлось научить принимать все три формы метки — строгую, слабую и перечисленную через запятую.

Медиа, которое не раздувает приложение

Каждое изображение при загрузке переводится в WebP и хранится в двух размерах: полный до 1200 пикселей и миниатюра до 400. Раздаёт их сервер с длинным кешем, а приложение получает готовые адреса — никаких преобразований на телефоне.

Медиатека платформы с конвертацией в WebP и миниатюрами

Статистика без персональных данных

Приложения шлют обезличенные события — открытие, переход, действие. Никаких идентификаторов человека, никаких контактов. За раз принимается не больше пятидесяти событий, некорректные строки просто отбрасываются, а не роняют весь запрос.

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

Как это делалось

1
Этап 1
Модель содержимого
Приложение, рубрика, материал, язык. Типы материалов под каждый формат со своей формой редактирования.
2
Этап 2
API
Только чтение, ключ на приложение, ограничение частоты, метка версии ответа и публикация, поднимающая версию контента.
3
Этап 3
Медиа и импорт
Конвертация в WebP с миниатюрами, длинный кеш, импорт массивом с отчётом по строкам.
4
Этап 4
Показатели
Обезличенные события от приложений и сводка установок и дохода из магазина и рекламной сети.

Что под капотом

Платформа

Laravel с админкой на Filament. Живёт на обычном хостинге: без root, без контейнеров, очереди и кеш в базе, изображения конвертируются сразу при загрузке.

API

Четыре адреса на чтение, ключ в заголовке, ограничение по ключу и по адресу, метка версии с ответом «изменений нет». Ошибки — обычный JSON с кодом.

Хранилище

Отдельное место для сборок и материалов магазина: иконки, снимки экрана, описания. Плюс перекрёстные ссылки между приложениями сети.

Что получилось

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

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


Похожий проект?

Обсудим ваши цели и найдём лучшее решение.

Запросить бесплатную оценку →
Есть вопросы?

Обсудим ваш
проект.

Первая консультация бесплатно, без обязательств.