.NET Fest: полная программа конференции на сайте. Присоединяйся к самому большому .NET ивенту
×Закрыть

Как в KeepSolid разработали LezGo — навигатор для совместных автопутешествий

В рубрике DOU Labs мы приглашаем IT-компании делиться опытом собственных интересных разработок и внутренних технологических инициатив. Вопросы и заявки на участие присылайте на editors@dou.ua.

Привет! Меня зовут Антонина, я Project Manager в компании KeepSolid. Недавно мы выпустили новое приложение LezGo — навигатор для совместных автопутешествий, который разработала команда студентов нашей IT-интернатуры. В статье я расскажу о том, как создавался проект, с какими сложностями столкнулись студенты при разработке, как решали их и что у нас в итоге получилось.

Как появилась идея создания LezGo

LezGo — это бесплатное приложение для совместных автопутешествий, которое позволяет создавать маршрут и делиться им с друзьями, чтобы оставаться на одной волне во время путешествия.

Идею придумал наш офис-менеджер 3 года назад, когда в одном из автопутешествий на четырех машинах мы постоянно синхронизировали свои действия и созванивались, чтобы узнать, кто где пропал. Уверены, многие сталкивались с подобными неудобствами и поймут, о чем речь. В то время эта проблема была очень актуальной: тогда еще не было режима навигации для нескольких человек ни в Google Maps, ни в других популярных приложениях, таких как Roadtrippers, Waze или Google Trips. Командная навигация и удобство приложения должны были стать нашим главным конкурентным преимуществом.

В результате проект LezGo стартовал трижды в разных группах студентов интернатуры. До этого все заканчивалось ничем: студенты то теряли интерес, то не могли завершить проект из-за нехватки навыков. Мы с руководством компании уже не ждали, что приложение обойдет конкурентов, и не строили коммерческих иллюзий. Нашей целью стало дойти до конца и выпустить продукт, несмотря на все сложности во время разработки. Наша третья попытка оказалась удачной.

Процесс разработки

В сентябре 2017 года после успешного прохождения основной программы летней интернатуры 6 junior-разработчиков (1 iOS, 2 Android и 3 back-end) приступили к проекту Trip Navigator (тогда LezGo назывался так). Рабочий процесс был организован просто: мы выделили для ребят рабочие места, описали продукт, и они приступили к работе.

К каждому из джунов был прикреплен ментор — более опытный разработчик из нашей компании, который проверял код, помогал студенту безболезненно погрузиться в проект и получить экспертизу. Совместными усилиями в апреле 2018 года ребята подготовили к релизу первую версию с минимальным функционалом:

  • основной экран приложения — карта, на которой отображалось текущее местоположение пользователя (с использованием GPS);
  • два режима работы — режим автора маршрута и режим участника;
  • возможность создать 2 типа маршрута: первый — от точки текущего местоположения до заданной пользователем точки, второй — из точки A в точку B (возможны и промежуточные пункты, например маршрут с 10 остановками в конкретных местах);
  • возможность пригласить на маршрут участников (доступно автору маршрута);
  • для маршрутов с участниками на карте — отображение пина автора маршрута с иконкой автора, пинов участников;
  • перестроение маршрута при отклонении от заданного;
  • синхронизация между устройствами (списка контактов, маршрутов, данных пользователя);
  • отправка писем и уведомлений об определенных событиях (например, пригласить/удалить участника, напомнить об инвайте, завершить маршрут и т. д.).

Однако в итоге было принято решение отложить релиз до лета, чтобы добавить в него новые фичи.

Процесс разработки приложения совпал с выездными тимбилдингами и разными «покатушками» офисным составом. Во время таких путешествий коллеги тестировали приложение и оставляли фидбэк для его улучшения, предлагали пути развития продукта. Так, например, со временем появилась возможность выбирать из предопределенного списка причину остановки водителя, оповещать о ней каждого участника групповой навигации, указывая расстояние и расчетное время до него. Или режим Follow me: для автора маршрут всегда строится по навигации, которую он сам же создал, а для приглашенных пользователей — по ведущему.

Техническая реализация

