Criar orientação personalizada

Esta página aborda as etapas avançadas para criar uma orientação personalizada como parte de uma experiência de navegação personalizada.

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

  • Primeiro, estabeleça uma sessão de navegação de forma independente e obtenha uma instância do 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 inicie a navegação 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 em execução no app até que a última referência seja removida.
  2. Estabelecer um provedor de localização capturada pela via Use o provedor de localização se você quiser que o app tenha monitoramento de localização contínuo, 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 das rotas.
    2. Projete e preencha campos para sua própria interface.
  4. Configurar um simulador de navegação Isso é necessário para desenvolvimento e testes.

Criar uma sessão de navegação independente

O snippet de código a seguir da demonstração mostra a navegação estabelecida de forma independente do controlador de visualização. Em seguida, ele adiciona um mapa de visão geral configurado para mostrar o local atual da 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;

Como 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 a partir de 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`];