Cree orientación personalizada

En esta página, se describen los pasos generales que debes seguir para crear una guía personalizada como parte de una experiencia de navegación personalizada.

Este proceso difiere del que se describe en Cómo navegar por una ruta de la siguiente manera:

  • Primero, estableces una sesión de navegación de forma independiente y obtienes una instancia del navegador a través de la sesión en lugar de llamar al controlador de vista.
  • Configuras un objeto de escucha de eventos para responder y administrar eventos de navegación.
  1. Crea una sesión de navegación con GMSNavigationService.createNavigationSession y comienza la navegación con una llamada a setDestination. Cuando la experiencia de navegación de Google invoca al navegador a través de la vista del mapa de navegación, GMSNavigationServices controla y recibe un flujo de eventos de una sesión de navegación independientemente de una instancia de la IU. Esto significa que puede ejecutarse sin una IU o pasarse a cualquier experiencia basada en IU. Con este enfoque, la sesión de navegación se sigue ejecutando en tu app hasta que se quita la última referencia.
  2. Establece un proveedor de ubicación ajustado a la ruta. Usa el proveedor de ubicación si quieres que tu app tenga una supervisión de ubicación continua, como cuando muestra una vista de navegación con un punto azul a lo largo de la ruta.
  3. Implementa el protocolo GMSNavigatorListener para configurar un objeto de escucha de instrucciones paso a paso detalladas. Luego, transforma esa información en lo que sea necesario para tu experiencia de navegación personalizada. Por ejemplo:
    1. Implementa campos de solo texto para transmitir instrucciones de forma sencilla a la pantalla.
    2. Diseña y propaga campos para tu propia IU.
  4. Configura un simulador de navegación. Esto es necesario para el desarrollo y las pruebas.

Crea una sesión de navegación independiente

En el siguiente fragmento de código de la demostración, se muestra la navegación establecida de forma independiente del controlador de vista. Luego, el código agrega un mapa general configurado para mostrar la ubicación actual ajustada a la ruta.

// 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;

Cómo pasar la navegación de una experiencia personalizada a la experiencia de Google

En este fragmento de código, se ilustra cómo tu app puede permitir que el usuario ingrese a la experiencia de navegación de Google desde una experiencia de navegación personalizada. En este fragmento de código, también se muestra cómo tu app realiza esta transición mientras comparte el mapa.

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

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

`…`

[`_mapView enableNavigationWithSession:_navigationSession`];