Selecione a plataforma: Android iOS

Configurar interrupções em tempo real

As interrupções em tempo real são um conjunto de recursos que alertam os usuários sobre interrupções ao longo do trajeto e permitem que eles denunciem e verifiquem as interrupções encontradas. Exemplos de interrupções incluem acidentes de veículos, congestionamento, presença de policiais e radares de velocidade, obras, vias interditadas e determinadas condições climáticas. Esta página explica os recursos de interrupção em tempo real e as opções de configuração deles, incluindo considerações para apps que usam interfaces de navegação personalizadas.

Recursos de interrupção em tempo real

O SDK de navegação inclui os seguintes recursos de interrupção em tempo real como parte da experiência de navegação principal:

Esses recursos são configuráveis e ativados por padrão. As seções a seguir fornecem mais informações sobre os recursos e as opções de configuração disponíveis.

Interrupções interativas ao longo das rotas

Quando um app mostra uma rota, seja em uma visão geral da rota ou durante a navegação ativa, as interrupções atuais aparecem como chamadas ao longo da rota. Os destaques incluem um ícone que indica o tipo de interrupção.

Rótulos ao longo das rotas

É possível controlar a exibição de chamadas de atenção de interrupção ao longo das rotas usando shouldDisplayPrompts, que também controla a exibição de alertas automatizados quando um usuário se aproxima de uma interrupção.

mapView.navigator.shouldDisplayPrompts = true

Mostrar detalhes da interrupção quando um usuário tocar em um destaque

Os usuários podem tocar em um destaque para mostrar um card de informações com mais detalhes sobre a interrupção, incluindo o tipo de interrupção, a última vez que ela foi relatada e, em alguns casos, uma opção para votar se a interrupção ainda está presente. Há dois tipos diferentes de cards de informações que podem aparecer, dependendo se o usuário está em navegação ativa. As opções de configuração variam de acordo com cada tipo.

Cards de informações de destaque nas informações gerais da rota, antes de iniciar a navegação ativa

Quando um usuário toca em um destaque na visão geral de uma rota, antes de iniciar a navegação ativa, um card de informações aparece com mais informações sobre a interrupção.

Card de informações da visão geral

É possível controlar a capacidade dos usuários de tocar em chamadas de interrupção nas informações gerais da rota para mostrar mais informações usando showsIncidentCards.

mapView.settings.showsIncidentCards = true

Cards de informações de destaque durante a navegação ativa

Quando uma chamada de atenção de interrupção aparece em uma rota durante a navegação ativa, os usuários podem tocar nela para mostrar um card de informações com mais detalhes sobre a interrupção, incluindo o tipo e a última vez que ela foi informada, além de botões para votar se a interrupção ainda está presente. Os votos enviados pelos usuários são processados pelo Google e podem ser exibidos no mapa para outros usuários do Google Maps e do SDK de navegação, além de serem usados para determinar se a interrupção vai continuar sendo mostrada.

Card de informações da navegação ativa

É possível controlar a exibição e a capacidade de tocar em destaques de interrupção durante a navegação ativa usando shouldDisplayPrompts, que também controla a exibição de destaques ao longo das rotas e a exibição de alertas automáticos quando um usuário se aproxima de uma interrupção.

mapView.navigator.shouldDisplayPrompts = true

Alertas de interrupção automatizada com votação durante a navegação ativa

Durante a navegação ativa, quando um usuário se aproxima de uma interrupção em um trajeto, uma solicitação aparece com informações sobre a interrupção e botões para votar se ela ainda está presente. Os votos enviados pelos usuários são processados pelo Google e podem ser exibidos no mapa para outros usuários do SDK do Google Maps e do SDK de navegação, além de serem usados para determinar se a interrupção vai continuar sendo mostrada.

Card de informações da navegação ativa

É possível configurar a exibição de avisos durante a navegação ativa usando shouldDisplayPrompts, que também controla a exibição de chamadas ao longo das rotas.

mapView.navigator.shouldDisplayPrompts = true

Relatório de interrupção durante a navegação ativa

Durante o modo de navegação ativa, um botão aparece na interface de navegação que permite que os usuários informem novas interrupções ao longo da rota. Quando um usuário toca no botão, um menu com os tipos de interrupção disponíveis para denúncia aparece. Os relatórios enviados pelos usuários são processados pelo Google e podem ser exibidos no mapa para outros usuários do SDK do Maps e do Navigation.

Botão de denúncia Menu de relatórios

É possível configurar a visibilidade do botão de denúncia durante a navegação ativa usando navigationReportIncidentButtonEnabled.

