Разработка мобильного приложения для кинотеатра
Приложение кинотеатра — это билетный сервис с жёсткими требованиями к надёжности: когда пользователь в очереди у кассы выбирает место на блокбастер в день премьеры, он не будет ждать загрузку схемы зала 5 секунд и терпеть «ошибку сети».
Схема зала и выбор мест — самая нагруженная часть
Интерактивная схема зала с 200+ местами — это не «нарисовать кружочки в Flutter». Проблемы:
Race condition при одновременной покупке. Два пользователя выбрали место A7 и одновременно нажали «купить». Если не реализовать временную блокировку места, оба оплатят — и придёт два человека с одинаковым билетом. Решение: SELECT FOR UPDATE SKIP LOCKED на PostgreSQL при резервировании, место переходит в статус reserved на 10 минут, потом — confirmed после оплаты или available при таймауте.
Реалтайм обновление занятости. Пока один пользователь выбирает место, другие тоже смотрят схему. Обновлять через polling каждые 5 секунд — жестоко для сервера при высокой нагрузке. WebSocket или Server-Sent Events: при изменении статуса места сервер пушит событие всем клиентам, смотрящим схему этого сеанса.
Рендеринг схемы. На Flutter: CustomPainter для отрисовки зала с поддержкой zoom (InteractiveViewer) и tap-определения конкретного места через hit-testing. Для больших залов (IMAX, 500+ мест) — Canvas-рендеринг с виртуализацией видимых рядов, иначе FPS падает при скролле.
Билеты и офлайн
QR-код билета должен работать офлайн. Пользователь купил билет — QR сохраняется в Hive локально. Валидация QR на входе: сканер в кинотеатре проверяет подпись (HMAC-SHA256 или JWT), не требует интернета для каждого прохода. Это важно: если на входе упадёт интернет в момент премьеры — сотни людей не должны застрять.
PKpass / Google Wallet: добавление билета в Apple Wallet или Google Wallet — конкурентное преимущество. PKpass-файл генерируется сервером, подписывается Apple Certificate, передаётся через url_launcher для открытия в Wallet. Удобство: билет появляется в уведомлениях при приближении к кинотеатру через геофенс.
Программа лояльности
Накопительные баллы за покупки — стандарт. Серверная логика: 1 рубль = 1 балл, оплата баллами до 50% стоимости билета. На клиенте: отображение баланса и применение при оплате через promo_code или loyalty_points параметр в payment request.
Стек
Flutter + BLoC. cached_network_image для постеров фильмов (не грузить каждый раз). Оплата: Stripe / ЮKassa с поддержкой Apple Pay и Google Pay — нативный sheet, без редиректа в браузер. Firebase Analytics для воронки: сеанс выбран → место выбрано → оплата начата → оплата завершена. Pushes: FCM для напоминания о сеансе за 2 часа.
Интеграции с кассовым ПО
Реальные кинотеатры работают с КИНОПЛАН, 1С:Кинотеатр, Cinema3000. У каждого своя API для синхронизации расписания и состояния мест. Без этой интеграции — двойная продажа между кассой и приложением. Уточняйте используемую систему на старте проекта.
Сроки
MVP (расписание, схема зала, оплата, QR-билеты): 12–16 недель. С лояльностью, Apple/Google Wallet, реалтайм обновлением мест и интеграцией с кассовым ПО: 18–24 недели. Стоимость зависит от сложности интеграции с существующей кассовой системой.







