Preguntas frecuentes

Detalles del producto

Problemas

Red

Datos

Personalización de la IU

Enrutamiento

Simulador

Workflows

Servicios de movilidad

Detalles del producto

Tu app debe implementar un cuadro de diálogo con el aviso de las Condiciones del Servicio del SDK de Navigation que cada conductor debe aceptar. Este cuadro de diálogo le brinda al conductor la oportunidad de aceptar las Condiciones del Servicio. Se proporciona un archivo de texto de los términos con el SDK de Navigation.
En Android, usa el método NavigationApi.showTermsAndConditionsDialog para mostrar el cuadro de diálogo que contiene los términos.
En iOS, llama a GMSNavigationServices.showTermsAndConditionsDialogIfNeededWithCompanyName.
Todos los idiomas compatibles con Google Maps para dispositivos móviles están disponibles automáticamente para el SDK de Navigation. Un dispositivo tiene un idioma del sistema predeterminado, y una app no puede cambiar ese parámetro de configuración. Sin embargo, la app tiene acceso a más de 70 idiomas.

Sí. En Android, una vez iniciado, LocationListener continúa ejecutándose en segundo plano. Tu app sigue ajustando la posición a la ruta y mantiene el rumbo.

En iOS, para seguir recibiendo actualizaciones de ubicación de posición y rumbo en segundo plano, implementa la alineación con la ruta y establece allowsBackgroundLocationUpdates en YES.

Sí. Cuando se crea o cambia una ruta, RouteChangeListener proporciona polilíneas.

No, el SDK de Navigation no requiere que Google Maps para dispositivos móviles esté instalado en el dispositivo.
No, el SDK de Navigation no proporciona esta funcionalidad en este momento.
Sí. La dirección del tráfico está disponible y se muestra de forma predeterminada.

Problemas

En Xcode 12, las apps no se compilan correctamente para el simulador. ¿Cómo puedo solucionar este problema?

Para solucionar este problema, abre la configuración de compilación de tu proyecto de Xcode y agrega arm64 a Excluded Architectures solo para compilaciones de "Simulador de iOS".

Para obtener más información, consulta la siguiente conversación sobre StackOverflow.

No se carga GMSMapView.

Si no se carga GMSMapView, haz lo siguiente:

  • Verifica que NavSDK esté habilitado en Cloud Console.
  • Si el SDK de Nav está instalado, pero tu proyecto no usa las APIs del SDK de Nav, quítalo de tu objeto binario.

Red

¿Cómo maneja el SDK de Navigation la conectividad deficiente?
El SDK de Navigation almacena en caché la ruta de cada viaje de forma previa. La información almacenada en caché previamente incluye información de enrutamiento para 15 a 20 minutos y alternativas de ruta en caso de que el conductor se desvíe de la ruta. El SDK de Navigation aproxima la posición con el GPS y los sensores del dispositivo.
¿Está disponible un modo sin conexión?
No, el SDK de Navigation no ofrece un modo sin conexión en este momento. Sin embargo, el SDK proporciona información almacenada en caché previamente para un viaje.

Datos

¿Puedo recuperar todas las paradas o destinos de un viaje antes de comenzar la ruta?

Sí. En Android, para recuperar las instrucciones sobre cómo llegar a una ruta, llama a Navigator.getRouteSegments().

En iOS, llama a GMSNavigator.routeLegs(read).

¿La guía de ruta paso a paso está disponible al comienzo de una ruta?
Sí. El SDK de Navigation proporciona una lista de segmentos de ruta. Además, el conductor puede deslizar la tarjeta de instrucciones en el encabezado para ver cada maniobra.
¿Cómo se comunica la hora de llegada estimada a los usuarios de la app?

En Android, sigue estos pasos para proporcionar información de ETA a los usuarios de la app:

  1. Recupera el tiempo y la distancia de todos los puntos de referencia con Navigator.getTimeAndDistanceList().
  2. Reenvía esta información a la aplicación cliente como lo haces actualmente para la hora de llegada estimada del conductor.

En iOS, sigue estos pasos para proporcionar información de ETA a los usuarios de la app:

  1. Recupera las piernas del recorrido con Navigator.getRouteSegments().
  2. Llama a GMSNavigator.timeToNextDestination para cada tramo del viaje.
  3. Reenvía la información de la hora a la aplicación cliente como lo haces actualmente para la hora de llegada estimada del conductor.
¿Se puede usar RoadSnappedLocationProvider para obtener la ubicación fija actual del conductor si la navegación no está en primer plano?

Sí. En Android, RoadSnappedLocationProvider se ejecuta en segundo plano de forma predeterminada.

En iOS, para mantener la navegación en segundo plano, implementa el objeto de escucha para GMSRoadSnappedLocationProviderListener y establece la propiedad allowsBackgroundLocationUpdates en TRUE.

¿El SDK de Navigation admite el geovallado?

