Server-Driven UI в мобильных приложениях: архитектура, кейсы и внедрение

Маркетинговый отдел требует еженедельных изменений главного экрана, но App Store Review занимает 2–3 недели. Мы в своей практике сталкивались с этим десятки раз. Решение — Server-Driven UI (SDUI), паттерн, где сервер отдаёт не только данные, но и описание того, как их отобразить. Мобильный клиент ст

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Server-Driven UI в мобильных приложениях: архитектура, кейсы и внедрение
Сложный
~2-4 недели

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    898
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    784
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1219
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1081
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    1004
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    600

Маркетинговый отдел требует еженедельных изменений главного экрана, но App Store Review занимает 2–3 недели. Мы в своей практике сталкивались с этим десятки раз. Решение — Server-Driven UI (SDUI), паттерн, где сервер отдаёт не только данные, но и описание того, как их отобразить. Мобильный клиент становится универсальным рендерером, который по JSON-схеме строит экраны динамически. Наш опыт — более 5 лет в мобильной разработке и 20+ проектов с SDUI. Компании вроде Airbnb (Ghost Platform, как описано в Airbnb Engineering Blog) и Mercado Libre уже используют этот подход на большинстве экранов, и мы внедрили его для нескольких ритейл-проектов.

Как работает Server-Driven UI?

Сервер хранит компонентное дерево для каждого экрана. Клиент получает JSON-описание и рекурсивно рендерит компоненты из своего реестра. Например, для главного экрана приходит структура:

{ "version": "1.0", "screen": { "type": "scroll_view", "children": [ { "type": "hero_banner", "props": { "imageUrl": "...", "title": "Летняя распродажа", "action": { "type": "navigate", "route": "/sale" } } }, { "type": "product_grid", "props": { "columns": 2, "dataSource": { "endpoint": "/api/products/featured" } } } ] } } 

Компонентная система — реестр типов: hero_banner, product_grid, text_block, cta_button, carousel. Новый тип компонента добавляется на сервере и в клиентах одновременно, деплоится через App Store/Play Store с новой версией приложения.

Почему это сложнее, чем кажется

  • Версионирование схемы. Пользователи обновляют приложение медленно. Если сервер отдаёт "type": "new_component", а клиент версии 2.1 его не знает — экран упадёт или отобразится некорректно. Нужна стратегия: fallback-компонент, минимально поддерживаемая версия, graceful degradation.
  • Типизация и валидация. Без строгой схемы (JSON Schema, Protobuf, kotlinx.serialization с sealed classes) сервер может отдать невалидный payload, и крэш будет на клиенте, а не там, где ошибка. На iOS — Codable с DecodingStrategy.useDefaultValues, на Android — @SerialName + sealed class с @JsonClassDiscriminator.
  • Производительность парсинга. Сложный экран в JSON — 5–50 КБ. На каждый скролл ленты это не пересчитывается, но cold render при первом открытии и кеширование схемы — отдельная инженерная задача.

Server-Driven UI vs традиционный UI: сравнение

Характеристика Традиционный UI Server-Driven UI
Время на изменения UI Недели (релиз) Часы (правка на сервере)
Частота обновлений Раз в 2–4 недели Ежедневно
Зависимость от App Review Да Нет
Сложность разработки Ниже Выше (движок + версионирование)
Гибкость для A/B тестов Ограничена Полная

В среднем SDUI сокращает время вывода изменений с недель до часов, что в 10 раз быстрее традиционного подхода. Ряд клиентов сэкономили более 40 часов разработки ежемесячно.

Когда использовать Server-Driven UI?

SDUI оправдан, если:

  • Частые изменения лейаута без релиза приложения (маркетинговые баннеры, промо-экраны, онбординг)
  • A/B тесты на уровне экранов: сервер отдаёт разные схемы разным сегментам пользователей
  • Несколько брендов на одном приложении: белый лейбл, где каждый клиент видит свой экран
  • Мощная редакторская команда: CMS-интерфейс позволяет нетехническим сотрудникам менять экраны

Отметим: когда SDUI не нужен: приложение со стабильным UI, маленькая команда, нет бизнес-требования менять экраны без App Store релиза.

Схема версионирования: fallback-компоненты

Версия схемы Тип компонента Действие на старом клиенте
1.0 hero_banner Рендерится как есть
1.5 video_banner Fallback на image_banner
2.0 interactive_map Fallback на text_block с ссылкой

Реальный кейс из нашей практики

Ритейл-приложение на iOS и Android. Маркетинговая команда хотела менять главный экран (баннеры, категории, рекомендации) еженедельно — без ожидания 2–3 недель на App Store Review. Мы внедряли SDUI поэтапно: сначала только главный экран (Hero Banner + Category Grid), через три месяца — страницы категорий и карточки товаров. Backend — CMS на Laravel с визуальным редактором схемы. Клиент — iOS SwiftUI, Android Jetpack Compose. Через 4 месяца маркетинг самостоятельно публикует новые экраны без участия мобильных разработчиков. Наш клиент сэкономил более 40 часов разработки в месяц.

Инфраструктура и CDN

Схемы экранов кешируются на CDN (CloudFront, Fastly) с Cache-Control: max-age=300. Инвалидация через stale-while-revalidate — пользователь сразу видит кешированную версию, фоном грузится свежая. Для критических изменений — Surrogate-Key для точечной инвалидации конкретного экрана.

Что входит в работу

  • Документация схемы: описание всех компонентов, их пропсов и версионирования
  • Референсная реализация клиента на одной платформе (iOS или Android)
  • Код-ревью и интеграция в существующий проект
  • Обучение команды (до 2 дней) работе с SDUI-системой
  • Поддержка на этапе запуска (2 недели)
  • Настройка SDUI для вашего стека: SwiftUI, Jetpack Compose, Flutter

Сроки: базовая SDUI-система (3–5 типов компонентов, один экран) — 4–6 недель. Полноценная платформа с CMS-редактором, A/B тестингом, версионированием схем — 12–20 недель.

Мы гарантируем совместимость с вашим стеком. Свяжитесь с нами для оценки вашего проекта — бесплатно проанализируем текущую архитектуру и предложим план. Закажите консультацию, чтобы обсудить детали внедрения SDUI для вашего приложения.