iOS-версию писали на языках Objective-C и Swift, а версию для Android — на Java и Kotlin. Для back-end использовали PHP и JavaScript, так как это достаточно быстродейственные и относительно дешевые (по стоимости внедрения и сопровождения) языки программирования. JS, конечно, уже ушел далеко вперед от PHP, но JS мы использовали только для создания сокет-серверного сервиса для постоянного общения клиентского приложения и сервера (следовательно, мы использовали не все возможности языка, а лишь конкретную библиотеку). PHP в этом списке — наш любимчик. Это основной язык нашего back-end-отдела.

В качестве фреймворков мы выбрали:

  • Firebase — для push-уведомлений (cloud messaging);
  • Socket.IO — как общую библиотеку;
  • Retrofit, Gson, AndroidX — в качестве библиотек для Android;
  • Phalcon — для back-end-разработки. Этот фреймворк позволяет быстро начать разрабатывать, поскольку имеет готовый набор методов. Выбран он был из-за своего быстродействия в сравнении с другими фреймворками (например, Yii, Laravel, Symfony). Позволяет выигрывать в производительности.

PHP и Phalcon отлично подходили для LezGo по нескольким критериям:

  1. У них низкий порог вхождения, что дало быстрый старт для разработки.
  2. Если писать на других языках, они были бы тяжелее в сопровождении другими сотрудниками, следовательно, в случае ухода сотрудника потребовалось бы больше времени на знакомство с проектом.

Также для работы мы использовали:

На iOS:

  • Cocoa Pods — менеджер зависимостей для проектов на Swift и Objective-C;
  • Xcode — для работы со сторибордами.

На Android:

  • Gradle — как инструмент сборки проекта;
  • Android Studio — IDE от Google.

Back-end:

  • PhpStorm — IDE oт JetBrains. Используется для back-end-разработки всех наших проектов.

Общение с сервером происходит через REST, WebSocket. Для архитектуры проектирования мы взяли MVC, Apple MVC и Android MVP.

Наш QA-отдел тестировал приложение с помощью manual testing, но часть функционала LezGo также покрыта unit-тестами.

Сложности при разработке

Нанимая джуниоров, мы четко понимали, что работа с ними потребует много усилий: составление детальных ТЗ, частые встречи, постоянный мониторинг и проверка каждого этапа работы. Все это отнимало время опытных специалистов, которые параллельно работали над реализацией флагманских продуктов компании. Но мы расценивали это как вложение в будущее: сегодня студент отнимает наше время — завтра приносит прибыль.

Главной сложностью/препятствием в разработке LezGo стало изменение ценовой политики сервиса Google Maps. Изначально мы планировали использовать Google Place API для поиска мест и Google Directions для построения маршрута. Но в июне 2018 года нас ждал неприятный сюрприз: компания Google подняла цены на коммерческое использование своих карт в 14 раз и уменьшила лимит бесплатного использования почти в 30 раз. Это было слишком дорого, и команда была вынуждена искать альтернативное решение. Большую часть приложения пришлось переписывать.

После тщательного изучения конкурентов и ресерча мы остановились на HERE Maps. Среди его главных преимуществ — возможность полноценно использовать пошаговую навигацию в режиме офлайн и большое количество карт разных регионов.

Под формат данных HERE Maps пришлось переписать большую часть приложения: мы применили другую логику работы с картами в клиентах, переделали back-end и полностью изменили логику навигации. В финальной версии мы также добавили/реализовали новый функционал:

  • еще один режим Follow me — следование за автором маршрута;
  • ограниченный режим без авторизации (доступен только просмотр карты и маршрута);
  • типы остановок для участников маршрута (заправка, обед, техническая неисправность и т. д.);
  • выбор мест по траектории маршрута: вдоль выбранного маршрута пользователь может отмечать отели, АЗС, кафе, интересные места/достопримечательности.

Как работает итоговая версия LezGo

LezGo отлично подойдет любителям автопутешествий. Они являются нашей главной целевой аудиторией. Приложение предназначено как для индивидуальных, так и для совместных поездок на двух-пяти-семи (и даже больше) автомобилях.

Работает LezGo по такой схеме:

Релиз в App Store и планы на будущее

