Seguir um envio

Agora que você configurou o SDK do Consumidor para JavaScript para tarefas agendadas, está tudo pronto para acompanhar uma entrega com seu aplicativo para o consumidor. Este documento aborda as seguintes etapas principais desse processo:

  • Inicializar um mapa e mostrar o percurso compartilhado
  • Atualizar e acompanhar o progresso da jornada
  • Parar de acompanhar uma entrega
  • Processar erros de rastreamento de envio

Configurar um mapa

Para acompanhar uma retirada ou entrega de remessa no seu app da Web, carregue um mapa e instancie o SDK do Consumidor para começar a rastrear a remessa. É possível carregar um novo mapa ou usar um que já existe. Em seguida, use a função de inicialização para instanciar o SDK do Consumidor para que a visualização do mapa corresponda ao local do item que está sendo rastreado.

Carregar um novo mapa usando a API Maps JavaScript

Para criar um mapa, carregue a API Maps JavaScript no seu app da Web. O exemplo a seguir mostra como carregar a API Maps JavaScript, ativar o SDK e acionar a verificação de inicialização.

  • O parâmetro callback executa a função initMap após o carregamento da API.
  • 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, imagine que você tenha uma página da Web com uma entidade google.maps.Map padrão em que um marcador é mostrado, conforme definido no código HTML a seguir. 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 remessa

Use o provedor de local da remessa, junto com o buscador de token de autorização definido 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 monitorada. O progresso é fornecido pelo SDK do Consumidor depois que ele recebe as informações do Fleet Engine.

Dicas:

  1. 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.

  2. Esteja ciente das regras de visibilidade padrão que o Fleet Engine aplica às jornadas rastreadas. Também é possível configurar regras de visibilidade para tarefas de envio de veículos ativos e paradas programadas. Consulte Personalizar a visibilidade da tarefa 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 envio

É possível detectar eventos e atualizar o progresso da remessa à medida que uma jornada avança. Use o provedor de localização 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 ao produto durante todo o trajeto no seu sistema. Isso significa que um único ID de rastreamento pode estar associado a várias tarefas, como uma tarefa de retirada seguida por 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 exibir tarefas, mostrados na tabela a seguir.

Critérios da tarefa Resultado
Abrir tarefas de retirada
Exatamente um existe Mostrar a tarefa
Existem vários Gerar erro
Tarefas de retirada fechadas
Exatamente um existe Mostrar a tarefa
Existem vários (alguns com horários de resultado) Mostrar tarefa com o horário de resultado mais recente
Existem vários (nenhum com horários de resultado) Gerar erro
Abrir tarefas de entrega
Exatamente um existe Mostrar a tarefa
Existem vários Gerar erro
Tarefas de entrega fechadas
Exatamente um existe Mostrar a tarefa
Existem vários (alguns com horários de resultado) Mostrar tarefa com o horário de resultado mais recente
Existem vários (nenhum com horários de resultado) Gerar erro

Parar de acompanhar uma entrega

Quando uma jornada de entrega é concluída ou cancelada, o aplicativo para o consumidor precisa parar de acompanhar uma entrega 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 rastreamento

Para impedir que o provedor de localização rastreie a remessa, remova o ID de rastreamento do provedor de localização. 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 localização da visualização do mapa.

JavaScript

mapView.removeLocationProvider(locationProvider);

TypeScript

mapView.removeLocationProvider(locationProvider);

Processar erros de rastreamento de envio

Os 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 processar 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:envolva as chamadas de biblioteca em blocos try...catch para lidar com erros inesperados.

A seguir