No. En el contexto de la navegación, remainingTimeOrdistanceChangeListener tiene una ventaja sobre un geovallado simple. Es posible que la geovalla no tenga en cuenta la geometría de la ruta y que no esté centrada en el punto exacto al que se dirige el conductor.

Puedes aproximar esta funcionalidad con remainingTimeOrdistanceChangeListener.

  1. Establece el umbral para determinar la frecuencia de las devoluciones de llamada.
  2. Verifica la distancia restante hasta el destino.

Por ejemplo, si estableces el umbral en 100 m, recibirás una devolución de llamada cuando la distancia al destino cambie en 100 m. A medida que disminuye la distancia, puedes actualizar este umbral a un valor más pequeño y recibir devoluciones de llamada más frecuentes. Luego, inspecciona la distancia restante para determinar si estás lo suficientemente cerca de la ubicación de partida o destino.

En iOS, implementa el objeto de escucha GMSNavigatorListener.didUpdateRemainingDistance para administrar la distancia entre las notificaciones.

¿Puedo inhabilitar las notificaciones cuando la app de Navigation está en segundo plano?

Sí. En Android, usa Navigator.setHeadsUpNotificationEnabled para controlar las notificaciones. Este método tiene un argumento booleano. FALSE inhabilita las notificaciones; TRUE las habilita.

En iOS, inhabilita la notificación en segundo plano para las ubicaciones ajustadas a la ruta. Para ello, configura GMSRoadSnappedLocationProvider.allowsBackgroundLocationUpdates como NO.

Para inhabilitar el procesamiento en segundo plano de otras notificaciones de ubicación, llama a GMSNavigator.sendsBackgroundNotifications(NO).

Personalización de la IU

¿Puedo asignar un código de color a la mejor opción de ruta?
No. Por el momento, no se admite la codificación por colores de una opción de ruta específica.
¿El SDK de Navigation puede mostrar la hora de llegada estimada al destino final?

Sí. En Android, usa los siguientes métodos:

  1. Recupera el tiempo y la distancia de todos los puntos de referencia con Navigator.getTimeAndDistanceList().
  2. Oculta la hora de llegada estimada del punto de referencia actual con NavigationFragment.setEtaCardEnabled(false).
  3. Renderiza la hora de llegada estimada al destino final.

En iOS, usa lo siguiente:

  1. Llamar a GMSNavigator.routeLegs(read)
  2. Con el último tramo, llama a GMSNavigator.timeToNextDestination.
  3. Oculta la hora de llegada estimada del punto de referencia actual con MSMapView.settings.navigationFooterEnabled=NO a FALSO.
  4. Renderiza la hora de llegada estimada al destino final.
¿Cómo puedo ocultar las actualizaciones de la hora de llegada estimada?

Puedes inhabilitar las tarjetas de ETA con los siguientes métodos:

  • En Android, usa navigationView.setEtaCardEnabled(false).
  • En iOS, usa GMSMapView.settings.navigationFooterEnabled=NO.
¿Qué personalizaciones de la IU están disponibles para las tarjetas de encabezado y pie de página?

En Android, usas StylingOptions para configurar el diseño del color de fondo. Para ocultar o mostrar el encabezado y el pie de página, usa las funciones miembro setHeaderEnabled y setFooterEnabled de NavigationFragment.

En iOS, usa GMSMapView.settings.navigationHeaderPrimaryBackgroundColor para establecer el diseño del color de fondo. Para ocultar o mostrar el encabezado y el pie de página, usa las propiedades navigationFooterEnabled y navigationHeaderEnabled de GMSUISettings.

Enrutamiento

¿Puedo proporcionarle una ruta específica a un conductor o quitar las rutas alternativas?
No. De forma predeterminada, se proporcionan varias rutas, y la más rápida tiene prioridad. Para afectar la ruta predeterminada, agrega preferencias, como "evitar autopistas y peajes", a tu solicitud. La adición de puntos de referencia también afecta la ruta.
¿Puedo mostrarle al usuario de la app una etiqueta diferente para el destino que la ubicación de destino predeterminada?

Sí. En Android, crea un Marker con un título personalizado para el destino y la latitud o longitud. El SDK de Navigation muestra el título personalizado y las coordenadas en NavigationMap.

En iOS, creas y muestras un GMSMarker para el destino.

¿Puedo usar el SDK de Navigation para hacer un seguimiento de las desviaciones de una ruta definida?

Sí. En Android, usa Navigator.setRouteChangedListener para recibir notificaciones cuando cambia una ruta o se recomienda una nueva:

  1. Registra un objeto de escucha que verifique la posición del dispositivo a lo largo de la ruta con el método Navigator.setRouteChangedListener.
  2. Agrega código al controlador de eventos de devolución de llamada, onRouteChanged:
    • Envía un mensaje al usuario de la app con la hora de llegada estimada y la información de la distancia actualizadas.
    • Hacer un seguimiento de la ubicación del dispositivo
    • [Opcional] Agrega otra funcionalidad que requiera tu app para controlar cuando el conductor salga de la ruta prescrita.

