SDK de Nav: modo sin interfaz gráfica

Introducción

El SDK de Navigation (SDK de Nav) proporciona una función de indicaciones paso a paso de primer nivel que puede ser muy útil para los clientes y los conductores, en especial los conductores nuevos o los que no conocen la región. Sin embargo, hay casos de uso específicos en los que las empresas no quieren que los conductores quiten la vista de la ruta con la IU de navegación paso a paso, pero sí quieren hacer un seguimiento de las ubicaciones de los vehículos y escuchar los eventos relacionados con la ruta que están siguiendo. Un ejemplo son los conductores de camiones, en especial si transportan materiales peligrosos. Es posible que otras empresas que realizan entregas con diferentes modalidades, como caminar distancias cortas, tampoco requieran la navegación paso a paso, lo que ahorraría batería del dispositivo.

Alcance

En este documento, se describe cómo las empresas pueden ocultar el mapa de navegación (vista) del SDK de Nav y seguir aprovechando todas las funciones del SDK de Nav en relación con el seguimiento de la ubicación, las suscripciones a eventos y las devoluciones de llamada. Los datos capturados del SDK de Nav en modo sin encabezado se pueden usar para mejorar la capacidad de hacer un seguimiento de los vehículos y comprender las ETA con mayor precisión, lo que, en última instancia, genera transparencia y eficiencia.

El SDK de Navigation es una biblioteca nativa para Android o iOS que se agrega a la app para el conductor. En el contexto de la movilidad, es responsable de lo siguiente:

  • Obtener ubicaciones ajustadas a la ruta desde la app que la ejecuta Las ubicaciones ajustadas a la ruta son más precisas que FusedLocationProvider (FLP) de Android, ya que usan la red de rutas de Google para ajustar las ubicaciones al tramo de ruta más cercano, lo que hace que las ETA y otra información de FLP sean mucho más precisas.
  • Experiencia paso a paso que permite a los conductores ir de un punto A a un punto B de manera eficiente, teniendo en cuenta el tráfico en tiempo real y otras restricciones de la ruta.
  • Se activan eventos según el progreso de la ruta, la ubicación, la velocidad, etcétera, a través de objetos de escucha de eventos y devoluciones de llamada registradas.

Experiencia predeterminada

Cuando los clientes implementan el SDK de Nav, se supone que necesitan la función de indicaciones paso a paso. Por eso, la documentación del SDK de Navigation (Android y iOS) proporciona instrucciones para implementar el SDK de Navigation con la navegación paso a paso habilitada.

En Android, la renderización del mapa paso a paso en la app se logra con un SupportNavigationFragment o un NavigationView, mientras que en iOS es un GMSMapView. Estos elementos de la IU agregan el mapa interactivo y la IU de navegación paso a paso a tu app.

En la siguiente sección, comparamos el SDK de Nav predeterminado con el código habilitado paso a paso y el código del SDK de Nav sin encabezado para Android y iOS, y destacamos los cambios necesarios.

Solución

Android

En Android, este es el código Java que se incluye como parte de la app de ejemplo del SDK de Navigation.

@Override
@SuppressLint("MissingPermission")
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);

   // Obtain a reference to the NavigationFragment
   setContentView(R.layout.activity_nav_fragment);
   mNavFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.navigation_fragment);

Como puedes ver, la vista apunta al diseño que se debe usar para dibujar la experiencia de navegación y, en este caso, se crea un SupportNavigationFragment en lugar del NavigationView.

Para que el SDK de Navigation se inicie en modo sin encabezado, simplemente debemos quitar esas dos instrucciones. Si la idea es alternar entre el modo sin interfaz gráfica y el modo con interfaz gráfica (navegación activa), se puede usar una variable para determinar si se debe usar el modo sin interfaz gráfica, por ejemplo:

Boolean mHeadless = true;

Luego, se puede usar más adelante, de la siguiente manera:

@Override
@SuppressLint("MissingPermission")
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);

   // Obtain a reference to the NavigationFragment
   if(!mHeadless) {
       setContentView(R.layout.activity_nav_fragment);
       mNavFragment =
               (SupportNavigationFragment)
                       getSupportFragmentManager().findFragmentById(R.id.navigation_fragment);
   }

La variable mHeadless se puede vincular a un componente de la IU (es decir, un botón de activación) que habilitará o inhabilitará el modo sin encabezado según corresponda.

alt_text alt_text
El SDK de Navigation se ejecuta con la navegación activa (sin interfaz gráfica) La misma app, pero ahora con el SDK de Navigation ejecutándose en modo sin interfaz gráfica

Como puedes ver en el ejemplo de la derecha, la navegación del SDK de Nav se ejecuta en segundo plano, pero la experiencia de navegación paso a paso está inhabilitada.

iOS

En iOS, el modo sin encabezado se puede realizar muy fácilmente agregando el siguiente parámetro de configuración durante la inicialización de MapView: \

mapView.isHidden = true


Por ejemplo:

  /// The main map view.
  private lazy var mapView: GMSMapView = {
    let mapView = GMSMapView(frame: .zero)
    mapView.isHidden = true /// Make it headless!
    mapView.isNavigationEnabled = true
    mapView.settings.compassButton = true
    mapView.delegate = self
    return mapView
  }()

Así se vería: la pantalla dependerá de la forma en que se implemente la IU, y la captura de pantalla solo sirve para ilustrar el efecto de ocultar el elemento mapView:

alt_text alt_text
La navegación activa se está ejecutando en

App de ejemplo para iOS

La misma app en modo sin interfaz gráfica

Consideraciones sobre la implementación

Como el modo sin encabezado no es más que ocultar el mapa de navegación de la pantalla, solo se guarda el tiempo de pantalla, lo que genera más tiempo de batería en el dispositivo. Sin embargo, como el SDK de Nav seguirá ejecutándose, las actualizaciones de ubicación y todas las devoluciones de llamada de eventos se activarán normalmente, por lo que no hay efectos secundarios al usar esta configuración.

Conclusión

En este documento, se muestra la flexibilidad del SDK de Navigation y lo que podemos lograr en diferentes sistemas operativos, teniendo en cuenta sus restricciones. También permite que los clientes personalicen su experiencia de conducción para evitar distracciones y mejorar la seguridad.

Recursos adicionales

Si las notificaciones deben inhabilitarse durante la navegación por los motivos mencionados anteriormente, esto también se puede lograr. Consulta Cómo modificar las notificaciones paso a paso en el SDK de Nav.