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 primera clase que puede ser muy útil para los clientes y los conductores, en especial para los conductores nuevos o que no están familiarizados con la región. Sin embargo, hay casos de uso específicos en los que las empresas no quieren desviar la atención de los conductores 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 siguen. 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 que se habilite la función de indicaciones paso a paso, lo que ahorraría la duración de la batería del dispositivo.

Alcance

En este documento, se describe cómo las empresas pueden ocultar el mapa de Navigation (vista) del SDK de Nav y, aun así, beneficiarse de todas las funciones del SDK de Nav en lo que respecta al seguimiento de la ubicación, las suscripciones a eventos y las devoluciones de llamada. Los datos capturados del SDK de Nav en modo sin interfaz gráfica se pueden usar para mejorar la capacidad de hacer un seguimiento de los vehículos y comprender las horas de llegada estimadas con mayor precisión, lo que, en última instancia, genera transparencia y eficiencia.

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

  • Obtener ubicaciones ajustadas a la ruta de la app que la ejecuta (las ubicaciones ajustadas a la ruta son más precisas que FusedLocationProvider [FLP] de Android, ya que usa la red de rutas de Google para ajustar las ubicaciones al segmento de ruta más cercano, lo que hace que las horas de llegada estimadas y otra información de FLP sean mucho más precisas)
  • Experiencia de indicaciones paso a paso que permite a los conductores ir de manera eficiente del punto A al punto B teniendo en cuenta el tráfico en tiempo real y otras restricciones de ruta
  • Activar 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 Nav (Android y iOS) proporciona instrucciones para implementar el SDK de Nav con la función de indicaciones paso a paso habilitada.

En Android, la renderización del mapa de indicaciones paso a paso en la app se logra con SupportNavigationFragment o NavigationView, mientras que en iOS es 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 para indicaciones paso a paso con el código del SDK de Nav sin interfaz gráfica para Android y iOS, y destacamos los cambios necesarios.

Solución

Android

En Android, este es el código Java que forma parte de la app de ejemplo del SDK de Nav.

@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 de NavigationView.

Para que el SDK de Nav se inicie en modo sin interfaz gráfica, solo 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 o no, por ejemplo:

Boolean mHeadless = true;

Luego, se puede usar 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 interfaz gráfica según corresponda.

alt_text alt_text
SDK de Nav ejecutándose con navegación activa (modo sin interfaz gráfica desactivado) La misma app, pero ahora con el SDK de Nav 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 indicaciones paso a paso está inhabilitada.

iOS

En iOS, el modo sin interfaz gráfica se puede realizar con mucha facilidad si agregas 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
  }()

Observa cómo 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 mapView:

alt_text alt_text
Navegación activa ejecutándose en

app de ejemplo de iOS

La misma app en modo sin interfaz gráfica

Consideraciones de implementación

Como el modo sin interfaz gráfica no es más que ocultar el mapa de navegación de la pantalla, solo se guarda el tiempo de uso, 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 de forma normal, por lo que no hay efectos secundarios al usar esta configuración.

Conclusión

En este documento, se muestra la flexibilidad del SDK de Nav y lo que podemos lograr en diferentes sistemas operativos dadas sus restricciones. También permite a los clientes personalizar su experiencia de conductor para evitar distracciones y mejorar la seguridad.

Recursos adicionales

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