Perguntas frequentes

Detalhes do produto

Problemas

Rede

Dados

Personalização da interface

Roteamento

Simulador

Fluxos de trabalho

Serviços de mobilidade

Detalhes do produto

O app precisa implementar uma caixa de diálogo com a notificação dos Termos de Serviço do SDK de navegação que cada motorista precisa aceitar. Essa caixa de diálogo dá ao motorista a oportunidade de concordar com os Termos de Serviço. Um arquivo de texto com os termos é fornecido com o SDK do Navigation.
No Android, use o método NavigationApi.showTermsAndConditionsDialog para mostrar a caixa de diálogo com os termos.
No iOS, chame GMSNavigationServices.showTermsAndConditionsDialogIfNeededWithCompanyName.
Todos os idiomas aceitos pelo Google Maps Mobile estão automaticamente disponíveis para o SDK Navigation. Um dispositivo tem um idioma de sistema padrão, e um app não pode mudar essa configuração. No entanto, o app tem acesso a mais de 70 idiomas.

Sim. No Android, depois de iniciado, o LocationListener continua em execução em segundo plano. O app continua fixando a posição na estrada e mantém a direção.

No iOS, para continuar recebendo atualizações de localização da posição e da direção em segundo plano, implemente o ajuste de estrada e defina allowsBackgroundLocationUpdates como YES.

Sim. Quando uma rota é criada ou alterada, o RouteChangeListener fornece polilinhas.

Não, o SDK Navigation não exige que o Google Maps Mobile esteja instalado no dispositivo.
Não, o SDK de navegação não oferece esse recurso no momento.
Sim. A direção do trânsito está disponível e mostrada por padrão.

Problemas

No Xcode 12, os apps não são compilados corretamente para o simulador. Como posso resolver isso?

Para corrigir esse problema, abra as configurações de criação do seu projeto do Xcode e adicione arm64 a Excluded Architectures somente para versões do "simulador de iOS".

Se quiser mais informações, consulte a seguinte conversa do StackOverflow (em inglês).

O GMSMapView não carrega.

Se o GMSMapView não carregar:

  • Verifique se o NavSDK está ativado no console do Cloud.
  • Se o SDK Nav estiver instalado, mas seu projeto não usar as APIs do SDK Nav, remova-o do binário.

Rede

Como o SDK Navigation lida com a conectividade ruim?
O SDK Navigation armazena em cache antecipadamente o trajeto de cada viagem. As informações pré-armazenadas em cache incluem informações de roteamento de 15 a 20 minutos e rotas alternativas caso o motorista se desvie da rota. O SDK de navegação aproxima a posição usando o GPS e os sensores do dispositivo.
Há um modo off-line disponível?
Não, o SDK de navegação não oferece um modo off-line no momento. No entanto, o SDK fornece informações pré-armazenadas em cache para uma viagem.

Dados

Posso recuperar todas as paradas/destinos de uma viagem antes de iniciar o trajeto?

Sim. No Android, para extrair as direções de uma rota, chame Navigator.getRouteSegments().

No iOS, chame GMSNavigator.routeLegs(read).

A orientação do trajeto passo a passo está disponível no início de um trajeto?
Sim. O SDK de navegação fornece uma lista de segmentos de rota. Além disso, o motorista pode deslizar pelo card de direções no cabeçalho para conferir cada manobra.
Como o ETA é comunicado aos usuários do app?

No Android, siga estas etapas para informar aos usuários do app as informações de ETA:

  1. Extraia o tempo e a distância de todos os waypoints usando Navigator.getTimeAndDistanceList().
  2. Encaminhe essas informações para o aplicativo cliente, como você faz atualmente para a HEC do motorista.

No iOS, siga estas etapas para informar aos usuários do app as informações de ETA:

  1. Extraia os trechos da viagem usando Navigator.getRouteSegments().
  2. Chame GMSNavigator.timeToNextDestination para cada trecho da viagem.
  3. Encaminhar as informações de tempo para o aplicativo cliente, como você faz atualmente para a hora estimada de chegada do motorista.
O RoadSnappedLocationProvider pode ser usado para obter a localização fixada atual do motorista se a navegação não estiver em primeiro plano?

Sim. No Android, o RoadSnappedLocationProvider é executado em segundo plano por padrão.

No iOS, para manter a navegação em execução em segundo plano, implemente o listener para GMSRoadSnappedLocationProviderListener e defina a propriedade allowsBackgroundLocationUpdates como TRUE.

O SDK Navigation oferece suporte à fronteira geográfica virtual?

