Migración de SDK para consumidores de iOS

El SDK de consumidores para iOS 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 consumidores presenta un objeto MapViewSession que contiene el estado de la interfaz de usuario. En las versiones anteriores del SDK para consumidores, las apps pasaban de un estado a otro. Con esta arquitectura modular, puedes crear un objeto MapViewSession y tener la opción de mostrar la sesión en el mapa. Si no se muestran sesiones, el mapa muestra el mismo contenido que solo se muestra cuando se usa el SDK de Maps para iOS.

Un objeto MapViewSession representa una sola 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 JourneySharingSession para supervisar el viaje.

Objeto TripModel

En versiones anteriores del SDK para consumidores, una instancia de TripService te permite supervisar solo un viaje en tiempo real a la vez. Con un objeto TripModel, puedes supervisar varios viajes en tiempo real en una instancia de TripService. Se puede crear una instancia de TripModel desde TripService, y cada instancia de TripModel está vinculada a un viaje específico.

La instancia TripModel llama a los eventos de actualización si un suscriptor registrado está en el viaje cuando se actualiza.

El objeto TripModel también se puede usar para crear una instancia del objeto JourneySharingSession.

MapViewSession estados

Una instancia de MapViewSession se puede agregar en una sola instancia de mapView a la vez y puede tener uno de estos dos estados:

  • El estado GMTCMapViewSessionStateInactive indica que este MapViewSession aún no se agregó a ningún mapView o que se quitó de un mapView. Cuando se quita la instancia MapViewSession de un mapView, se llama al método didRemoveFromMapView.

    Llamar al método hideMapViewSession o hideAllMapViewSessions quita el mapViewSession de una mapView:

    [_mapView hideMapViewSession:mapViewSessionA];
    

    o

    [_mapView hideAllMapViewSessions];
    
  • El estado GMTCMapViewSessionStateActive indica que este MapViewSession se agregó a un mapView. Cuando se agrega una instancia de MapViewSession a un mapView, se llama al método didAddToMapView. Cuando se llama al método showMapViewSession, se agrega mapViewSession al mapView de destino:

    [_mapView showMapViewSession:mapViewSessionA];
    

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

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

Cómo usar componentes solo de datos

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

  1. Especifica el ID del proveedor y el proveedor de tokens de acceso para inicializar un objeto GMTCServices.
  2. Obtén la propiedad tripService de la instancia compartida del objeto GMTCServices.
  3. Crea o recupera una instancia de un objeto GMTCTripModel para un viaje especificado con el método tripModelForTripName del objeto tripService.
  4. Registra devoluciones de llamada para la instancia GMTCTripModel a fin de iniciar la supervisión de viajes.

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

[GMTCServices setAccessTokenProvider:[[AccessTokenProvider alloc] init]
                          providerID:yourProviderID];
GMTCTripService *tripService = [GMTCServices sharedServices].tripService;

// Create a tripModel instance for listening to updates to the trip specified by this trip name.
GMTCTripModel *tripModel = [tripService tripModelForTripName:tripName];

// Register for the trip update events.
[tripModel registerSubscriber:self];

// To stop listening for the trip update.
[tripModel unregisterSubscriber:self];

Cómo usar las APIs de elementos de IU

Sigue este procedimiento si quieres crear una app para consumidores con las APIs de elementos de la interfaz de usuario de la solución On-demand Rides & Deliveries:

  1. Especifica el ID del proveedor y el proveedor de tokens de acceso para inicializar un objeto GMTCServices.
  2. Inicializa un objeto GMTCMapView para renderizar el mapa base.
  3. Obtén la propiedad tripService de la instancia compartida del objeto GMTCServices.
  4. Crea o recupera una instancia de un objeto GMTCTripModel para un viaje especificado con el método tripModelForTripName del objeto tripService.
  5. Crea un objeto GMTCJourneySharingSession con la instancia GMTCTripModel.
  6. Muestra el objeto GMTCJourneySharingSession en mapView.
  7. Registra devoluciones de llamada para la instancia GMTCTripModel a fin de iniciar la supervisión de viajes.

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

[GMTCServices setAccessTokenProvider:[[AccessTokenProvider alloc] init]
                          providerID:yourProviderID];
GMTCTripService *tripService = [GMTCServices sharedServices].tripService;

// Create a tripModel instance for listening to updates to the trip specified by this trip name.
GMTCTripModel *tripModel = [tripService tripModelForTripName:tripName];
GMTCJourneySharingSession *journeySharingSession =
  [[GMTCJourneySharingSession alloc] initWithTripModel:tripModel];

// Add the journeySharingSession instance on the mapView for UI updating.
[self.mapView showMapViewSession:journeySharingSession];

// Register for the trip update events.
[tripModel registerSubscriber:self];

// To remove the JourneySharingSession from the mapView:
[self.mapView hideMapViewSession:journeySharingSession];

// To stop listening for the trip update.
[tripModel unregisterSubscriber:self];

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 requiere algunos cambios en tu código. En esta sección, se describen algunos de esos cambios.

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:

GRCTripRequest *tripRequest =
    [[GRCTripRequest alloc] initWithRequestHeader:[GRSRequestHeader defaultHeader]
                                         tripName:tripName
                          autoRefreshTimeInterval:1];
GRCTripService *tripService = [GRCServices sharedServices].tripService;
[tripService registerServiceSubscriber:self];
[tripService setActiveTripWithRequest:tripRequest];

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

GMTCTripService *tripService = [GMTCServices sharedServices].tripService;
GMTCTripModel *tripModel = [tripService tripModelForTripName:tripName];
tripModel.options.autoRefreshTimeInterval = 1;
[tripModel registerSubscriber:self];

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

// Show the Journey Sharing user interface.
[self.mapView startTripMonitoring];

// Hide the Journey Sharing user interface.
[self.mapView resetCustomerState];

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

// Show the Journey Sharing user interface.
GMTCJourneySharingSession *journeySharingSession =
  [[GMTCJourneySharingSession alloc] initWithTripModel:tripModel];
[self.mapView showMapViewSession:journeySharingSession];

// Hide the Journey Sharing user interface.
[self.mapView hideMapViewSession:journeySharingSession];