Как создать персонализированные рекомендации

На этой странице описаны основные шаги по созданию собственной навигации.

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

  • Сначала вы устанавливаете сеанс навигации независимо и получаете экземпляр навигатора через сеанс, а не путем вызова контроллера представления.
  • Чтобы реагировать на события навигации и управлять ими, настройте прослушиватель событий.
  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`];