Não. No contexto da navegação, remainingTimeOrdistanceChangeListener tem uma vantagem sobre uma fronteira geográfica simples. A fronteira geográfica pode não considerar a geometria da estrada e não estar centralizada no ponto exato para onde o motorista está navegando.

É possível aproximar essa funcionalidade usando remainingTimeOrdistanceChangeListener.

  1. Defina o limite para determinar a frequência dos callbacks.
  2. Confira a distância restante até o destino.

Por exemplo, se você definir o limite para 100 m, vai receber um callback quando a distância até o destino mudar em 100 m. À medida que a distância diminui, você pode atualizar esse limite para um valor menor e receber callbacks mais frequentes. Em seguida, verifique a distância restante para determinar se você está perto o suficiente do local de retirada/entrega.

No iOS, implemente o listener GMSNavigatorListener.didUpdateRemainingDistance para gerenciar a distância entre as notificações.

Posso desativar as notificações quando o app de navegação estiver em segundo plano?

Sim. No Android, use Navigator.setHeadsUpNotificationEnabled para controlar as notificações. Esse método tem um argumento booleano. FALSE desativa as notificações; TRUE as ativa.

No iOS, desative a notificação em segundo plano para locais aproximados por estrada definindo GMSRoadSnappedLocationProvider.allowsBackgroundLocationUpdates como NÃO.

Para desativar o processamento em segundo plano para outras notificações de local, chame GMSNavigator.sendsBackgroundNotifications(NO).

Personalização da interface

Posso usar um código de cores para a melhor opção de trajeto?
Não. Não é possível codificar por cores uma opção de rota específica no momento.
O SDK de navegação pode mostrar o HEC para o destino final?

Sim. No Android, use os seguintes métodos:

  1. Extraia o tempo e a distância de todos os waypoints usando Navigator.getTimeAndDistanceList().
  2. Ocultar o HEC do waypoint atual usando NavigationFragment.setEtaCardEnabled(false).
  3. Renderize o HEC do destino final.

No iOS, use o seguinte:

  1. Ligue para a GMSNavigator.routeLegs(read).
  2. Na última etapa, chame GMSNavigator.timeToNextDestination.
  3. Ocultar o ETA do waypoint atual usando MSMapView.settings.navigationFooterEnabled=NO como FALSO.
  4. Renderize o HEC do destino final.
Como posso ocultar as atualizações de ETA?

É possível desativar os cards de ETA com os seguintes métodos:

  • No Android, use navigationView.setEtaCardEnabled(false).
  • No iOS, use GMSMapView.settings.navigationFooterEnabled=NO.
Quais personalizações de interface estão disponíveis para os cards de cabeçalho e rodapé?

No Android, use StylingOptions para definir o estilo de cor do plano de fundo. Para ocultar ou mostrar o cabeçalho e o rodapé, use as funções de membro setHeaderEnabled e setFooterEnabled de NavigationFragment.

No iOS, use GMSMapView.settings.navigationHeaderPrimaryBackgroundColor para definir o estilo da cor de plano de fundo. Para ocultar ou mostrar o cabeçalho e o rodapé, use as propriedades navigationFooterEnabled e navigationHeaderEnabled de GMSUISettings.

Roteamento

Posso fornecer um trajeto específico para um motorista ou remover trajetos alternativos?
Não. Por padrão, várias rotas são fornecidas, e a rota mais rápida tem prioridade. É possível afetar a rota padrão adicionando preferências, como "evitar rodovias e pedágios", à solicitação. Adicionar pontos de referência também afeta a rota.
Posso mostrar ao usuário do app um rótulo diferente para o destino em vez do local de destino padrão?

Sim. No Android, crie um Marker com um título personalizado para o destino e a latitude/longitude. O SDK Navigation mostra o título personalizado e as coordenadas no NavigationMap.

No iOS, você cria e exibe um GMSMarker para o destino.

Posso usar o SDK do Navigation para acompanhar desvios de um caminho definido?

Sim. No Android, use Navigator.setRouteChangedListener para receber notificações quando uma rota mudar ou uma nova rota for recomendada:

  1. Registre um listener que verifica a posição do dispositivo ao longo do trajeto usando o método Navigator.setRouteChangedListener.
  2. Adicione o código ao gerenciador de eventos de callback, onRouteChanged:
    • Envie uma mensagem para o usuário do app com informações atualizadas sobre a distância e o HEC.
    • Rastrear a localização do dispositivo.
    • [Opcional] Adicione outras funcionalidades exigidas pelo app para processar quando o motorista estiver fora da rota prescrita.

