Agora que você configurou o SDK do JavaScript Consumer para tarefas programadas, está tudo pronto para acompanhar uma remessa com seu app para consumidores. Este documento aborda as seguintes etapas principais desse processo:
- Inicializar um mapa e mostrar a viagem compartilhada
- Atualizar e acompanhar o progresso da viagem
- Parar de seguir um envio
- Resolver erros de rastreamento de envios
Configurar um mapa
Para acompanhar a coleta ou entrega de uma remessa no seu web app, carregue um mapa e crie uma instância do SDK do consumidor para começar a rastrear a remessa. É possível carregar um novo mapa ou usar um já existente. Em seguida, use a função de inicialização para instanciar o SDK do consumidor para que a visualização do mapa corresponda à localização do item rastreado.
Carregar um novo mapa usando a API Google Maps JavaScript
Para criar um mapa, carregue a API Google Maps JavaScript no seu app da Web. O exemplo a seguir mostra como carregar a API Google Maps JavaScript, ativar o SDK e acionar a verificação de inicialização.
- O parâmetro
callback
executa a funçãoinitMap
depois que a API é carregada. - O atributo
defer
permite que o navegador continue renderizando o restante da página enquanto a API é carregada.
Use a função initMap
para instanciar o SDK do consumidor. Exemplo:
<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap&libraries=journeySharing" defer></script>
Carregar um mapa
Também é possível carregar um mapa criado pela API Maps JavaScript, como um que você já esteja usando.
Por exemplo, suponha que você tenha uma página da Web com uma entidade google.maps.Map
padrão em que um marcador é mostrado conforme definido no seguinte código HTML. Isso
mostra seu mapa usando a mesma função initMap
no callback no final:
<!DOCTYPE html>
<html>
<head>
<style>
/* Set the size of the div element that contains the map */
#map {
height: 400px; /* The height is 400 pixels */
width: 100%; /* The width is the width of the web page */
}
</style>
</head>
<body>
<h3>My Google Maps Demo</h3>
<!--The div element for the map -->
<div id="map"></div>
<script>
// Initialize and add the map
function initMap() {
// The location of Pier 39 in San Francisco
var pier39 = {lat: 37.809326, lng: -122.409981};
// The map, initially centered at Mountain View, CA.
var map = new google.maps.Map(document.getElementById('map'));
map.setOptions({center: {lat: 37.424069, lng: -122.0916944}, zoom: 14});
// The marker, now positioned at Pier 39
var marker = new google.maps.Marker({position: pier39, map: map});
}
</script>
<!-- Load the API from the specified URL.
* The defer attribute allows the browser to render the page while the API loads.
* The key parameter contains your own API key.
* The callback parameter executes the initMap() function.
-->
<script defer src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap">
</script>
</body>
</html>
Instanciar um provedor de localização de envio
Use o provedor de localização de envio, junto com o buscador de token de autorização que você definiu anteriormente, para começar a receber dados do Fleet Engine.
Estes exemplos mostram como instanciar o provedor de localização.
JavaScript
const locationProvider =
new google.maps.journeySharing.FleetEngineShipmentLocationProvider({
projectId: 'your-project-id',
authTokenFetcher: authTokenFetcher, // the fetcher defined previously
});
TypeScript
const locationProvider =
new google.maps.journeySharing.FleetEngineShipmentLocationProvider({
projectId: 'your-project-id',
authTokenFetcher: authTokenFetcher, // the fetcher defined previously
});
Mostrar a viagem compartilhada
Para mostrar o progresso de uma tarefa programada, inicialize a visualização dela, que define o frame do mapa para corresponder ao local da jornada rastreada. O progresso é fornecido pelo SDK do consumidor depois que ele recebe as informações do Fleet Engine.
Dicas:
Verifique se a página contém um elemento <div> que contém a visualização do mapa. No exemplo a seguir, o elemento <div> é chamado de
map_canvas
.Conheça as regras de visibilidade padrão que o Fleet Engine aplica às viagens rastreadas. Também é possível configurar regras de visibilidade para tarefas de envio de veículo ativo e paradas programadas. Consulte Personalizar a visibilidade das tarefas no guia Configurar tarefas.
Estes exemplos mostram como inicializar uma visualização de mapa.
JavaScript
function initMap() {
const mapView = new
google.maps.journeySharing.JourneySharingMapView({
element: document.getElementById('map_canvas'),
// Any undefined styling options use defaults.
});
// If you did not specify a tracking ID in the location
// provider constructor, you may do so here.
// Location tracking starts as soon as this is set.
locationProvider.trackingId = 'your-tracking-id';
// Give the map an initial viewport to allow it to
// initialize; otherwise the 'ready' event above may
// not fire. The user also has access to the mapView
// object to customize as they wish.
mapView.map.setCenter({lat: 37.2, lng: -121.9});
mapView.map.setZoom(14);
}
TypeScript
function initMap() {
const mapView = new
google.maps.journeySharing.JourneySharingMapView({
element: document.getElementById('map_canvas'),
// Any undefined styling options will use defaults.
});
// If you did not specify a tracking ID in the location
// provider constructor, you may do so here.
// Location tracking starts as soon as this is set.
locationProvider.trackingId = 'your-tracking-id';
// Give the map an initial viewport to allow it to
// initialize; otherwise the 'ready' event above may
// not fire. The user also has access to the mapView
// object to customize as they wish.
mapView.map.setCenter({lat: 37.2, lng: -121.9});
mapView.map.setZoom(14);
}
Atualizar o progresso do frete
Você pode detectar eventos e atualizar o progresso do envio à medida que uma viagem
avança. Use o provedor de local para recuperar metainformações do objeto
taskTrackingInfo
. As mudanças nas metainformações acionam um evento de atualização. O objeto taskTrackingInfo
fornece o seguinte:
- HEC
- Número de paradas restantes
- Distância restante antes da retirada ou entrega
O exemplo a seguir mostra como detectar esses eventos de mudança.
JavaScript
locationProvider.addListener('update', e => {
// e.taskTrackingInfo contains data that may be useful
// to the rest of the UI.
console.log(e.taskTrackingInfo.remainingStopCount);
});
TypeScript
locationProvider.addListener('update',
(e: google.maps.journeySharing.FleetEngineShipmentLocationProviderUpdateEvent) => {
// e.taskTrackingInfo contains data that may be useful
// to the rest of the UI.
console.log(e.taskTrackingInfo.remainingStopCount);
});
Critérios de exibição para várias tarefas
O SDK do consumidor para tarefas programadas mostra apenas uma tarefa por ID de rastreamento no mapa. No entanto, você também costuma atribuir um ID de rastreamento a um produto de envio específico, que permanece associado a ele durante toda a jornada no seu sistema. Isso significa que um único ID de rastreamento pode ser associado a várias tarefas, como uma tarefa de coleta seguida de uma tarefa de entrega para o mesmo pacote ou várias tarefas de envio com falha para um pacote.
Para lidar com essa situação, o Fleet Engine aplica critérios para mostrar tarefas, conforme mostrado na tabela a seguir.
Critérios de tarefa | Resultado |
---|---|
Abrir tarefas de coleta | |
Existe exatamente um | Mostrar a tarefa |
Vários existem | Gerar erro |
Tarefas de coleta concluídas | |
Existe exatamente um | Mostrar a tarefa |
Vários existem (alguns com tempos de resultado) | Mostrar tarefa com o horário de resultado mais recente |
Vários existem (nenhum com horários de resultado) | Gerar erro |
Abrir tarefas de entrega | |
Existe exatamente um | Mostrar a tarefa |
Vários existem | Gerar erro |
Tarefas de entrega concluídas | |
Existe exatamente um | Mostrar a tarefa |
Vários existem (alguns com tempos de resultado) | Mostrar tarefa com o horário de resultado mais recente |
Vários existem (nenhum com horários de resultado) | Gerar erro |
Parar de seguir um envio
Quando uma jornada de envio é concluída ou cancelada, seu app para consumidores precisa parar de acompanhar um envio removendo o ID de rastreamento e o provedor de localização da visualização do mapa. Confira mais detalhes nas próximas seções.
Remover o ID de acompanhamento
Para impedir que o provedor de localização rastreie o envio, remova o ID de rastreamento do provedor. Os exemplos a seguir mostram como fazer isso.
JavaScript
locationProvider.trackingId = '';
TypeScript
locationProvider.trackingId = '';
Remover o provedor de localização da visualização do mapa
O exemplo a seguir mostra como remover um provedor de local da visualização do mapa.
JavaScript
mapView.removeLocationProvider(locationProvider);
TypeScript
mapView.removeLocationProvider(locationProvider);
Resolver erros de rastreamento de envios
Erros que surgem de forma assíncrona ao solicitar informações de envio acionam eventos de erro. O exemplo a seguir mostra como detectar esses eventos para lidar com erros.
JavaScript
locationProvider.addListener('error', e => {
// e.error is the error that triggered the event.
console.error(e.error);
});
TypeScript
locationProvider.addListener('error', (e: google.maps.ErrorEvent) => {
// e.error is the error that triggered the event.
console.error(e.error);
});
Observação:agrupe as chamadas de biblioteca em blocos try...catch
para lidar com erros inesperados.