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
doConsumerApi
. - Comece a monitorar uma viagem com o
TripModelManager
para receber um objetoTripModel
. - 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 objetoConsumerApi
. - Extraia um objeto
TripModel
doTripModelManager
que rastreie uma viagem. - Adicione o
ConsumerMap[View/Fragment]
à visualização do aplicativo. - Extraia um objeto
ConsumerController
doConsumerMap[View/Fragment]
. - Forneça o objeto
TripModel
ao controlador para receber um objetoJourneySharingSession
. - 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.
Os métodos associados ao FAB também foram removidos:
ConsumerController.isMyLocationFabEnabled()
ConsumerController.setMyLocationFabEnabled()