Что такое пользовательская навигация?

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

Что такое пользовательская навигация?

  • Начать навигацию — вы создаете сеанс навигации . Как и в случае с навигацией Google, настраиваемая навигация по-прежнему включает в себя создание экземпляра навигации и настройку пункта назначения. Однако при использовании настраиваемой навигации этого можно добиться, сначала установив сеанс навигации с помощью GMSNavigationServices . Сеанс навигации — это объект, не являющийся пользовательским интерфейсом и несущий состояние, который может работать как с контроллером представления, так и без него.

    См. демо-версию: загрузка пакета Navigation SDK содержит демо-версию, которую можно запустить, чтобы увидеть пример навигации, которая переключается между пошаговыми указаниями посредством стандартной навигации на навигацию, показывающую только местоположение устройства, движущегося по дороге. полилиния.

  • Активная навигация — вы предоставляете . Вот еще одно ключевое различие между навигацией, предоставляемой Google, и пользовательской навигацией. Вместо передачи указаний встроенному диспетчеру событий Navigation SDK вы включаете пошаговую ленту и реализуете обработчики событий через GMSNavigatorListener . Это позволяет вашему интерфейсу реагировать на события, описанные в разделе «Прослушивание событий навигации» .

  • Завершите навигацию — вы предоставляете . Как и в случае с навигацией Google, пользовательская навигация также требует прекращения навигации способом, наиболее подходящим для работы приложения.

В следующей таблице описаны некоторые пользовательские сценарии навигации.

Пример сценария

Шаги высокого уровня

Вам необходимо предоставить только текстовые инструкции для водителя для небольших устройств, таких как двухколесные транспортные средства.

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

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

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

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

Настройте навигатор. Установите пункт назначения и получайте обновления местоположения. Интегрируйте Driver SDK в свое приложение. Подробные сведения см. в разделах «Начало работы с Driver SDK для поездок и доставок по требованию» или «Решение для парка последней мили» .

Создайте индивидуальное руководство

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

Этот процесс отличается от процесса, описанного в разделе «Навигация по маршруту», следующим образом:

  • Сначала вы устанавливаете сеанс навигации независимо и получаете экземпляр навигатора через сеанс, а не путем вызова контроллера представления.
  • Вы настраиваете прослушиватель событий для реагирования на события навигации и управления ими.

  1. Создайте сеанс навигации с помощью GMSNavigationService.createNavigationSession и начните навигацию с помощью вызова setDestination . Если навигация Google вызывает навигатор через представление навигационной карты, GMSNavigationServices управляет и получает поток событий из сеанса навигации независимо от экземпляра пользовательского интерфейса. Это означает, что он может работать либо без пользовательского интерфейса, либо передаваться любому интерфейсу на основе пользовательского интерфейса. При таком подходе сеанс навигации продолжает работать в вашем приложении до тех пор, пока из него не будет удалена последняя ссылка.
  2. Установите поставщика местоположений, привязанного к дорогам . Используйте поставщика местоположения, если вы хотите, чтобы ваше приложение постоянно отслеживало местоположение, например, при отображении представления навигации с синей точкой вдоль маршрута.
  3. Настройте прослушиватель для получения подробных пошаговых инструкций, реализовав протокол GMSNavigatorListener . Затем преобразуйте эту информацию во все, что необходимо для вашей пользовательской навигации. Например:
    1. Внедрите текстовые поля для простого показа направлений на экране.
    2. Создавайте и заполняйте поля для собственного пользовательского интерфейса.
  4. Настройте навигационный симулятор . Это необходимо для разработки и тестирования.

Создать независимый сеанс навигации

Следующие фрагменты кода из демонстрации показывают навигацию, установленную независимо от контроллера представления. Затем код добавляет обзорную карту, настроенную для отображения текущего местоположения с привязкой к дороге.

// Create the navigation session.

 _navigationSession = [GMSNavigationServices createNavigationSession];
 GMSRoadSnappedLocationProvider *roadSnappedLocationProvider =
     _navigationSession.roadSnappedLocationProvider;
 [roadSnappedLocationProvider startUpdatingLocation];
 GMSNavigator *navigator = _navigationSession.navigator;
 [navigator addListener:self];
 navigator.voiceGuidance = GMSNavigationVoiceGuidanceSilent;
 navigator.sendsBackgroundNotifications = NO;
 _navigationSession.started = YES;
​​ [navigator setDestinations:@[ destination ]
                   callback:^(GMSRouteStatus routeStatus) {
                      // …handle changes in route status.
                    }];

 // Add an overview map.
 _mapView = [[GMSMapView alloc] initWithFrame:CGRectZero];
 [self.mainStackView addArrangedSubview:_mapView];
 [self.mainStackView setNeedsLayout];
 _mapView.settings.compassButton = YES;
 _mapView.delegate = self;
 _mapView.myLocationEnabled = YES;
 _mapView.roadSnappedMyLocationSource = roadSnappedLocationProvider;

Передача навигации из пользовательского интерфейса в интерфейс Google.

Этот фрагмент кода показывает, как ваше приложение может позволить пользователю войти в интерфейс навигации Google из пользовательского интерфейса навигации. Этот фрагмент кода также показывает, как ваше приложение выполняет этот переход при совместном использовании карты.

`UIButton *button = [UIButton buttonWithType:UIButtonTypePlain`];

[`button addTarget:self action:@selector(didTapEnterGoogleNavigationButton:)
forControlState:[_directionsButton addTarget:self`];

`…`

[`_mapView enableNavigationWithSession:_navigationSession`];