Criar orientação personalizada

Nesta página, abordamos 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 um trajeto da seguinte forma:

  • Primeiro, você estabelece uma sessão de navegação de forma independente e recebe uma instância do 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 ajustado à via. Use o provedor de localização se quiser que seu app tenha monitoramento contínuo de localização, como ao mostrar uma visualização de navegação com um ponto azul ao longo do trajeto.
  3. Configure um listener para instruções detalhadas de navegação curva a curva 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 texto para uma transmissão simples de instruções.
    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 a seguir da demonstração mostra a navegação estabelecida independente do controlador de visualização. Em seguida, o código adiciona um mapa de visão geral configurado para mostrar a localização atual ajustada à 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;

Transferir 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. Este 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`];