¿Qué es la navegación personalizada?

Una experiencia de navegación personalizada puede implicar cualquier cosa, desde una app que elimina por completo la orientación de giro con la navegación solo como un proceso en segundo plano hasta una app que proyecta una guía altamente personalizada en una pantalla separada del dispositivo que ejecuta el navegador.

¿Qué es la experiencia de navegación personalizada?

  • Iniciar la navegación: crea una sesión de navegación. Al igual que con la experiencia de navegación de Google, una experiencia de navegación personalizada aún implica crear una instancia de navegación y configurar el destino. Sin embargo, con una experiencia de navegación personalizada, puedes lograrlo establecer primero una sesión de navegación con GMSNavigationServices. Una sesión de navegación es un objeto sin IU que tiene el estado y puede operar con un controlador de vistas o sin uno.

    Consulta la demostración: La descarga del SDK de Navigation contiene una demostración que puedes ejecutar para ver un ejemplo de una experiencia de navegación que alterna entre una guía paso a paso mediante la navegación estándar y una experiencia de navegación que muestra solo la ubicación del dispositivo que se mueve a lo largo de una polilínea de rutas.

  • Navegación activa: tú proporcionas Esta es otra diferencia clave entre una experiencia de navegación proporcionada por Google y una personalizada. En lugar de entregar orientación al administrador de eventos integrado del SDK de Navigation, debes habilitar el feed paso a paso e implementar controladores de eventos a través de GMSNavigatorListener. Esto permite que tu experiencia responda a los eventos descritos en Cómo detectar eventos de navegación.

  • Finaliza la navegación: tú debes proporcionarla. Al igual que con la experiencia de navegación de Google, la navegación personalizada también requiere que finalices la navegación de la manera más adecuada para la experiencia de la app.

En la siguiente tabla, se describen algunas situaciones de navegación personalizada.

Situación de ejemplo

Pasos de alto nivel

Debes proporcionar orientación al conductor en formato de texto para dispositivos pequeños, como vehículos de 2 ruedas.

Crea tu navegador y configura la guía paso a paso como un feed de datos para un dispositivo con pantalla pequeña mientras el navegador se ejecuta en el teléfono celular del conductor fuera de su vista inmediata. Consulta Habilita el feed de datos paso a paso.

Los conductores que usan tu app quieren una descripción general del mapa para la mayor parte de su recorrido, con una orientación mínima paso a paso para las calles de las ciudades.

Tu app debería permitir que los conductores ingresen y salgan de la experiencia de navegación de Google cuando lo necesiten, sin alternar la configuración del navegador para el destino y el modo de viaje.

Para clientes de Servicios de movilidad: A menudo, los conductores recorren rutas establecidas con un alto nivel de familiaridad y no necesitan ningún tipo de orientación, pero necesitas una forma de garantizar que tu sistema de administración de vehículos pueda administrar las entregas o los viajes.

Configura un navegador. Establece el destino y obtén actualizaciones de la ubicación. Integra el SDK de Driver a tu app. Para obtener más detalles, consulta Cómo comenzar a usar el SDK de Driver para On-demand Rides and Deliveries o Last Mile Fleet Solution.

Crear indicaciones personalizadas

En esta sección, se describen los pasos de alto nivel que debes seguir para crear orientación personalizada.

Este proceso se diferencia del descrito 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.
  • Configura 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 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, el GMSNavigationServices controla y recibe una transmisión de eventos de una sesión de navegación independientemente de una instancia de IU. Eso 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 según la ruta. Usa el proveedor de ubicación si quieres que tu app realice una supervisión continua de la ubicación, como cuando 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 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 una transmisión simple de instrucciones sobre cómo llegar en pantalla.
    2. Diseña y completa campos para tu propia IU.
  4. Cómo configurar 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 los siguientes fragmentos 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 precisa de 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 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 la forma en que 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`];