O que é a navegação personalizada?

Uma experiência de navegação personalizada pode significar qualquer coisa, desde um app que elimina a orientação de virar totalmente com a navegação apenas como um processo em segundo plano a um app que projeta orientações altamente personalizadas para uma tela separada do dispositivo que executa o navegador.

O que é a experiência de navegação personalizada?

  • Iniciar navegação: você cria uma sessão de navegação. Assim como na experiência de navegação do Google, uma experiência de navegação personalizada ainda envolve a criação de uma instância de navegação e a configuração do destino. No entanto, com uma experiência de navegação personalizada, você pode fazer isso estabelecendo primeiro uma sessão de navegação usando GMSNavigationServices. Uma sessão de navegação é um objeto com estado que não é da interface e pode operar com ou sem um controlador de visualização.

    Confira a demonstração:o download do SDK do Navigation contém uma demonstração que pode ser executada para ver um exemplo de uma experiência de navegação que alterna entre a orientação guiada na navegação padrão para uma experiência de navegação que mostra apenas o local do dispositivo se movendo ao longo de uma polilinha de via.

  • Navegação ativa por você. Aqui está outra diferença importante entre uma experiência de navegação oferecida pelo Google e uma personalizada. Em vez de fornecer a orientação ao gerenciador de eventos integrado do SDK do Navigation, ative o feed detalhado e implemente manipuladores de eventos usando o GMSNavigatorListener. Isso permite que sua experiência responda aos eventos descritos em Detectar eventos de navegação.

  • Encerrar a navegação: você é o responsável por isso. Assim como na experiência de navegação do Google, a navegação personalizada também exige que você a encerre da maneira mais adequada para a experiência do app.

A tabela a seguir descreve alguns cenários de navegação personalizados.

Exemplo

Etapas avançadas

Você precisa fornecer orientação ao motorista somente em texto para dispositivos pequenos, como veículos de duas rodas.

Crie seu navegador e configure a orientação guiada como um feed de dados em um dispositivo de tela pequena enquanto o navegador é executado no smartphone do motorista fora da visualização imediata. Consulte Ativar feed de dados de navegação guiada.

Os motoristas que usam seu app querem um mapa de visão geral da maior parte do trajeto, com orientações de navegação guiadas mínimas nas ruas da cidade.

Seu app deve permitir que os motoristas entrem e saiam da experiência de navegação do Google conforme necessário, sem alterar as configurações do navegador para os modos de destino e viagem.

Para clientes de serviços de mobilidade: os motoristas geralmente percorrem trajetos estabelecidos com muita familiaridade e não precisam de orientação, mas você precisa de uma maneira de garantir que o sistema de gerenciamento de veículos possa gerenciar entregas ou viagens.

Configure um navegador. Defina o destino e receba atualizações de localização. Integre o SDK do Driver ao seu app. Para saber mais, consulte Como começar a usar o SDK do Driver para Viagens e entregas sob demanda ou Solução Last Mile Fleet.

Criar orientações personalizadas

Esta seção aborda as etapas avançadas que você segue para criar orientações personalizadas.

Esse processo é diferente do descrito em Navegar por uma rota da seguinte maneira:

  • Primeiro, você estabelece uma sessão de navegação de forma independente e recebe uma instância de navegador por meio da sessão, em vez de chamar o controlador de visualização.
  • Configure um listener de eventos para responder e gerenciar eventos de navegação.

  1. Crie uma sessão de navegação usando GMSNavigationService.createNavigationSession e comece a navegar com uma chamada setDestination. Quando a experiência de navegação do Google invoca o navegador pela visualização de mapa, o GMSNavigationServices controla e recebe um fluxo de eventos de uma sessão de navegação de forma independente de uma instância da interface. Isso significa que ele pode ser executado sem uma interface ou ser transmitido para qualquer experiência baseada em interface. Com essa abordagem, a sessão de navegação continua sendo executada no app até que a última referência seja removida dele.
  2. Estabeleça um provedor de localização usando um trajeto capturado por uma rota. Use o provedor de localização se quiser que seu app tenha monitoramento contínuo da localização, por exemplo, ao exibir uma visualização de navegação com um ponto azul ao longo do trajeto.
  3. Configure um listener para receber orientações detalhadas implementando o protocolo GMSNavigatorListener. Em seguida, transforme essas informações no que for necessário para sua experiência de navegação personalizada. Exemplo:
    1. Implemente campos somente de texto para transmitir a tela de rotas com facilidade.
    2. Crie e preencha campos para sua interface.
  4. Configurar um simulador de navegação Isso é necessário para desenvolvimento e testes.

Criar uma sessão de navegação independente

Os snippets de código a seguir da demonstração mostram a navegação estabelecida de forma independente do controlador de visualizações. Em seguida, o código adiciona um mapa de visão geral configurado para mostrar a localização atual capturada na via.

// Create the navigation session.

 _navigationSession = [GMSNavigationServices createNavigationSession];
 GMSRoadSnappedLocationProvider *roadSnappedLocationProvider =
     _navigationSession.roadSnappedLocationProvider;
 [roadSnappedLocationProvider startUpdatingLocation];
 GMSNavigator *navigator = _navigationSession.navigator;
 [navigator addListener:self];
 navigator.voiceGuidance = GMSNavigationVoiceGuidanceSilent;
 navigator.sendsBackgroundNotifications = NO;
 _navigationSession.started = YES;
​​ [navigator setDestinations:@[ destination ]
                   callback:^(GMSRouteStatus routeStatus) {
                      // …handle changes in route status.
                    }];

 // Add an overview map.
 _mapView = [[GMSMapView alloc] initWithFrame:CGRectZero];
 [self.mainStackView addArrangedSubview:_mapView];
 [self.mainStackView setNeedsLayout];
 _mapView.settings.compassButton = YES;
 _mapView.delegate = self;
 _mapView.myLocationEnabled = YES;
 _mapView.roadSnappedMyLocationSource = roadSnappedLocationProvider;

Transmitir a navegação de uma experiência personalizada para a experiência do Google

Este snippet de código ilustra como seu app pode permitir que o usuário entre na experiência de navegação do Google em uma experiência de navegação personalizada. Esse snippet de código também mostra como o app faz essa transição ao compartilhar o mapa.

`UIButton *button = [UIButton buttonWithType:UIButtonTypePlain`];

[`button addTarget:self action:@selector(didTapEnterGoogleNavigationButton:)
forControlState:[_directionsButton addTarget:self`];

`…`

[`_mapView enableNavigationWithSession:_navigationSession`];