Cree orientación personalizada

En esta página, se describen los pasos de alto nivel 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 Navega por una ruta de la siguiente manera:

  • Primero, establece una sesión de navegación de forma independiente y obtén una instancia del navegador a través de la sesión, en lugar de llamar al controlador de vista.
  • Configura un objeto de escucha de eventos para responder a eventos de navegación y administrarlos.
  1. Crea una sesión de navegación mediante 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 de mapa de navegación, GMSNavigationServices controla y recibe un flujo de eventos de una sesión de navegación de forma independiente de una instancia de IU. Esto significa que puede ejecutarse sin una IU o pasar a cualquier experiencia basada en IU. Con este enfoque, la sesión de navegación continúa ejecutándose en tu app hasta que se quita la última referencia.
  2. Establece un proveedor de ubicación ajustada a la ruta. Usa el proveedor de ubicación si deseas que la app supervise la ubicación de forma continua, como cuando se muestra una vista de navegación con un punto azul a lo largo de la ruta.
  3. Configura un objeto de escucha para obtener una guía detallada paso a paso mediante la implementación del protocolo GMSNavigatorListener. 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 una transmisión de pantalla simple de las instrucciones sobre cómo llegar.
    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.

Cómo crear 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 una descripción general del mapa 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 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. 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`];