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 proceso descrito 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.
- Crea una sesión de navegación con
GMSNavigationService.createNavigationSession
y comienza la navegación con una llamada asetDestination
. 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 IU. Esto significa que se puede ejecutar sin una IU o pasar 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. - 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.
- Implementa el protocolo
GMSNavigatorListener
para configurar un objeto de escucha de instrucciones detalladas sobre cómo llegar. Luego, transforma esa información en lo que sea necesario para tu experiencia de navegación personalizada. Por ejemplo:- Implementa campos de solo texto para transmitir instrucciones de forma sencilla a la pantalla.
- Diseña y propaga campos para tu propia IU.
- 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;
Pasa la navegación de una experiencia personalizada a la experiencia de Google
En este fragmento de código, se muestra 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. Este fragmento de código también muestra cómo tu app realiza esta transición mientras compartes el mapa.
`UIButton *button = [UIButton buttonWithType:UIButtonTypePlain`];
[`button addTarget:self action:@selector(didTapEnterGoogleNavigationButton:)
forControlState:[_directionsButton addTarget:self`];
`…`
[`_mapView enableNavigationWithSession:_navigationSession`];