Как ускорить публикацию объявления до 2 минут?
Пользователь заходит на доску объявлений, хочет продать диван. Открывает приложение — и видит пустую форму с десятком полей. Фотографии грузятся по одной, кнопка «Опубликовать» неактивна 30 секунд. Он закрывает приложение и уходит к конкурентам. По данным Statista, 70% пользователей покидают приложение, если публикация занимает более 3 минут. Наш опыт — более 8 лет в мобильной разработке, 12+ запущенных маркетплейсов. В этой статье разберём, как избежать таких сценариев и построить приложение, которое конвертирует. Однажды мы переписали форму публикации для крупного классифайда: после внедрения динамической формы и параллельной загрузки фотографий конверсия в публикацию выросла на 40%. Получите консультацию — оценим ваш проект.
Публикация объявления: минимум трения
Форма объявления — категория → заполнение полей → фото → цена → публикация. Поля зависят от категории (для авто — VIN, пробег, год; для недвижимости — площадь, этаж, тип сделки). Динамическая форма: при смене категории поля перерисовываются. JSON Schema от сервера → генерация формы на клиенте (избавляет от хардкода полей в коде).
Загрузка фото — самое узкое место. Пользователь хочет загрузить 10 фото. Сравним подходы:
| Подход | Время загрузки 10 фото (5 MB each) | Нагрузка на сеть | UX |
|---|---|---|---|
| Последовательная | ~50 сек | Низкая | Плохой: ждать |
| Параллельная (10 потоков) | ~8 сек | Высокая | Средний: может упасть |
| Оптимальная (3 потока + компрессия) | ~12 сек | Умеренная | Отличный: прогресс-бары |
Компрессия перед загрузкой: UIImage.jpegData(compressionQuality: 0.8) или Bitmap.compress(Bitmap.CompressFormat.JPEG, 80, stream). Фото с камеры современного смартфона — 8–15 MB в RAW. После компрессии — 1–2 MB. Для объявления достаточно, трафик экономится в 5–10 раз. 90% объявлений с фотографиями привлекают на 60% больше просмотров.
Определение геолокации объявления
Местоположение объявления — либо текущие координаты, либо выбор на карте, либо ввод адреса с геокодингом. Для продажи вещей обычно достаточно района/города без точного адреса — это важно для безопасности продавца. Точные координаты нужны для недвижимости и авто.
Почему поиск по карте — must-have для классифайда?
Пользователи хотят видеть объявления рядом с домом. Поиск по карте — ключевой сценарий для недвижимости, авто и услуг. 50% пользователей активно используют карту для поиска. Как это работает: пользователь двигает карту, объявления обновляются по видимой области. onCameraIdle (Google Maps) / onMapIdle (Mapbox) → запрос с bbox текущего viewport. Маркеры на карте, tap — карточка объявления. Для недвижимости важна кластеризация: в одном доме 50 объявлений. Кластер показывает количество, при zoom-in раскрывается в отдельные маркеры или список.
Полнотекстовый поиск и фильтрация
Для поиска используем Elasticsearch или Typesense. Typesense быстрее в индексации и проще в конфигурации, но Elasticsearch гибче для сложных запросов. Клиент отправляет запрос, дебаунс 300 мс на поле ввода. Поиск с учётом морфологии (русский язык — «машина» находит «машины», «машиной») — через Elasticsearch с russian analyzer или Typesense с Russian stemmer. Фильтры цены — range slider. RangeSlider в Material 3 (Android) / кастомный GeometryReader-based range slider (SwiftUI или библиотека RangeSeekSlider). Значения debounce перед запросом.
Как настроить чат продавца и покупателя?
Чат без обмена номерами телефона — ключевая фича доверия. Firebase Realtime Database или Supabase Realtime — быстрый способ запустить чат с real-time сообщениями. Для серьёзного масштаба — собственный WebSocket-сервер или Stream Chat SDK. Сравним решения:
| Решение | Затраты на старте | Масштабируемость | Время внедрения |
|---|---|---|---|
| Firebase | Низкие (pay-as-you-go) | Ограниченная (до ~1M msg/day) | Дни |
| Supabase | Низкие | Хорошая (до ~10M msg/day) | Дни |
| WebSocket сервер | Средние (аренда VPS) | Высокая (любая нагрузка) | Недели |
| Stream Chat SDK | Высокие (подписка) | Очень высокая | Дни |
Структура сообщений: { id, conversation_id, sender_id, text, image_url, timestamp, read_at }. read_at для статуса прочтения. Push-уведомление при новом сообщении — FCM/APNs data push с conversation_id в payload для deep link в конкретный чат.
Фото в чате — пользователь отправляет фото. Сжатие до 800–1200px, upload в S3/Cloudflare R2, сообщение содержит URL. При отображении — lazy loading с progressive placeholder. Антиспам: ограничение скорости сообщений (rate limiting на сервере), блокировка пользователя.
Модерация объявлений
На стороне клиента: предупреждение при вводе телефона/почты в тексте объявления (обход контактов через платформу). Кнопка «Пожаловаться» на каждом объявлении — попап с причиной жалобы, отправка на сервер. Автоматическая модерация фото: Google Cloud Vision API SafeSearch — проверка на explicit контент. Интегрируется в upload pipeline на сервере, клиент просто получает статус объявления (pending_moderation / approved / rejected).
Монетизация и продвижение
«Поднять объявление», «VIP-статус», «выделить» — классические платные опции. In-app purchase через StoreKit 2 / Google Play Billing или одноразовая оплата через Stripe. Правильно настроенная монетизация окупает затраты на разработку. Обратитесь к нам для расчета монетизационной модели.
Что входит в работу
- Архитектура и проектирование базы данных (категории, схемы, индексы)
- Разработка мобильного приложения (iOS/Android/Flutter)
- Интеграция поискового движка (Elasticsearch/Typesense)
- Реализация чата и push-уведомлений
- Модерация контента (автоматическая + ручная)
- Настройка CI/CD для публикации в App Store и Google Play
- Доступ к исходному коду и документация
- Обучение команды заказчика
- Поддержка 2 недели после релиза
Процесс работы
- Аналитика — изучаем конкурентов, собираем требования, определяем MVP.
- Проектирование — создаём архитектуру, JSON Schema категорий, прототип форм.
- Реализация — итеративная разработка: публикация → поиск → карта → чат → модерация → монетизация.
- Тестирование — нагрузочное тестирование (до 10000 объявлений в минуту), UI-тесты, регресс.
- Деплой — публикация в сторах, настройка мониторинга, передача проекта.
Сроки и стоимость
Ориентировочный срок разработки — от 14 до 24 недель. Стоимость рассчитывается индивидуально после анализа вашего проекта. Мы гарантируем стабильность под нагрузкой и соответствие App Store Review Guidelines. Наша команда — опытные Flutter-разработчики с многолетним стажем. Свяжитесь с нами — получите консультацию и предварительную оценку вашего проекта.







