Migración de SDK para consumidores de Android

El SDK para consumidores de Android te permite crear apps de transporte compartido usando una arquitectura modular. Puedes usar las partes de la API que desees para usar en tu app en particular e integrarlos a tus propias APIs. El SDK para consumidores Las APIs de diferentes funciones se encapsulan en módulos separados.

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

Descripción general

La arquitectura modular del SDK del consumidor presenta un objeto Session que contiene el estado de la interfaz de usuario. En versiones anteriores del SDK para consumidores, las apps fluían entre estados. Con esta arquitectura modular, debes crear un objeto Session y tendrás la opción de mostrar la sesión en el mapa. Si no hay sesiones el mapa está en blanco. Ya no hay un campo "empty" o "inicializado" para cada estado.

Un objeto Session 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 los 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 Session se asocia con un tipo de módulo. El nombre del objeto Session se vincula con el 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 de nuevo, obtener el mismo objeto TripModel. Para realizar un seguimiento de TRIP_B, obtén un nuevo TripModel.

Estados de la sesión

Una sesión puede tener uno de los siguientes estados:

  • Una sesión creada se representa con un objeto Session. Tú creas una sesión llamando al método create. Por ejemplo:

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

    sessionA.start()
    
  • Una sesión que se muestra se inicia automáticamente. Muestra elementos electrónicos de la interfaz de usuario y las actualiza en respuesta a las actualizaciones de datos. Muestras una sesión llamando al método showSession. Por ejemplo:

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

    sessionA.stop()
    

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

Puedes crear una app de transporte compartido con componentes solo de datos o las APIs del elemento de la interfaz de usuario proporcionadas por la solución On-demand Rides and Deliveries.

Cómo usar componentes solo de datos

Para crear una app de transporte compartido con componentes que solo usan datos, sigue estos pasos:

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

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

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

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

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

Cómo crear una app de transporte compartido con la interfaz de usuario de la solución On-demand Rides & Deliveries Elemento API:

  • Inicializa el objeto ConsumerApi.
  • Obtén un objeto TripModelManager del objeto ConsumerApi.
  • Obtén un objeto TripModel del TripModelManager que realiza el 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 la manera de usar las APIs de la 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 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

Ya no se requieren FINE_LOCATION permisos por el SDK del consumidor.

Control de viajes

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

En versiones anteriores, un usuario de la 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 la capa de datos 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 encargarse de 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 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);

Cómo volver a centrar el mapa

La vista del mapa o el fragmento ya no se acerca a la ubicación del usuario. durante la inicialización cuando no hay una sesión activa. Seguirá hacer zoom automáticamente para mostrar la sesión activa de Viajes compartidos porque la función Cámara automática está habilitada. La cámara automática está habilitada de forma predeterminada.

En versiones anteriores, se usaba el siguiente código para centrar la cámara. para la sesión activa actual:

consumerController.centerMapForState()

Con la arquitectura modular, usarías 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, debías utilizar el siguiente código:

consumerController.disableAutoCamera(true);

Con la arquitectura modular, usarías el siguiente código:

consumerController.setAutoCameraEnabled(false);

Personalización

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

BAF personalizado

También se quitaron los métodos asociados del BAF:

ConsumerController.isMyLocationFabEnabled()
ConsumerController.setMyLocationFabEnabled()