Несмотря на высокие требования и ряд препятствий в ходе разработки, несколько недель назад приложение LezGo появилось в App Store. Для нас это подтверждение того, что с решением набирать и учить студентов мы не промахнулись, а для интернов это стало шансом реализовать себя.

В настоящее время работа над LezGo временно приостановлена, так как сейчас мы задействуем ребят для работы на более приоритетных продуктах компании. Однако уже во втором полугодии мы планируем возобновить разработку LezGo и начать воплощать новые идеи, которых накопилось уже немало. Одна из них — офлайн-карты. Выезжая из «зоны комфорта», можно будет скачивать всю карту или маршрут частично и пользоваться полноценным приложением, не заморачиваясь покупкой местной сим-карты и ценами на интернет в роуминге.

Над геймификацией мы тоже думаем. Нам интересно добавить в приложение элемент соревнования. Кто проехал больше километров? У кого был самый насыщенный маршрут? Чьи фото из поездки собрали больше всего лайков? Как будет работать система поощрений, бонусов и плюшек для самых активных пользователей, пока не обсуждали. Но это в планах.

Вдобавок мы хотим реализовать в приложении ряд функций:

  • возможность создавать маршрут поездки онлайн в веб-версии приложения;
  • чек-лист вещей, которые нужно взять в дорогу, а также рекомендации, которые варьируются в зависимости от места поездки. Например, путешествующим в район N приложение порекомендует взять с собой лопату, палатку, дождевик, спрей от комаров, теплую одежду и т. д.;
  • список предлагаемых/популярных дорожных маршрутов в районе с возможностью планировать поездку на будущее;
  • поиск компании для поездок через приложение (возможность задать начало и конец маршрута, указать время и найти людей, которые также заинтересованы в данном маршруте); также можно будет получать уведомления, когда кто-то запланирует открытую поездку по интересующему вас маршруту.
LinkedIn

8 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

Апка схоже цілком класна, і хлопці думаю did a good job ©, та з настроїв громади, як бачите, поки не прийде якийсь адекватний HR, Brand Manager чи як їх там, і не візьме на себе відповідальність за завтики і зашквари, та не почне щось фіксати, всім далі буде по цимбалах

Сидит чувак в баре, накатил рюмочку и сам с собой разговаривает.
— Я посадил тысячи деревьев, но меня никто не называет Джон-садовник
— Я построил сотни мостов, но меня никто не называет Джон-строитель
— Я проехал много-много миль на грузовике, но меня никто не называет Джон-дальнобойщик
— Но стоило мне один раз трахнуть эту чёртову овцу!!!

"К чему это я, ах да!«© Лена Миро. Сейчас рынок работника и будет таким ещё минимум год. Не заплатили дизайнеру за четыре дня работы, написали пафосный пост о том, что дескать в праздники работать кошерно, а кто не работает — ленивые уроды. Ффсё, вы можете хоть золотом обмазаться с ног до головы, всё равно вас будут помнить как жадных чудаков на букву «М».

Вроде-бы копеечный доход на фоне фирмы, шо там наработают работники в праздник, а четыре дня работы зажать так вообще зашквар, но нет — нужно сэкономить по мелочи и намотать кучу виртуальных фекалий на воротник репутации.

В айти-сфере полным-полно задротов, которым кроме компа и работы более ничего не интересно. Так что им пофиг на те 4 дня, они и в Новый год готовы выйти.
А кто работает чтобы жить, те уже давно на фриланс перешли, как ты вот например.

Почему ваш шеф перестал писать феерические статьи про полезность работы на выходных?

Не очень понял, можно ливидеть местоположение остальных участников. Если это есть, то расскажите формат отображения этой информации, если нет — как тогда приложение решает проблему

мы постоянно синхронизировали свои действия и созванивались, чтобы узнать, кто где пропал.

Если участник принял приглашение на маршрут и автор стартовал движение по маршруту, приложение отображает пины участников с их местоположением на карте. Кроме пина также отображается попап с информацией: email или имя участника (если участник сохранил имя в приложении); расстояние до участника; время, за которое можно преодолеть указанное расстояние до участника; статус участника (offline/online, остановка или в движении).

Так что там с выходными на гос. праздники?

Зашел сюда только что бы посмотреть на такие комменты :)

Подписаться на комментарии