Migración de SDK para consumidores de Android

El SDK de consumidores para Android te permite crear apps de transporte compartido mediante una arquitectura modular. Puedes utilizar las partes de la API que quieras usar para tu app en particular e integrarlas con tus propias APIs. Las APIs del SDK del consumidor para diferentes funciones se encapsulan en módulos separados.

Si tu app de transporte compartido usa versiones anteriores del SDK para consumidores, deberás actualizarla para usar esta arquitectura modular. En esta guía de migración, se describe cómo actualizar tu app.

Descripción general

La arquitectura modular del SDK de consumidor presenta un objeto Session que contiene el estado de la interfaz de usuario. En versiones anteriores del SDK para consumidores, las apps pasaban de un estado a otro. Con esta arquitectura modular, puedes crear un objeto de sesión y tener la opción de mostrarla en el mapa. Si no se muestran sesiones, el mapa está en blanco. Ya no hay un estado "vacío" o "inicializado".

Un objeto de sesión representa una única instancia de uso del ciclo de vida de un módulo. Las sesiones son los puntos de acceso a las APIs de módulos. Por ejemplo, una sesión de Viajes compartidos sigue un solo viaje. Interactúas con el objeto Session para supervisar el viaje.

Un objeto de sesión se asocia con un tipo de módulo. El comportamiento del objeto de sesión está vinculado al ciclo de vida del objeto que se usó para inicializarlo.

Supongamos que creas un objeto TripModel para realizar un seguimiento de TRIP_A. Si intentas obtener un objeto TripModel para TRIP_A nuevamente, obtendrás el mismo objeto TripModel. Para realizar un seguimiento de TRIP_B, obtén un objeto TripModel nuevo.

Estados de la sesión

Una sesión puede tener uno de varios estados:

  • Una sesión creada se representa con un objeto de sesión. Para crear una sesión, llama al método create. Por ejemplo:

    JourneySharingSession sessionA = JourneySharingSession.createInstance(TripModelA)
    
  • Una sesión iniciada se registra para las actualizaciones de los datos y los valores de los elementos de la interfaz de usuario. Para iniciar una sesión, llama al método start. Por ejemplo:

    sessionA.start()
    
  • La sesión que se muestra comienza automáticamente. Muestra los elementos de la interfaz de usuario y los actualiza en respuesta a las actualizaciones de datos. Para mostrar una sesión, llama al método showSession. Por ejemplo:

    ConsumerController.showSession(sessionA)
    
  • Una sesión detenida deja de actualizar sus datos y los elementos de la interfaz de usuario. Para detener una sesión, llama al método stop. Por ejemplo:

    sessionA.stop()
    

Cómo usar solo datos y componentes de la interfaz de usuario

Puedes crear una app de transporte compartido con los componentes solo de datos o las APIs de los elementos de la interfaz de usuario que proporciona On-demand Rides & Deliveries Solution.

Cómo usar componentes solo de datos

Para crear una app de transporte compartido con componentes que solo usan datos, haz lo siguiente:

  • Inicializa un objeto ConsumerApi.
  • Obtén el objeto TripModelManager de ConsumerApi.
  • Comienza a supervisar un viaje con TripModelManager para recibir un objeto TripModel.
  • Registra devoluciones de llamada en el objeto TripModel.

En el siguiente ejemplo, se muestra cómo usar componentes de solo datos:

TripModelManager tripManager = ConsumerApi.getTripModelManager();
TripModel tripA = tripManager.getTripModel("trip_A");
tripA.registerTripCallback(new TripModelCallback() {})

Cómo usar las APIs de elementos de interfaz de usuario

Usa el objeto ConsumerController para acceder a las APIs del elemento de la interfaz de usuario de la solución On-demand Rides and Deliveries.

Para crear una app de transporte compartido con las APIs del elemento de la interfaz de usuario de la solución On-demand Rides and Deliveries, haz lo siguiente:

  • Inicializa el objeto ConsumerApi.
  • Obtén un objeto TripModelManager del objeto ConsumerApi.
  • Obtén un objeto TripModel del TripModelManager que realiza un seguimiento de un viaje.
  • Agrega ConsumerMap[View/Fragment] a la vista de la aplicación.
  • Obtén un objeto ConsumerController de ConsumerMap[View/Fragment].
  • Proporciona el objeto TripModel al controlador para obtener un objeto JourneySharingSession.
  • Usa el controlador para mostrar JourneySharingSession.

