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 obter 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
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() {})
Usar 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
doConsumerApi
. - Consiga um objeto
TripModel
doTripModelManager
que rastreie uma viagem. - Adicione a
ConsumerMap[View/Fragment]
à visualização do aplicativo. - Consiga 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 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.
Métodos associados ao FAB também foram removidos:
ConsumerController.isMyLocationFabEnabled()
ConsumerController.setMyLocationFabEnabled()