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

O SDK do consumidor para Android 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 de consumidor introduz um objeto de sessão que contém o estado da interface do usuário. Nas versões anteriores do SDK para consumidor, os apps fluíam entre os estados. Com essa arquitetura modular, você cria um objeto Session e tem a opção de exibir a sessão no mapa. Se nenhuma sessão for exibida, o mapa ficará em branco. Não há mais um estado "vazio" ou "inicializado".

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 do módulo. 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 comportamento do 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 conseguir um objeto TripModel para TRIP_A novamente, vai receber o mesmo objeto TripModel. Para rastrear TRIP_B, consiga um novo objeto TripModel.

Estados de sessão

Uma sessão pode estar em um de vários 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 started é registrada para atualizações de dados e valores dos elementos da interface do usuário. Inicie uma sessão chamando o método start. Exemplo:

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

    ConsumerController.showSession(sessionA)
    
  • Uma sessão interrompida interrompe a atualização dos dados e de atualizar os 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 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:

  • Inicialize um objeto ConsumerApi.
  • Extraia 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 da interface do usuário da Solução de viagens sob demanda e entregas.

Para criar um app de transporte por aplicativo com as APIs de elemento da interface do usuário da solução de viagens e entregas sob demanda:

  • Inicialize o objeto ConsumerApi.
  • Extraia um objeto TripModelManager do objeto ConsumerApi.
  • Extraia um objeto TripModel do TripModelManager que rastreie uma viagem.
  • Adicione o ConsumerMap[View/Fragment] à visualização do aplicativo.
  • Extraia 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 de 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 de arquitetura modular

Se o app de serviço de transporte por aplicativo usa versões anteriores do SDK do consumidor, a arquitetura modular atualizada exigirá algumas alterações no seu 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 exigidas pelo SDK do consumidor.

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:

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

Ao usar 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 pode processar o monitoramento de 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 de interface do 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);

Centralização de mapas

A visualização ou o fragmento de mapa não aumenta o zoom até o local do usuário na inicialização quando não há uma sessão ativa. Ele ainda vai aplicar o zoom automaticamente para mostrar a sessão ativa de compartilhamento de jornada, desde que o recurso de câmera automática esteja ativado. A câmera automática fica ativada por padrão.

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

consumerController.centerMapForState()

Com 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, use o seguinte código:

consumerController.disableAutoCamera(true);

Com 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

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

ConsumerController.isMyLocationFabEnabled()
ConsumerController.setMyLocationFabEnabled()