Пользователь открывает приложение, вбивает станцию отправления — и видит цену билета на завтра. Клик — схема вагона с занятыми местами. Ещё клик — билет в PDF с QR-кодом, который работает без интернета. Так выглядит мобильное приложение для ж/д билетов, которое мы разрабатываем. За плечами 30+ проектов и опыт работы с транспортными API: Tutu.ru, УФС, Экспресс-3. Рассказываю, как это сделать правильно.
Какие проблемы решаем
Интеграция с монолитными API. Экспресс-3 — legacy-система от РЖД с SOAP/XML, тормозит при пиковых нагрузках. Агрегаторы вроде Tutu.ru дают JSON за 200 мс, но требуют кэширования и обработки ошибок. Мы строим прослойку: ретраи с exponential backoff, фоллбэк на UFS при таймаутах.
Выбор места в вагоне. Купе, плацкарт, СВ — у каждого своя раскладка. Данные приходят как массив мест с координатами. Десериализация тяжёлых ответов (до 500 КБ) — узкое место. На iOS используем DispatchQueue.global(qos: .userInitiated), на Android — Dispatchers.IO.
Офлайн-доступ к билетам. После оплаты QR-код маршрутной квитанции хранится локально. На iOS — PDFKit, на Android — PdfRenderer. Push-уведомления через FCM/APNs при изменении расписания.
Как мы разрабатываем приложение для ж/д билетов
Процесс — от аналитики до деплоя. Используем современный стек: Swift 5.9 + SwiftUI (iOS) / Kotlin + Jetpack Compose (Android) или Flutter 3.x для кросс-платформы.
- Аналитика и прототип. Определяем API (Tutu.ru / УФС / Ticketcloud), рисуем экраны. Фиксируем логику возвратов и динамику цен.
- Проектирование. Разрабатываем схемы данных, роутинг, обработку ошибок. Настраиваем code signing и provisioning profile.
- Реализация. Пишем модули: поиск, выбор мест, оплата (StoreKit 2 / Google Billing 6), хранение билетов. Встраиваем deep linking (Universal Links / App Links) для перехода из пушей.
- Тестирование. TestFlight / Firebase App Distribution. Проверяем сценарии: прерванная оплата, возврат, слабый сигнал.
- Деплой. Публикуем в App Store и Google Play. Соблюдаем App Store Review Guidelines и Google Play Policy.
Пример из практики: для одного клиента интеграция с Tutu.ru API заняла 2 недели. Проблема — их end‑point не поддерживал batch‑запросы. Пришлось распараллелить вызовы через Combine (iOS) и coroutines (Android). Время ответа для 10 станций — 800 мс вместо 2 секунд.
Почему офлайн-доступ к билетам критичен?
Приложение должно работать в метро, в туннелях и в зонах с плохим покрытием. QR-код маршрутной квитанции генерируется на сервере, но сохраняется локально в PDF. Для рендера используем PDFKit на iOS и PdfRenderer на Android. Это гарантирует, что проводник считает билет даже при отключённом интернете. Дополнительно подписываем код с помощью push-уведомлений: при изменении расписания FCM/APNs доставляют короткий сигнал, и приложение обновляет закешированные данные при следующем подключении.
Сравнение API агрегаторов
| API | Формат | Скорость | Возвраты | Динамические цены |
|---|---|---|---|---|
| Tutu.ru | JSON | ~200 мс | Нет прямой поддержки | Да |
| УФС | XML | ~400 мс | Да | Да |
| Ticketcloud | JSON | ~300 мс | Да, комиссия 2% | Нет |
Tutu.ru быстрее в 2 раза — это критично для поиска с 10+ запросами.
Какие способы оплаты поддерживаются?
СБП (мгновенно, без комиссии), ЮKassa, ПСБ. Apple Pay через PKPaymentRequest, Google Pay через PaymentsClient. Без них конверсия падает на 20%. Выбор платежного провайдера влияет на скорость подтверждения: СБП даёт деньги на счёт за секунды, тогда как карточные транзакции могут занимать до 3 минут.
Сравнение способов оплаты
| Способ | Комиссия для пользователя | Скорость | Особенности |
|---|---|---|---|
| СБП | 0% | Мгновенно | Нет лимита на сумму |
| ЮKassa | 0-2% | До 1 минуты | Поддерживает карты и СБП |
| Apple Pay | 0% | 1-2 секунды | Требуется Face ID / Touch ID |
| Google Pay | 0% | 1-2 секунды | Требуется биометрия |
Как работают динамические цены?
В Экспресс-3 цена растёт по мере уменьшения мест. Показываем динамику в карточке поезда: если мест меньше определённого порога, подсвечиваем цену. Для точного расчёта используем API Tutu.ru или УФС с кэшированием на 5 минут.
А возврат билетов — как?
Возврат — отдельный API-вызов. Штраф: до 8 часов до отправления — полный возврат за вычетом сбора, менее 8 часов — 50% стоимости. Логику расчёта не реализуем на клиенте.
Что входит в разработку под ключ
- Документация по интеграции с выбранным API
- Исходный код приложения (iOS/Android)
- Сборка и публикация в App Store и Google Play
- Тестовый доступ через TestFlight/Firebase
- Обучение команды заказчика (2 часа онлайн)
- Поддержка 1 месяц после релиза
Почему выбирают нас
Опыт работы с транспортными API более 5 лет, выполнено 30+ проектов. Сертифицированные iOS и Android разработчики. Гарантируем соблюдение App Store Review Guidelines и Google Play Policy.
Сроки и стоимость
6–8 недель на приложение с поиском, выбором мест, оплатой, возвратом и историей поездок через агрегаторский API. В сжатые сроки можно уложиться за 5 недель, если API уже выбран. Стоимость рассчитывается индивидуально. Получите консультацию — оценим ваш проект за 1 день. Свяжитесь с нами, чтобы обсудить детали.







