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
deConsumerApi
. - Comienza a supervisar un viaje con
TripModelManager
para recibir un objetoTripModel
. - 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 objetoConsumerApi
. - Obtén un objeto
TripModel
delTripModelManager
que realiza un 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 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.
También se quitaron los métodos asociados con el BAF:
ConsumerController.isMyLocationFabEnabled()
ConsumerController.setMyLocationFabEnabled()