Perguntas frequentes

Fatos sobre o produto

Problemas

Rede

Dados

Personalização da interface

Roteamento

Simulador

Fluxos de trabalho

Fatos sobre o produto

Seu app precisa implementar uma caixa de diálogo com o aviso dos Termos de Serviço do SDK do Navigation que precisa ser aceito por cada motorista. 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 exibir a caixa de diálogo que contém os termos.
No iOS, chame GMSNavigationServices.showTermsAndConditionsDialogIfNeededWithCompanyName.
Todos os idiomas compatíveis com o Google Maps para dispositivos móveis são disponibilizados automaticamente no SDK do Navigation. Um dispositivo tem um idioma padrão do sistema e um app não pode mudar essa configuração. No entanto, o app tem acesso a mais de 70 idiomas.

Sim. No Android, uma vez iniciado, a LocationListener continua em execução em segundo plano. Seu app continua a ajustar a posição da via e mantém a direção.

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

Sim. Quando um trajeto é criado ou alterado, o RouteChangeListener fornece polilinhas.

Não, o SDK do Navigation não exige que o Google Maps para dispositivos móveis esteja instalado no dispositivo.
Não, o SDK do Navigation não oferece essa funcionalidade no momento.
Sim. A direção do tráfego está disponível e é exibida 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 é carregado.

Se o GMSMapView não for carregado:

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

Rede

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

Dados

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

Sim. No Android, para extrair as rotas de um trajeto, chame Navigator.getRouteSegments().

No iOS, chame GMSNavigator.routeLegs(read).

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

No Android, siga estas etapas para fornecer informações de HEC aos usuários do app:

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

No iOS, siga estas etapas para fornecer informações de HEC aos usuários do app:

  1. Extraia os trechos da viagem usando Navigator.getRouteSegments().
  2. Chame GMSNavigator.timeToNextDestination para cada trecho da viagem.
  3. Encaminhe as informações de horário para o aplicativo cliente, como faz atualmente para o HEC do motorista.
O RoadSnappedLocationProvider poderá ser usado para acessar a localização atual do motorista quando a navegação não estiver em primeiro plano?

Sim. No Android, a RoadSnappedLocationProvider é executada 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 do Navigation oferece suporte à fronteira geográfica virtual?

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

É possível aproximar essa funcionalidade usando remainingTimeOrdistanceChangeListener.

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

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

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, e o TRUE ativa as notificações.

No iOS, desative a notificação em segundo plano para locais com fotos de vias definindo GMSRoadSnappedLocationProvider.allowsBackgroundLocationUpdates como NÃO.

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

Personalização da interface

Posso codificar por cores a melhor opção de trajeto?
Não. No momento, não é possível definir as cores de um trajeto específico.
O SDK do Navigation pode mostrar o HEC para o destino final?

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

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

No iOS, use o seguinte:

  1. Chame GMSNavigator.routeLegs(read).
  2. Com o último trecho, chame GMSNavigator.timeToNextDestination.
  3. Oculte o HEC do waypoint atual usando MSMapView.settings.navigationFooterEnabled=NO como FALSE.
  4. Renderize o ETA de destino final.
Como posso ocultar as atualizações de HEC?

É possível desativar os cartões 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 de cor do 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 a um motorista ou remover trajetos alternativos?
Não. Por padrão, várias rotas são fornecidas, e a mais rápida tem prioridade. Você pode afetar o trajeto padrão adicionando preferências, como "evitar rodovias e pedágios", à solicitação. Adicionar waypoints também afeta o trajeto.
Posso mostrar ao usuário do app um rótulo para o destino diferente do padrão?

Sim. No Android, crie um Marker com um título personalizado para o destino e a latitude/longitude. O SDK do 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 os 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 manipulador de eventos de callback, onRouteChanged:
    • Envie uma mensagem ao usuário do app com informações atualizadas de HEC e distância.
    • Monitore a localização do dispositivo.
    • [opcional] Adicione outra funcionalidade exigida pelo app para processar quando o motorista está desviando do trajeto prescrito.

No iOS, use o GMSNavigator e os listeners relacionados para receber notificações quando um trajeto mudar ou um novo trajeto for recomendado:

  1. No controlador de visualização do mapa, implemente os protocolos GMSNavigatorListener e 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 aceita mudanças de rota?

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

No iOS, use GMSLocationSimulator.simulateAlongNewRouteToDestinations para simular uma jornada que inclua uma mudança de trajeto. Se você não antecipar nenhuma mudança de trajeto, 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 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 na atividade principal, que a lembra quando o usuário do app clica na notificação.