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

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

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

Visão geral

A arquitetura modular do SDK para consumidor introduz um objeto de sessão que contém o estado da interface do usuário. Nas versões anteriores do SDK do consumidor, os apps fluíam entre estados. Com essa arquitetura modular, você cria um objeto Session e mostrar a sessão no mapa. Se não houver sessões são exibidos, o mapa fica em branco. Não há mais um valor ou "inicializado" estado.

Um objeto Session 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 dos módulos. Por exemplo: Uma sessão de Compartilhamento de jornada segue uma única viagem. Você interage com o objeto Session para monitorar a viagem.

Um objeto Session está associado a um tipo de módulo. O objeto Session está vinculado ao ciclo de vida do objeto usado para inicializá-lo.

Suponha que você crie um objeto TripModel para rastrear TRIP_A. Se você tentar recuperar um objeto TripModel para TRIP_A novamente, receba o mesmo objeto TripModel. Para rastrear TRIP_B, consiga um novo TripModel.

Estados da sessão

Uma sessão pode estar em um destes estados:

  • Uma sessão criada é representada por um objeto Session. Você cria uma sessão chamando o método create. Exemplo:

    JourneySharingSession sessionA = JourneySharingSession.createInstance(TripModelA)
    
  • Uma sessão iniciada é registrada para atualizações de dados e valores. dos elementos da interface do usuário. Para iniciar uma sessão, chame o método start. Exemplo:

    sessionA.start()
    
  • Uma sessão mostrada é iniciada automaticamente. Exibe eelementos da interface do usuário e os atualiza em resposta a atualizações de dados. Você mostra uma sessão chame o método showSession. Exemplo:

    ConsumerController.showSession(sessionA)
    
  • Uma sessão interrompida para de atualizar os dados e a atualização elementos da interface do usuário. Para interromper uma sessão, chame o método stop. Exemplo:

    sessionA.stop()
    

Como usar componentes somente de dados e de 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:

  • Inicialize um objeto ConsumerApi.
  • Consiga o objeto TripModelManager do ConsumerApi.
  • Comece a monitorar uma viagem com o TripModelManager para receber um objeto TripModel.
  • Registre callbacks no objeto TripModel.

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

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

Usando as APIs do elemento da interface do usuário

Use o objeto ConsumerController para acessar as APIs do elemento de interface do usuário da solução On-demand Rides and Deliveries.

Criar um app de transporte particular com a interface do usuário da solução de viagens e entregas sob demanda APIs de elementos:

  • Inicialize o objeto ConsumerApi.
  • Consiga um objeto TripModelManager do ConsumerApi.
  • Consiga um objeto TripModel do TripModelManager que rastreie uma viagem.
  • Adicione a ConsumerMap[View/Fragment] à visualização do aplicativo.
  • Consiga um objeto ConsumerController do ConsumerMap[View/Fragment].
  • Forneça o objeto TripModel ao controlador para receber um objeto JourneySharingSession.
  • Use o controlador para mostrar o JourneySharingSession.

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

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();

Mudanças no código da arquitetura modular

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

Permissões de localização

As permissões FINE_LOCATION não são mais necessárias pelo SDK do consumidor.

Monitoramento de viagens

A arquitetura modular atualizada exige mudanças de código para ambos camadas de dados e interfaces do usuário.

Nas versões anteriores, um usuário da camada de dados podia o monitoramento de viagens usando o seguinte código:

ConsumerApi.initialize()
TripModelManager manager = ConsumerApi.getTripManager()
manager.setActiveTrip("trip_id")
manager.registerActiveTripCallback(new TripModelCallback() {})

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

ConsumerApi.initialize()
TripModelManager manager = ConsumerApi.getTripManager()
TripModel tripA = TripModelManager.getTrip("trip_A")
tripA.registerTripCallback(new TripModelCallback() {})

Nas versões anteriores, um usuário da interface do usuário podia monitorar viagens usando o seguinte código:

ConsumerApi.initialize()
TripModelManager manager = ConsumerApi.getTripManager()
manager.setActiveTrip("trip_id")

ConsumerController controller = consumerGoogleMap.getConsumerController();
consumerController.startJourneySharing()

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

Recentralização do mapa

A visualização ou o fragmento de mapa não aplica mais zoom ao local do usuário na inicialização quando não há sessão ativa. Ele ainda será aplicar zoom automaticamente para mostrar a sessão ativa de compartilhamento da jornada porque o recurso AutoCamera está ativado. A Câmera automática está ativada por padrão.

Em versões anteriores, você usaria o seguinte código para centralizar a câmera para a sessão ativa atual:

consumerController.centerMapForState()

Usando a arquitetura modular, você usaria o seguinte código:

CameraUpdate cameraUpdate = consumerController.getCameraUpdate()
if (cameraUpdate != null) {
   googleMap.animateCamera(cameraUpdate);
   // OR googleMap.moveCamera(cameraUpdate);
}

Para desativar o recurso AutoCamera em versões anteriores, você usaria o seguinte código:

consumerController.disableAutoCamera(true);

Usando a arquitetura modular, você usaria o seguinte código:

consumerController.setAutoCameraEnabled(false);

Personalização

O FAB personalizado da solução de viagens e entregas sob demanda foi removido do mapa.

FAB personalizado

Métodos associados ao FAB também foram removidos:

ConsumerController.isMyLocationFabEnabled()
ConsumerController.setMyLocationFabEnabled()