En iOS, usa GMSNavigator y sus objetos de escucha para recibir notificaciones cuando cambia una ruta o se recomienda una nueva:

  1. En el controlador de vista del mapa, implementa el protocolo GMSNavigatorListener y el protocolo GMSRoadSnappedLocationProviderListener.
  2. Implementa GMSNavigatorListener.navigatorDidChangeRoute.
  3. Accede a la ruta nueva con las propiedades routeLegs y currentRouteLeg de GMSNavigator.
¿El conductor puede salir de la navegación sin completar la ruta?

Sí. En Android, llama al método Navigator.stopGuidance() para detener la navegación.

En iOS, llama a GMSNavigator.clearDestinations.

Simulador

¿El simulador admite cambios de ruta?

Sí. En Android, llama a simulateLocationsAlongNewRoute para simular un viaje que incluya un cambio de ruta. El método simulateLocationsAlongExistingRoute ignora los cambios en la ruta existente.

En iOS, usa GMSLocationSimulator.simulateAlongNewRouteToDestinations para simular un viaje que incluya un cambio de ruta. Si no prevés ningún cambio de ruta, puedes usar GMSLocationSimulator.simulateLocationsAlongExistingRoute o GMSLocationSimulator.simulateAlongNewRouteToDestinations.

Workflows

¿Cómo rechazo la notificación después de cerrar una actividad que contiene un fragmento de navegación?

La notificación de navegación permanece visible durante la navegación, cuando se cierra la actividad. Cuando el vehículo llega al destino, la navegación se detiene y la notificación desaparece.

Para controlar los clics en la notificación, usa Navigator.startGuidance(intent resumeIntent). resume intent se activa cuando el usuario de la app hace clic en la notificación. Por lo general, se llama a Navigator.startguidance(getIntent()) desde la actividad principal, que recuerda la actividad cuando el usuario de la app hace clic en la notificación.

Servicios de movilidad

¿En qué se diferencia el uso del SDK de Navigation para los clientes de los servicios de movilidad?

Los servicios de movilidad de Google Maps Platform ofrecen una colección de APIs y SDKs para ayudar a satisfacer las necesidades empresariales de las empresas de transporte y logística. En el caso de los clientes de los servicios de movilidad, el SDK de Navigation suele usarse junto con servicios relacionados para la optimización de rutas, el envío, el seguimiento de tareas, las estadísticas de flotas y mucho más. El SDK de Navigation también se factura de manera diferente para los clientes de los servicios de movilidad. Para obtener más información, consulta la documentación de Servicios de movilidad.

Actualmente, los productos de movilidad solo están disponibles para clientes seleccionados. Comunícate con tu representante de ventas para obtener más información.

¿Cómo puedo saber si soy cliente de los servicios de movilidad?
Si no estás seguro de si estás implementando el SDK de Navigation como cliente de los Servicios de movilidad, busca una llamada a ReportBillableEvent en tu código. Solo los clientes de los servicios de movilidad deben llamar al método ReportBillableEvent.

¿Cómo se factura el SDK de Navigation para los clientes de los Servicios de movilidad?
En el caso de los clientes de Mobility Services, la facturación y los precios del SDK de Navigation dependen del acuerdo de servicio que tengas con Google Maps Platform. Para obtener información sobre cómo asegurarte de que tu implementación de Servicios de movilidad se facture correctamente, consulta Validación de facturación. Para obtener más información sobre la facturación de los servicios de movilidad, comunícate con tu representante de ventas.

¿Qué APIs del SDK de Navigation solo deben usar los clientes de los servicios de movilidad?

Existen varias APIs en el SDK de Navigation que solo están destinadas a los clientes de Servicios de movilidad, a los que Google les factura por transacción. Si no eres cliente de los Servicios de movilidad, los siguientes métodos no son operativos:

Si soy cliente de los Servicios de movilidad, ¿puedo usar una implementación del SDK de Navigation que no sea de los Servicios de movilidad?

Sí, los clientes de los servicios de movilidad pueden usar implementaciones del SDK de Navigation tanto de los servicios de movilidad como de otros. Sin embargo, solo puedes usar un tipo de implementación en una app a la vez. También debes crear un proyecto, una cuenta de facturación y una clave de API de Google Cloud nuevos, independientes de los que usas con tu implementación de Servicios de movilidad. Para obtener más información, consulta la descripción general de la configuración del SDK de Navigation.

Para obtener más información sobre el uso de una implementación del SDK de Navigation que no sea de Servicios de movilidad, incluida la migración de una app de un tipo de implementación a otro, comunícate con tu representante de cuenta de Google.

Nota: Si actualmente no eres cliente de los Servicios de movilidad y te interesa obtener más información sobre la colección de APIs y SDKs de los Servicios de movilidad, comunícate con el equipo de ventas de Google Maps Platform.