// Enables the incident reporting FAB to show in situations where incident
// reporting is possible.
mapView.settings.navigationReportIncidentButtonEnabled = true

Trabalhar com interfaces de navegação personalizadas

Se a implementação do SDK Navigation incluir elementos de interface personalizados, você precisará considerar os elementos de interrupção em tempo real para evitar conflitos.

Posicionamento do botão do relatório

Por padrão, o botão de denúncia de interrupção fica no canto inferior/traseiro do mapa, do lado direito para idiomas da esquerda para a direita e do lado esquerdo para idiomas da direita para a esquerda. Se você precisar mover o botão de relatório para criar espaço para elementos de interface personalizados, use um bottomTrailingButtonsLayoutGuide.

Swift

// Create a new layout guide
let topRightLayoutGuide = UILayoutGuide()
self.view.addLayoutGuide(topRightLayoutGuide)

// Activate constraints using fixed constants here as an example
// assuming the current reporting button is of fixed height
topRightLayoutGuide.topAnchor.constraint(equalTo: _mapView.navigationHeaderLayoutGuide.bottomAnchor, constant: 50).isActive = true
topRightLayoutGuide.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor, constant: -14).isActive = true

// Assign the layout guide
_mapView.bottomTrailingButtonsLayoutGuide = topRightLayoutGuide

// Create an alternate layout guide to use when the header and the footer are not full width
let topRightAlternateLayoutGuide = UILayoutGuide()
self.view.addLayoutGuide(topRightAlternateLayoutGuide)

// Activate constraints using fixed constants here as an example
// assuming the current RTD button is of fixed height
topRightAlternateLayoutGuide.topAnchor.constraint(equalTo: _mapView.navigationHeaderLayoutGuide.bottomAnchor, constant: 20).isActive = true
topRightAlternateLayoutGuide.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor, constant: -10).isActive = true

// Assign the layout guide
_mapView.bottomTrailingButtonsAlternateLayoutGuide = topRightAlternateLayoutGuide

Objective-C

// Create a new layout guide
UILayoutGuide *topRightLayoutGuide = [[UILayoutGuide alloc] init];
[self.view addLayoutGuide:topRightLayoutGuide];

// Activate constraints using fixed constants here as an example
// assuming the current RTD button is of fixed height
[[topRightLayoutGuide.topAnchor
    constraintEqualToAnchor:_mapView.navigationHeaderLayoutGuide.bottomAnchor
                   constant:50]
    setActive:YES];

[[topRightLayoutGuide.trailingAnchor
    constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor
                   constant:-14]
    setActive:YES];

// Assign the layout guide
_mapView.bottomTrailingButtonsLayoutGuide = topRightLayoutGuide;

// Create an alternate layout guide to use when the header and the footer are not full width
UILayoutGuide *topRightAlternateLayoutGuide = [[UILayoutGuide alloc] init];
[self.view addLayoutGuide:topRightAlternateLayoutGuide];

// Activate constraints using fixed constants here as an example
// assuming the current RTD button is of fixed height
[[topRightAlternateLayoutGuide.topAnchor
    constraintEqualToAnchor:_mapView.navigationHeaderLayoutGuide.bottomAnchor
                   constant:50]
    setActive:YES];

[[topRightAlternateLayoutGuide.trailingAnchor
    constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor
                   constant:-14]
    setActive:YES];

// Assign the layout guide
_mapView.bottomTrailingButtonsAlternateLayoutGuide = topRightAlternateLayoutGuide;

API Prompt Visibility (experimental)

A API Prompt Visibility ajuda a evitar conflitos entre elementos da interface gerados pelo SDK de navegação e seus próprios elementos da interface personalizados, adicionando um listener para receber um callback antes que um elemento da interface do SDK de navegação esteja prestes a aparecer e assim que o elemento for removido. É possível receber callbacks para elementos de interrupção em tempo real, incluindo cards de informações, comandos e o menu de relatórios de interrupção, além de outras notificações geradas pelo SDK de navegação.

Swift

// Additional methods added to GMSNavigatorListener
...
func navigatorWillPresentPrompt(_ navigator: GMSNavigator) {
  // Hide any sort of custom UI element.
}

func navigatorDidDismissPrompt(_ navigator: GMSNavigator) {
  // Show any sort of custom UI element.
}
...

Objective-C

// Additional methods added to GMSNavigatorListener
...
- (void)navigatorWillPresentPrompt:(GMSNavigator *)navigator {
  // Hide any sort of custom UI element.
}

- (void)navigatorDidDismissPrompt:(GMSNavigator *)navigator {
  // Show any sort of custom UI element.
}
...