Crea istruzioni personalizzate

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

Questa procedura è diversa da quella descritta in Navigare un itinerario come segue:

  • Per prima cosa, devi stabilire una sessione di navigazione in modo indipendente e ottenere un'istanza del navigatore tramite la sessione anziché chiamando il controller della visualizzazione.
  • Configura 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. Mentre l'esperienza di navigazione di Google richiama il navigatore tramite la visualizzazione della mappa di navigazione, GMSNavigationServices controlla e riceve un flusso di eventi da una sessione di navigazione indipendentemente da un'istanza dell'interfaccia utente. Ciò significa che può essere eseguito senza un'interfaccia utente o essere passato a qualsiasi esperienza basata sull'interfaccia utente. Con questo approccio, la sessione di navigazione continua a essere eseguita nella tua app finché non viene rimossa l'ultima referenza.

  2. Stabilisci un fornitore di località con allineamento alla strada. Utilizza il fornitore di località se vuoi che la tua app esegua il monitoraggio continuo della località, ad esempio quando visualizzi una visualizzazione di navigazione con un punto blu lungo l'itinerario.

  3. Configura un listener per indicazioni passo passo dettagliate implementando il protocollo GMSNavigatorListener. Poi, trasforma queste informazioni in ciò che è necessario per la tua esperienza di navigazione personalizzata. Ad esempio:

    1. Implementa campi di solo testo per la semplice trasmissione dello schermo delle indicazioni.
    2. Progetta e compila i campi per la tua interfaccia utente.
  4. Configura un simulatore di navigazione. Questo passaggio è necessario per lo sviluppo e il testing.

Creare una sessione di navigazione indipendente

Il seguente snippet di codice della demo mostra la navigazione stabilita indipendentemente dal controller della visualizzazione. Il codice aggiunge quindi un planisfero configurato per mostrare la località corrente con allineamento 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;

Trasferire la navigazione da un'esperienza personalizzata all'esperienza di Google

Questo snippet di codice illustra come la tua app può consentire all'utente di accedere all'esperienza di navigazione di Google da un'esperienza di navigazione personalizzata. Questo snippet di codice mostra anche come 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`];