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, se crea 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 "inicializada" 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
deConsumerApi
. - Comienza a supervisar un viaje con el
TripModelManager
para recibir un objetoTripModel
. - 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 objetoConsumerApi
. - Obtén un objeto
TripModel
delTripModelManager
que realiza el seguimiento de un viaje. - Agrega
ConsumerMap[View/Fragment]
a la vista de la aplicación. - Obtén un objeto
ConsumerController
deConsumerMap[View/Fragment]
. - Proporciona el objeto
TripModel
al controlador para obtener un objetoJourneySharingSession
. - 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 & Deliveries se quitó del mapa.
También se quitaron los métodos asociados del BAF:
ConsumerController.isMyLocationFabEnabled()
ConsumerController.setMyLocationFabEnabled()