Migração para a modularização do SDK para consumidores do iOS

O SDK do Consumer para iOS permite criar apps de serviço de transporte por aplicativo usando uma arquitetura modular. Você pode usar as partes da API que quer usar no seu app específico e integrá-las às suas próprias APIs. As APIs do SDK do consumidor para diferentes recursos são encapsuladas em módulos separados.

Se o app de serviço de transporte por aplicativo usa versões anteriores do SDK do consumidor, será necessário fazer upgrade dele para usar essa arquitetura modular. Este guia de migração descreve como fazer upgrade do seu app.

Visão geral

A arquitetura modular do SDK do consumidor introduz um objeto MapViewSession que contém o estado da interface do usuário. Nas versões anteriores do SDK para o consumidor, os apps fluíam entre os estados. Com essa arquitetura modular, você cria um objeto MapViewSession e tem a opção de mostrar a sessão no mapa. Se nenhuma sessão for exibida, o mapa vai mostrar o mesmo conteúdo que usa apenas o SDK do Maps para iOS.

Um objeto MapViewSession representa uma única instância de uso do ciclo de vida de um módulo. As sessões são os pontos de acesso nas APIs do módulo. Por exemplo, uma sessão de Compartilhamento de jornada segue uma única viagem. Você interage com o objeto JourneySharingSession para monitorar a viagem.

Objeto TripModel

Nas versões anteriores do SDK do consumidor, uma instância de TripService permite monitorar apenas uma viagem em tempo real por vez. Ao usar um objeto TripModel, é possível monitorar várias viagens em tempo real em uma instância de TripService. Uma instância do TripModel pode ser criada no TripService, e cada instância do TripModel está vinculada a uma viagem específica.

A instância TripModel chamará eventos de atualização se um assinante registrado estiver na viagem quando ela for atualizada.

O objeto TripModel também pode ser usado para criar uma instância do objeto JourneySharingSession.

MapViewSession estados

Uma instância MapViewSession pode ser adicionada em apenas um mapView por vez e pode estar em um dos dois estados a seguir:

  • O estado GMTCMapViewSessionStateInactive indica que esse MapViewSession ainda não foi adicionado a nenhum mapView ou que foi removido de um mapView. Quando a instância MapViewSession for removida de um mapView, o método didRemoveFromMapView será chamado.

    Chamar o método hideMapViewSession ou hideAllMapViewSessions remove o mapViewSession de um mapView:

    [_mapView hideMapViewSession:mapViewSessionA];
    

    ou

    [_mapView hideAllMapViewSessions];
    
  • O estado GMTCMapViewSessionStateActive indica que esse MapViewSession foi adicionado a um mapView. Quando uma instância do MapViewSession for adicionada a um mapView, o método didAddToMapView será chamado. Chamar o método showMapViewSession adiciona o mapViewSession ao mapView de destino:

    [_mapView showMapViewSession:mapViewSessionA];
    

Como usar componentes somente de dados e da interface do usuário

É possível criar um app de transporte por aplicativo usando componentes somente de dados ou as APIs do elemento da interface do usuário fornecidas pela solução de viagens e entregas sob demanda.

Como usar componentes somente de dados

Para criar um app de transporte por aplicativo usando componentes somente de dados, faça o seguinte:

  1. Inicialize um objeto GMTCServices especificando o ID do provedor e o provedor do token de acesso.
  2. Consiga a propriedade tripService da instância compartilhada do objeto GMTCServices.
  3. Crie ou recupere uma instância de um objeto GMTCTripModel para uma viagem especificada usando o método tripModelForTripName do objeto tripService.
  4. Registre callbacks na instância GMTCTripModel para iniciar o monitoramento de viagens.

O exemplo a seguir mostra como usar componentes somente de dados:

[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];

Usar as APIs de elementos da interface

Siga este procedimento para criar um app consumidor com APIs do elemento da interface do usuário da solução de viagens e entregas sob demanda:

  1. Inicialize um objeto GMTCServices especificando o ID do provedor e o provedor do token de acesso.
  2. Inicialize um objeto GMTCMapView para renderizar o mapa base.
  3. Consiga a propriedade tripService da instância compartilhada do objeto GMTCServices.
  4. Crie ou recupere uma instância de um objeto GMTCTripModel para uma viagem especificada usando o método tripModelForTripName do objeto tripService.
  5. Crie um objeto GMTCJourneySharingSession com a instância GMTCTripModel.
  6. Mostre o objeto GMTCJourneySharingSession na mapView.
  7. Registre callbacks na instância GMTCTripModel para iniciar o monitoramento de viagens.

O exemplo abaixo mostra como usar as APIs de interface do usuário:

[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];

Mudanças no código de arquitetura modular

Se o app de serviço de transporte por aplicativo usa versões anteriores do SDK Consumer, a arquitetura modular atualizada vai exigir algumas mudanças no código. Esta seção descreve algumas dessas mudanças.

Monitoramento de viagens

A arquitetura modular atualizada requer alterações de código para usuários da camada de dados e da interface do usuário.

Nas versões anteriores, um usuário da camada de dados pode lidar com o monitoramento de viagem usando o seguinte código:

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

Ao usar a arquitetura modular, um usuário da camada de dados usaria o seguinte código:

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

Nas versões anteriores, um usuário da interface do usuário pode processar o monitoramento de viagens usando o seguinte código:

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

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

Com a arquitetura modular, um usuário de interface do usuário usaria o seguinte 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];