Criar orientação personalizada

Esta página aborda as etapas gerais para criar orientações personalizadas como parte de uma experiência de navegação personalizada.

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

  • Primeiro, você estabelece uma sessão de navegação de forma independente e recebe uma instância de navegador pela sessão em vez de chamar o controlador de visualização.
  • Você configura 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 do mapa de navegação, o GMSNavigationServices controla e recebe um fluxo de eventos de uma sessão de navegação 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 com base em ruas. Use o provedor de local se você quiser que o app tenha monitoramento contínuo de local, como ao exibir uma visualização de navegação com um ponto azul ao longo do trajeto.
  3. Configure um listener para receber instruções detalhadas implementando o protocolo GMSNavigatorListener. Em seguida, transforme essas informações em tudo o que for necessário para sua experiência de navegação personalizada. Exemplo:
    1. Implemente campos somente de texto para exibir rotas na tela de forma simples.
    2. Projete e preencha campos para sua própria interface.
  4. Configure 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 abaixo da demonstração mostra a navegação estabelecida independentemente do controlador de visualização. O código adiciona um mapa de visão geral configurado para mostrar o local atual com ajuste de vias.

// 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 o 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 seu 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`];