En el siguiente ejemplo, se muestra cómo usar las APIs de interfaz de usuario:

TripModelManager tripManager = ConsumerApi.getTripModelManager();
TripModel tripA = TripModelManager.getTripModel("trip_A");

// Session is NOT automatically started when created.
JourneySharingSession jsSessionA = JourneySharingSession.createInstance(tripA);
JourneySharingSession jsSessionB = JourneySharingSession.createInstance(tripB);

// But a session is automatically started when shown.
ConsumerController.showSession(jsSessionA);
ConsumerController.showSession(jsSessionB); // hides trip A; shows trip B.
ConsumerController.hideAllSessions(); // don't show any sessions

// Unregister listeners and delete UI elements of jsSessionA.
consumerController.showSession(jsSessionA);
jsSessionA.stop();
// Recreates and shows UI elements of jsSessionA.
jsSessionA.start();

Cambios en el código de la arquitectura modular

Si tu app de transporte compartido usa versiones anteriores del SDK para consumidores, la arquitectura modular actualizada requerirá algunos cambios en tu código. En esta sección, se describen algunos de esos cambios.

Permisos de ubicación

El SDK de consumidores ya no requiere los permisos FINE_LOCATION.

Supervisión de viajes

La arquitectura modular actualizada requiere cambios de código para los usuarios de la capa de datos y de la interfaz de usuario.

En versiones anteriores, un usuario de capa de datos podía controlar la supervisión de viajes con el siguiente código:

ConsumerApi.initialize()
TripModelManager manager = ConsumerApi.getTripManager()
manager.setActiveTrip("trip_id")
manager.registerActiveTripCallback(new TripModelCallback() {})

Con la arquitectura modular, un usuario de capa de datos usaría el siguiente código:

ConsumerApi.initialize()
TripModelManager manager = ConsumerApi.getTripManager()
TripModel tripA = TripModelManager.getTrip("trip_A")
tripA.registerTripCallback(new TripModelCallback() {})

En versiones anteriores, un usuario de interfaz de usuario podía controlar la supervisión de viajes con el siguiente código:

ConsumerApi.initialize()
TripModelManager manager = ConsumerApi.getTripManager()
manager.setActiveTrip("trip_id")

ConsumerController controller = consumerGoogleMap.getConsumerController();
consumerController.startJourneySharing()

Con la arquitectura modular, un usuario de la interfaz de usuario usaría el siguiente código:

ConsumerApi.initialize()
TripModelManager manager = ConsumerApi.getTripManager()
TripModel tripA = TripModelManager.getTripModel("trip_A");

ConsumerController controller = consumerGoogleMap.getConsumerController();
JourneySharingSession jsSessionA = JourneySharingSession.createInstance(tripA);
controller.showSession(jsSessionA);

Volver a centrar el mapa

La vista o el fragmento de mapa ya no se acercan a la ubicación del usuario durante la inicialización cuando no hay una sesión activa. Seguirá usando el zoom automáticamente para mostrar la sesión activa de Uso compartido del recorrido, siempre y cuando esté habilitada la función AutoCamera. AutoCamera está habilitada de forma predeterminada.

En versiones anteriores, usabas el siguiente código para centrar la cámara en la sesión activa actual:

consumerController.centerMapForState()

Si usas la arquitectura modular, debes usar el siguiente código:

CameraUpdate cameraUpdate = consumerController.getCameraUpdate()
if (cameraUpdate != null) {
   googleMap.animateCamera(cameraUpdate);
   // OR googleMap.moveCamera(cameraUpdate);
}

Para inhabilitar la función Cámara automática en versiones anteriores, debes usar el siguiente código:

consumerController.disableAutoCamera(true);

Si usas la arquitectura modular, debes usar el siguiente código:

consumerController.setAutoCameraEnabled(false);

Personalización

Se quitó del mapa el BAF personalizado de la solución On-demand Rides and Deliveries.

BAF personalizado

También se quitaron los métodos asociados con el BAF:

ConsumerController.isMyLocationFabEnabled()
ConsumerController.setMyLocationFabEnabled()