Коротко
-
01
Клиент
Компания занимается разработкой навигационных сервисов
-
02
Задача
Получать дополнительную прибыль с продукта
-
03
Решение
Выпустить SDK для разработки мобильных приложений на базе сервисов компании
-
04
Результаты
- Разработали фреймворк на Objective-C для нативного программирования под iOS
- Выпустили демоприложение, чтобы компания могла показывать возможности SDK клиентам
- Задействовали команду из 6 человек, проект занял около 4 месяцев
Компания зарабатывает на картах и навигации
Американская компания разрабатывает сервисы для автомобильной навигации. Ее навигационную систему устанавливают на бортовые компьютеры выпускаемых в США автомобилей Ford, Chrysler, Dodge, Jeep, Toyota и других.
Навигационная система помогает водителю в пути:
- получает данные со спутника GPS и отрисовывает карту местности в реальном времени;
- определяет местоположение автомобиля и направление движения;
- помогает найти кафе, магазин или заправку и прокладывает оптимальный маршрут с учетом пробок, дорожных работ и платных дорог;
- ведет по маршруту: показывает расстояние до пункта назначения, текущую скорость, предупреждает о ситуации на дороге, скоростных ограничениях, подсказывает, когда нужно перестроиться в другой ряд или повернуть;
- имеет голосового помощника, который озвучивает навигационные инструкции: например, говорит «через 300 метров поверните налево» или «ограничение скорости 40 км/ч».
В дополнение к бортовой навигационной системе компания выпустила пользовательское приложение. Если в машине нет встроенного навигатора, водитель скачивает приложение и пользуется навигационными сервисами на смартфоне. Или подключает приложение через интернет к мультимедийной системе в автомобиле и выводит навигатор на ее экран.
Задача: получать дополнительную прибыль с продукта
Компания хочет получать дополнительный доход, продавая карту и навигационные сервисы другим компаниям. Например, таксопарку нужно приложение для таксистов. В нем должна быть карта и навигатор, чтобы таксисты не терялись в городе и выбирали оптимальные маршруты. Таксопарку невыгодно разрабатывать карту самостоятельно. Дешевле и проще купить готовую и интегрировать ее в приложение с помощью фреймворка для разработки мобильных и веб-приложений.
Решение: разработка SDK для мобильных приложений
Чтобы карту было удобно интегрировать, ее нужно упаковать в SDK. Это набор библиотек — фреймворк для разработки мобильных приложений. С ним идет документация, где описано, как встроить его в код. Разработка SDK экономит ресурсы: программистам не надо разрабатывать с нуля, можно вставить готовый код — и в приложении появятся карта и навигационные сервисы.
Разработка SDK может понадобиться любым компаниям, у которых есть системы со сложной логикой вроде карты. Например, система учета продаж, управления промышленным оборудованием, регистрации страховых случаев. Их тоже можно упаковать SDK и продавать как отдельный продукт: фреймворк для разработки мобильных и веб-приложений на основе этих систем.
Чтобы встроить SDK в приложение, нужно:
- Оплатить ключ, получить документацию. В ней по шагам описано, как подключить SDK, активировать и настроить функции: отображение самой карты, построение маршрута, автомобильную навигацию.
- Подключить SDK к приложению. В iOS для этого нужно прописать версию SDK в podfile и добавить ключи в. plist file.
- Следуя инструкциям из документации, вставить в код приложения библиотеки — готовый код каждой функции. Их можно подключать по отдельности: сервису такси, например, понадобятся все, а приложению сети кофеен только карта, чтобы посмотреть адреса кофеен.
- Настроить индивидуальный стиль карты. Например, можно выбрать цвет дорог, зданий, нанести на карту заправки, автомойки.
За разработкой SDK под iOS компания обратилась в OrbitSoft. Заказчик сформулировал техническое задание. Нам предстояло адаптировать код оригинальной карты для программирования под Apple-девайсы, чтобы разработчики могли легко перенести навигационные сервисы в свои приложения.
Проектом занималась команда из 6 человек: 3 разработчика, QA, он же тимлид, архитектор и проджект-менеджер. Разработка заняла около 4 месяцев.
Разработали фреймворк на Objective-C для внедрения карты в iOS-приложения
Оригинальная карта написана на С++. Это универсальный, высокопроизводительный язык, который подходит для сложных, нагруженных систем, таких как нейронные сети, браузеры, видеоигры. Но С++ не подходит для нативной мобильной разработки.
Нативные приложения пишут на родном языке платформы: тогда они выглядят привычно для пользователей и получают доступ к таким функциям, как управление камерой, сенсорными жестами. Для iOS родные языки — это Swift и Objective-C.
Если в нативное iOS-приложение внедрить SDK на С++, оно его просто не увидит — карта не будет работать. Чтобы приложение понимало карту, ее нужно перевести на его язык. Для этого есть два способа:
- полностью переписать SDK на языке платформы;
- обернуть С++ в нативный код.
Переписывать все функции карты — это долго и дорого. Поэтому мы выбрали второй вариант: для библиотеки на С++ написали интерфейс на Objective-C. Приложение «общается» с оболочкой на Objective-C, а внутри идет вызов методов C++. Благодаря обертке мы сэкономили время на разработку и сделали карту понятной для нативных приложений.
Язык большинства современных iOS-приложений — это Swift. Поэтому мы предусмотрели встроенную конвертацию. Пользователь SDK не видит С++, он выбирает для интеграции тот язык, на котором пишет приложение: Objective-C или Swift.
При переводе функций карты на язык платформы мы учитывали особенности реализации. Например:
- В iOS используется инструмент UIView. Это прямоугольная область на экране, которая служит для отрисовки карты и обработки жестов — движений пальцев пользователя на сенсорном экране. Каждый жест нужно отдельно подтянуть в карту и обработать. В других операционных системах для этого существуют другие инструменты.
- В карте есть озвучка дорожных событий: например, голосовой помощник сообщает пользователю «через 200 метров поверните направо». Мы использовали встроенный в iOS синтезатор речи, но сначала настроили его неправильно: создавали объект заново для каждого сообщения. Во время тестирования оказалось, что сообщения, идущие подряд, накладываются друг на друга, сливаясь в непонятную кашу.
У нас было много идей, как решить проблему. Например, создать очередь событий для сообщений. В итоге оказалось достаточно хранить в памяти объект синтезатора все время работы программы, не пересоздавая его. Он сам умеет произносить сообщения последовательно. Нам пришлось поискать ответ, но мы решили проблему.
Особенности платформы нужно знать и использовать по максимуму, чтобы раскрыть все ее возможности и избежать костылей. Тогда в продукте не будет багов, а пользователям будет удобно с ним работать.
Выпустили приложение для демонстрации возможностей SDK
Мы сделали демонстрационное приложение, чтобы компания могла показать потенциальным клиентам возможности библиотек. Клиент может запустить его и посмотреть, как выглядит карта, какие есть функции, как работает навигация. Демоприложение позволяет клиентам «пощупать» сложный продукт, понять его ценность и принять решение о покупке, а разработчикам — заглянуть в реализацию и понять, как она работает.
Возможности SDK:
- Реалистичная отрисовка карты. При большом приближении видно, как течет вода в реках, можно рассмотреть отдельные улицы, дома и достопримечательности. Визуальные эффекты плавно уходят в туман за пределами видимого участка карты.
- Параметры визуального отображения карты. Можно настроить внешний вид дорог, зданий, автомобильного трафика, проложенного маршрута, условных обозначений на карте и тысячи других параметров.
- Поиск объектов. Благодаря интеграции с поисковым модулем на карте можно искать кафе, магазины, парковки, заправки, банкоматы — более 10 категорий объектов. При поиске по категориям поверх карты рисуются отметки — аннотации. Их внешний вид можно настроить, можно их закрепить — например, отметить на карте рестораны своей сети.
- Построение маршрута. Система просчитывает все возможные варианты и предлагает до четырех подходящих маршрутов. Для каждого рассчитывается время в пути и стоимость. Можно применить фильтры, чтобы отсеять нежелательные варианты — например, грунтовые или платные дороги.
- Навигация:
- информация о дорожной ситуации в реальном времени: подсказывает разрешенный скоростной режим, населенный пункт и трассу, по которой движется автомобиль, где пробка или дорожные работы;
- пошаговое сопровождение на выбранном маршруте: расстояние до поворота, название следующей улицы, выход со скоростной магистрали — больше 20 типов маневров с озвучкой на более чем 20 языках.
В демоприложении системные сообщения выводятся поверх карты. Пользователь SDK может установить свой синтезатор голоса, настроить удобное графическое отображение подсказок и уведомлений.
Технические параметры. Разработчик может отрегулировать параметры карты по умолчанию: какой участок карты будет открыт при загрузке приложения, какой будет наклон карты, направление камеры, масштаб.
Интеграция с сервисами. Пользователи SDK могут добавить в приложение интеграцию с любыми сторонними сервисами. Например, в оригинальном навигационном приложении компании есть интеграция с платежными системами, магазинами, заправками, порталом с отзывами на местные кафе и рестораны. Водитель может найти поблизости кофейню с лучшим эспрессо, заказать пиццу не отрываясь от вождения или оплатить бензин не выходя из машины.
Telegram
WhatsApp
+7 499 321-59-32
contact@orbitsoft.com