Crea istruzioni personalizzate

Questa pagina illustra i passaggi generali da seguire per creare indicazioni personalizzate nell'ambito di un'esperienza di navigazione personalizzata.

Questa procedura è diversa da quella descritta in Navigazione di una route come segue:

  • Devi innanzitutto stabilire una sessione di navigazione in modo indipendente e ottenere un'istanza del navigatore tramite la sessione anziché chiamare il controller della vista.
  • Puoi impostare un listener di eventi per rispondere agli eventi di navigazione e gestirli.
  1. Crea una sessione di navigazione utilizzando GMSNavigationService.createNavigationSession e avvia la navigazione con una chiamata setDestination. Quando l'esperienza di navigazione Google richiama il navigatore tramite la visualizzazione mappa di navigazione, GMSNavigationServices controlla e riceve uno stream di eventi da una sessione di navigazione in modo indipendente da un'istanza UI. Ciò significa che può essere eseguito senza una UI o essere passato a qualsiasi esperienza basata sulla UI. Con questo approccio, la sessione di navigazione continua a essere eseguita nella tua app finché non viene rimosso l'ultimo riferimento.
  2. Stabilisci un fornitore di servizi di localizzazione con aggiornamenti stradali. Utilizza il fornitore della posizione se vuoi che la tua app abbia il monitoraggio continuo della posizione, ad esempio per visualizzare una navigazione con un punto blu lungo il percorso.
  3. Configura un listener per indicazioni dettagliate passo passo implementando il protocollo GMSNavigatorListener. Poi trasforma queste informazioni in tutto ciò è necessario per la tua esperienza di navigazione personalizzata. Ad esempio:
    1. Implementa campi di solo testo per una semplice trasmissione dello schermo delle indicazioni stradali.
    2. Progetta e compila i campi per la tua UI.
  4. Configura un simulatore di navigazione. È necessaria per lo sviluppo e il test.

Crea una sessione di navigazione indipendente

Il seguente snippet di codice della demo mostra la navigazione stabilita indipendentemente dal controller della vista. Il codice aggiunge quindi una mappa panoramica configurata per mostrare la posizione attuale dell'immagine agganciata alla strada.

// 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;

Trasmettere la navigazione da un'esperienza personalizzata all'esperienza Google

Questo snippet di codice illustra in che modo la tua app può consentire all'utente di accedere all'esperienza di navigazione su Google da un'esperienza di navigazione personalizzata. Questo snippet di codice mostra anche in che modo la tua app esegue questa transizione durante la condivisione della mappa.

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

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

`…`

[`_mapView enableNavigationWithSession:_navigationSession`];