No iOS, use o GMSNavigator e os listeners dele para receber notificações quando uma rota mudar ou uma nova rota for recomendada:

  1. No controlador de visualização do mapa, implemente o protocolo GMSNavigatorListener e o protocolo GMSRoadSnappedLocationProviderListener.
  2. Implemente GMSNavigatorListener.navigatorDidChangeRoute.
  3. Acesse a nova rota usando as propriedades routeLegs e currentRouteLeg do GMSNavigator.
O motorista pode sair da navegação sem concluir o trajeto?

Sim. No Android, chame o método Navigator.stopGuidance() para interromper a navegação.

No iOS, chame GMSNavigator.clearDestinations.

Simulador

O simulador é compatível com mudanças de rota?

Sim. No Android, chame simulateLocationsAlongNewRoute para simular uma viagem que inclui uma mudança de rota. O método simulateLocationsAlongExistingRoute ignora as mudanças na rota atual.

No iOS, use GMSLocationSimulator.simulateAlongNewRouteToDestinations para simular uma viagem que inclui uma mudança de rota. Se você não prever mudanças de rota, use GMSLocationSimulator.simulateLocationsAlongExistingRoute ou GMSLocationSimulator.simulateAlongNewRouteToDestinations.

Fluxos de trabalho

Como faço para dispensar a notificação depois de fechar uma atividade que contém um fragmento de navegação?

A notificação de navegação permanece visível durante a navegação, quando a atividade é fechada. Quando o veículo chega ao destino, a navegação é interrompida e a notificação desaparece.

Para processar cliques na notificação, use Navigator.startGuidance(intent resumeIntent). O resume intent é acionado quando o usuário do app clica na notificação. Normalmente, o Navigator.startguidance(getIntent()) é chamado da atividade principal, que chama a atividade quando o usuário do app clica na notificação.

Serviços de mobilidade

Qual é a diferença entre usar o SDK Navigation para clientes de serviços de mobilidade?

Os Serviços de Mobilidade da Plataforma Google Maps oferecem uma coleção de APIs e SDKs para atender às necessidades corporativas de empresas de transporte e logística. Para clientes de serviços de mobilidade, o SDK de navegação geralmente é usado com serviços relacionados para otimização de rotas, envio, rastreamento de tarefas, análise de frota e muito mais. O SDK Navigation também é faturado de maneira diferente para clientes dos Serviços de mobilidade. Para mais informações, consulte a documentação dos Serviços de mobilidade.

No momento, os produtos de mobilidade estão disponíveis apenas para alguns clientes. Entre em contato com seu representante de vendas para mais informações.

Como saber se sou cliente dos Serviços de Mobilidade?
Se você não tiver certeza se está implementando o SDK de navegação como cliente dos Serviços de mobilidade, procure uma chamada ReportBillableEvent no código. Somente os clientes da Mobility Services podem chamar o método ReportBillableEvent.

Como o SDK do Navigation é faturado para clientes dos Serviços de mobilidade?
Para clientes dos Serviços de Mobilidade, o faturamento e os preços do SDK Navigation dependem do contrato de serviço que você tem com a Plataforma Google Maps. Para saber como garantir que a implementação dos Serviços de mobilidade está sendo faturada corretamente, consulte Validação de faturamento. Para mais informações sobre o faturamento dos Serviços de Mobilidade, entre em contato com seu representante de vendas.

Quais APIs do SDK de navegação precisam ser usadas apenas por clientes dos Serviços de Mobilidade?

Há várias APIs no SDK de navegação que são destinadas apenas ao uso por clientes dos Serviços de mobilidade, que são cobrados pelo Google por transação. Se você não for cliente dos Serviços de mobilidade, os métodos a seguir não serão executados:

Se eu for cliente dos Serviços de mobilidade, também posso usar uma implementação do SDK de navegação que não seja dos Serviços de mobilidade?

Sim, os clientes dos Serviços de mobilidade podem usar implementações do SDK de navegação tanto dos Serviços de mobilidade quanto de outros. No entanto, só é possível usar um tipo de implementação em um app por vez. Você também precisa criar um novo projeto, uma conta de faturamento e uma chave de API do Google Cloud, separados daqueles usados na implementação dos Serviços de mobilidade. Para mais informações, consulte a visão geral da configuração do SDK Navigation.

Para mais informações sobre o uso de uma implementação do SDK de navegação que não seja de Serviços de mobilidade, incluindo a migração de um app de um tipo de implementação para outro, entre em contato com o representante da sua conta do Google.

Observação: se você não for cliente da Mobility Services e quiser saber mais sobre a coleção de APIs e SDKs da Mobility Services, entre em contato com as vendas da Plataforma Google Maps.