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 Cómo navegar por una ruta de la siguiente manera:

  • Primero, establece una sesión de navegación de forma independiente y obtén una instancia de 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 a los eventos de navegación y administrarlos.
  1. Crea una sesión de navegación con GMSNavigationService.createNavigationSession y, luego, inicia la navegación con una llamada a setDestination. Mientras que la experiencia de navegación de Google invoca al navegador a través de la vista de mapa de navegación, el GMSNavigationServices controla y recibe un flujo de eventos de una sesión de navegación independientemente de una instancia de IU. Esto significa que puede ejecutarse sin una IU o pasarse a cualquier experiencia basada en la IU. Con este enfoque, la sesión de navegación sigue 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 tu app tenga una supervisión continua de la ubicación, 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 instrucciones detalladas paso a paso implementando el 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 transmitir instrucciones sobre cómo llegar a un lugar de forma sencilla.
    2. Diseña y completa 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 una vista general del mapa configurada 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`];