ЯНДЕКС ПУТЕШЕСТВИЯ
Туризм и отдых
Россия, Москва
IOS, Android
Февраль 2023
В 2020 году «Яндекс» объединил «Авиабилеты», «Расписания», «Автобусы», «Отели» и «Туры» в единый портал в вебе — «Яндекс Путешествия». Естественное развитие этой истории — создать мобильное приложение, которое улучшает пользовательский опыт за счет преимуществ смартфонов: мобильности, нативных и быстрых интерфейсов и т. д.
Для первой версии приложения были выбраны «Авиабилеты» и «Отели». С этой задачей CTO «Яндекс Путешествий» Лев Орехов и обратился в Doubletapp летом 2021 года.
Мы написали приложение полностью на SwiftUI. Это было рискованное, но очень обдуманное и дальновидное решение. Потому что хотелось двигаться в сторону новых технологий, и приложение «Путешествий» стало отличной площадкой для эксперимента. И, конечно, помимо всех плюсов в виде скорости разработки и входа в разработку, отличного симбиоза с Combine, перспективности, мы столкнулись еще и со сложностями.
По нескольким причинам архитектура получилась гибридная: с одной стороны сначала мы использовали известный и вроде бы очевидный в случае реактивного программирования MVVM, с другой — в какой-то момент эта архитектура начала стрелять нам в ноги. И пришлось, используя все преимущества SwiftUI, переходить на подход Unidirectional Data Flow и архитектуру со стейт-машиной.
И к такой архитектуре существующие решения навигации были не готовы, только позже вышла возможность отделять навигацию от UI-слоя — то, что нам было так необходимо для различных кастомных переходов. Пришлось пробовать писать что-то свое, и в итоге нашли библиотеку FlowStacks, реализующую паттерн Coordinator. Совместили расширенный ее вариант со стейт-машиной и получили навигацию, которой было уже удобно и реально пользоваться для тех кейсов, которые были прописаны у нас в дизайне.
Конечно, было бы идеально сделать минимальной поддерживаемой версией iOS 16, чтобы исключить все проблемы и не придумывать велосипеды с навигацией, но мы начали разрабатывать приложение до ее выхода, плюс для больших продуктов с широкой аудиторией необходимо было поддерживать более низкие версии. И, как у любого здорового проекта, использующего новый стек, с поддержкой низких версий iOS возникли проблемы. Изначально минимальной поддерживаемой версией был iOS 13, но, посчитав все риски и оценив стоимость ресурсов, которые пойдут на отладку багов и поддержание этой версии, мы смогли убедить менеджмент поднять таргет до 14-й версии iOS.
Еще мы столкнулись с необходимостью с нуля писать большие, тяжелые, но часто используемые элементы, которые не совсем удобно реализованы в текущих решениях для SwiftUI и для которых мало примеров в виде third-party библиотек. Однако благодаря очень мощной команде получилось справиться со всеми сложностями, нашлись люди, которые были готовы полностью погрузиться в процесс написания сложных элементов.
Опыт с «Яндекс Путешествиями» показал нам, что SwiftUI — перспективный и мощный фреймворк, который уже можно использовать, но всегда нужно быть готовыми к возможным рискам. В целом мы остались довольны выбором, заработали высокую экспертизу в SwiftUI, дотошно задокументировали свой опыт, научились обходить трудности и писать код так, чтобы все было наглядно, понятно и работало без багов. Ну и, кроме этого, на «Путешествиях» удалось попробовать несколько интересных библиотек (например, для логирования или снепшот тестирования), которые мы думаем использовать у себя в практиках.
Как происходит поиск и покупка авиабилетов? Через приложение пользователь выбирает город и аэропорт, дату поездки, количество пассажиров и класс перелета. При выборе даты рядом с числом указана минимальная цена билета. Путешественник может найти подходящий для себя вариант, например, только с багажом или без пересадок, задать временные границы вылета и прилета, аэропорт, авиакомпанию. На экране подробностей перелета можно выбрать тариф и перейти к одному из партнеров для бронирования и оплаты.
Похожим образом сделаны поиск и бронирование отелей: пользователь выбирает город, даты, количество гостей и видит предложения списком или на карте. Можно отфильтровать варианты по цене, рейтингу, звездности, наличию удобств, близости к центру, а также посмотреть жилье с бесплатной отменой брони.
На экране отеля отображается цена и кешбэк, фотографии, местоположение на карте, полный список удобств и отзывы. Дальше можно переходить к оплате, сохранить в избранное или поделиться ссылкой с друзьями через соцсети.
Если еще не решили, куда поехать, то сделайте селфи, загрузите его в приложение и узнайте, какой вариант отдыха соответствует вашему уровню усталости. Не стесняйтесь обращаться к мобильному помощнику — уверены, он сможет вас удивить.
В приложении можно авторизоваться с помощью единого аккаунта для всех сервисов «Яндекса». В профиле доступна актуальная информация о подписке «Яндекс Плюс». Также есть круглосуточная связь со службой поддержки: вы можете написать сообщение в чат по теме любого раздела «Яндекс Путешествий», а еще — отправить туда ссылку, прикрепить файл или скриншот и выразить чувства с помощью эмодзи (да, это важно).
Разработка нативных iOS- и Android-приложений была начата в сентябре 2021 года и продолжалась более полутора лет. Публичный релиз состоялся 28 февраля 2023 года.
Сейчас в приложении доступно более миллиона отельных номеров с фотографиями и реальными отзывами пользователей и перелеты от сотен авиакомпаний по всему миру.
Пользователи могут оплатить отели и авиабилеты картами российских банков. Подписчикам «Яндекс Плюса» доступен кешбэк до 20% от общей стоимости заказа, который можно потратить на будущие путешествия или в других сервисах «Яндекса»: например, оплатить поездку в «Такси» или съесть вкусную еду из «Лавки».
Что касается процесса разработки: у нас была настоящая техно-феерия! Мы поигрались с новыми хайповыми технологиями, тесно повзаимодействовали с командой «Яндекса», но подробнее об этом всем расскажем в нашем блоге на Хабре и подкасте ЧТНП
Doubletapp с удовольствием обсудит вашу задачу