Perguntas frequentes

Fatos do produto

Rede

Dados

Personalização da interface

Roteamento

Simulador

Fluxos de trabalho

Fatos do produto

Seu app precisa implementar uma caixa de diálogo com o aviso dos Termos de Serviço do SDK de navegação que cada motorista precisa aceitar. Essa caixa de diálogo permite que o motorista concorde 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 ficam disponíveis 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, o LocationListener continua sendo executado em segundo plano. O app continua ajustando a posição da via e mantém o rolamento.

No iOS, para continuar recebendo atualizações de localização de posição e direção em segundo plano, implemente o ajuste 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ânsito está disponível e é exibida por padrão.

Rede

Como o SDK do Navigation lida com conectividade ruim?
O SDK do Navigation armazena previamente em cache a rota para cada jornada. Elas incluem informações de trajeto que levam de 15 a 20 minutos e alternativas de trajeto caso o motorista desvie do trajeto. O SDK do Navigation aproxima a 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, ele fornece informações pré-armazenadas em cache para uma jornada.

Dados

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

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

No iOS, chame GMSNavigator.routeLegs(read).

A orientação guiada 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 pelo card de rotas no cabeçalho para conferir todas as manobras.
Como o HEC é informado 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. Recupere os trechos da jornada usando Navigator.getRouteSegments().
  2. Chame GMSNavigator.timeToNextDestination para cada trecho da viagem.
  3. Encaminhe as informações de tempo para o aplicativo cliente como faz atualmente com o ETA do motorista.
O RoadSnappedLocationProvider poderá ser usado para conferir a localização ajustada 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 segundo plano, implemente o delegado para GMSRoadSnappedLocationProviderDelegate e defina a propriedade allowsBackgroundLocationUpdates como TRUE.

O SDK do Navigation oferece suporte a fronteiras geográficas virtuais?

Não. No contexto da navegação, remainingTimeOrdistanceChangeListener tem uma vantagem sobre uma simples fronteira geográfica virtual. É possível que a fronteira geográfica virtual não considere a geometria das vias e não esteja centralizada no ponto exato em que o motorista está navegando.

Para aproximar essa funcionalidade, use 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 como 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, inspecione a distância restante para determinar se você está perto o suficiente do local de embarque/desembarque.

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

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

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

No iOS, desative as notificações em segundo plano para locais posicionados na estrada definindo GMSRoadSnappedLocationProviderDelegate.allowsBackgroundLocationUpdates como NO.

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

O Gravador de transações rastreia embarques e desembarques com um ID exclusivo, que o Google registra para fins de faturamento. Para mais informações, consulte as Instruções de teste de implementação da sua plataforma:

Para informações sobre os aspectos de codificação das transações de faturamento, consulte Transações faturáveis.

Personalização da interface

Posso usar um código de cores para a melhor opção de trajeto?
Não. A codificação de cores para uma opção de trajeto específica não é compatível no momento.
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 HEC do destino final.

No iOS, use o seguinte:

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

Você pode desativar os cartões HEC com os seguintes métodos:

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

No Android, você usa 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 indicar um trajeto específico ao motorista ou remover trajetos alternativos?
Não. Por padrão, são fornecidas várias rotas, e a mais rápida tem prioridade. É possível afetar o trajeto padrão adicionando preferências à solicitação, como "evitar rodovias e pedágios". A adição de waypoints também afeta o trajeto.
Posso mostrar ao usuário do app um rótulo diferente para o local de destino padrão?

Sim. No Android, crie uma 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 mostra um GMSMarker para o destino.

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

Sim. No Android, use Navigator.setRouteChangedListener para receber notificações quando uma rota mudar ou 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 sobre o HEC e a distância.
    • Monitore a localização do dispositivo.
    • [opcional] Adicione outras funcionalidades exigidas pelo app para processar quando o motorista estiver fora do trajeto prescrito.

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

  1. No controlador de visualização do mapa, implemente os protocolos GMSNavigatorDelegate e GMSRoadSnappedLocationProviderDelegate.
  2. Implemente GMSNavigatorDelegate.navigatorDidChangeRoute.
  3. Acesse o novo trajeto usando as propriedades routeLegs e currentRouteLeg do GMSNavigator.
O motorista consegue 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 jornada 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 jornada que inclui uma mudança de trajeto. Se você não antecipar nenhuma mudança de rota, poderá usar 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 gerenciar cliques na notificação, use o Navigator.startGuidance(intent resumeIntent). O resume intent é disparado quando o usuário do app clica na notificação. Normalmente, o Navigator.startguidance(getIntent()) é chamado na atividade principal, que chama a atividade quando o usuário do app clica na notificação.