Корзина — экран с высоким abandonment rate. Пользователь заходит, видит перегруженный интерфейс, не может быстро разобраться с итоговой суммой или случайно удаляет товар — и уходит. Мы, команда с 5-летним опытом в мобильной разработке, за это время реализовали 15+ проектов с корзинами для e-commerce, снижая отток на 15–20% за счёт продуманного UX. Стоимость типового проекта по редизайну корзины составляет от $1k–2.5k в зависимости от сложности. Разбираем, как построить корзину, которая не теряет деньги.
Как уменьшить abandonment rate на экране корзины?
Количество товара. Два паттерна: stepper (минус/плюс рядом с позицией) и inline input. Stepper удобнее одной рукой, input быстрее при большом количестве. На iOS UIStepper из UIKit — готовый компонент, но выглядит по-системному. Кастомный stepper требует правильной обработки быстрого нажатия: throttle на 300ms, иначе сервер получает лавину запросов при удержании кнопки. В SwiftUI это реализуется через .onChange с Combine debounce, в Jetpack Compose — через debounce из корутин.
Удаление позиции. Свайп влево с action button (iOS-паттерн, UIContextualAction) или long press с контекстным меню — оба варианта рабочие. Но обязательно нужен undo-toast: «Товар удалён» + кнопка «Отменить» на 4–5 секунд. Без этого процент случайных удалений критично высокий — в одном из наших проектов удалось снизить его с 8% до 2% после внедрения undo.
Sticky кнопка «Оформить заказ» — всегда видна внизу. На iOS учитывайте SafeArea, чтобы кнопка не перекрывалась home indicator. На Android — используйте CoordinatorLayout с фиксацией. Кнопка должна быть активной только когда корзина не пуста.
Почему структура итоговой суммы критична?
Пользователь должен понять, откуда взялась итоговая цифра, за 2 секунды. По данным Baymard Institute, 69% пользователей бросают корзину из-за неочевидной итоговой стоимости. Типичная ошибка: скидка показана отдельной строкой в середине списка, промокод — в другом месте, доставка — не посчитана до выбора адреса. Итог: человек не понимает, почему сумма такая, и не идёт дальше.
Правильная структура блока итогов:
- Сумма товаров
- Скидка (если есть)
- Поле промокода
- Доставка (с пометкой «рассчитывается на следующем шаге» если не известна)
- Итого — крупно, выделено
В одном проекте мы добавили интерактивный калькулятор доставки: выбор адреса прямо в корзине обновил итог и увеличил конверсию на 12%. Экономия от внедрения такого решения может достигать 30% от потерь на оттоке.
Сравнение реализации stepper на SwiftUI и Jetpack Compose
| Параметр | SwiftUI | Jetpack Compose |
|---|---|---|
| Базовый компонент | Stepper или кастом |
Row с кнопками |
| Throttle | .debounce(for: .seconds(0.3), scheduler: RunLoop.main) |
debounce(300) из корутин |
| Обработка long press | LongPressGesture |
Modifier.pointerInput |
| Анимация | .animation(.spring()) |
animateContentSize() |
Распространённые UX-ошибки и их решения
| Ошибка | Решение | Влияние на конверсию |
|---|---|---|
| Нет обратной связи при удалении | Toast с отменой (4–5 сек) | -5% оттока |
| Итоговая сумма неочевидна | Структурировать блок итогов | +15% перехода к checkout |
| Пустая корзина без действий | Иллюстрация + кнопка возврата + недавно просмотренные | +30% возвратов |
| Долгая загрузка | Skeleton-заглушки вместо spinner | -10% bounce rate |
| Отсутствие sticky кнопки | Фиксированная кнопка внизу | +20% оформлений |
Пустая корзина и сопутствующие состояния
Пустое состояние — не просто иллюстрация «корзина пуста». Это возможность вернуть пользователя в каталог. Хорошее решение: иллюстрация + заголовок + кнопка «Продолжить покупки» + блок «Недавно просмотренные» если есть история. По нашим данным, добавление недавно просмотренных увеличивает кликабельность пустой корзины на 30%.
Кейс: оптимизация корзины для интернет-магазина одежды
Для клиента с высоким уровнем оттока (45%) мы провели аудит и выявили основные проблемы: отсутствие undo при удалении, неструктурированный блок итогов и медленная загрузка с spinner. После внедрения всех описанных решений: skeleton-заглушки, undo-toast, структурирование итогов и sticky кнопка — отток снизился до 25% за месяц. Стоимость работ составила $1.4k–1.9k, окупилась за 3 месяца.Почему пустое состояние — это точка возврата?
Пользователь с пустой корзиной ещё не потерян. У нас был кейс: на стартапе с нулевой историей настроили персонализированные рекомендации в пустом состоянии — конверсия в добавление товара выросла на 25%. Важно показать не просто кнопку, а релевантные предложения.
Состояние загрузки: skeleton-заглушки под каждую строку позиций. Не общий spinner на весь экран. На iOS используйте Redacted модификатор SwiftUI, на Android — placeholder-шаблоны.
Что входит в работу
- Анализ текущего UX корзины (heatmaps, session replays)
- Проектирование структуры и компонентов в Figma (Auto Layout, component variants)
- Дизайн всех состояний: normal, swipe-revealed, loading, empty, error
- Спецификация для разработчиков через Figma Dev Mode
- Документация по взаимодействию с компонентами
- Поддержка при интеграции на iOS (SwiftUI/UIKit) и Android (Jetpack Compose)
Каждый проект проходит внутренний UX-ревью и тестирование на реальных устройствах. Свяжитесь с нами для оценки вашего проекта — мы подберём оптимальное решение под ваш стек и сроки. Закажите аудит корзины: выявим проблемные места и предложим конкретные улучшения.
Процесс работы: от аудита до деплоя
- Аудит текущей корзины (метрики, heatmaps, сценарии)
- Проектирование новой структуры (прототипы в Figma)
- Дизайн каждого состояния с учётом платформы
- Передача спецификации через Dev Mode
- Интеграция и тестирование на реальных устройствах
Сроки и стоимость
Срок разработки корзины — от 1 до 3 дней в зависимости от сложности. Стоимость рассчитывается индивидуально после анализа ТЗ. Оценка — бесплатно. Получите консультацию — мы поможем определить бюджет.
Как мы это делаем
Figma, Auto Layout, component variants для всех состояний ячейки (normal, swipe-revealed, loading). Отдельный компонент для блока итогов — переиспользуется на экране чекаута. Передача разработчику через Figma Dev Mode с токенами и спецификацией. Для iOS используем SwiftUI (iOS 15+) или UIKit, для Android — Jetpack Compose. Бэкенд-интеграция через REST или GraphQL.







