Che cos'è la navigazione personalizzata?

Un'esperienza di navigazione personalizzata può essere qualsiasi cosa, da un'app che elimina completamente le indicazioni di svolta con la navigazione solo come processo in background a un'app che mostra indicazioni altamente personalizzate su una schermata separata dal dispositivo su cui è in esecuzione il navigatore.

Che cos'è l'esperienza di navigazione personalizzata?

  • Avvia la navigazione: crei una sessione di navigazione. Come nel caso dell'esperienza di navigazione di Google, un'esperienza di navigazione personalizzata comporta comunque la creazione di un'istanza di navigazione e l'impostazione della destinazione. Tuttavia, con un'esperienza di navigazione personalizzata, puoi ottenere questo risultato stabilindo innanzitutto una sessione di navigazione utilizzando GMSNavigationServices. Una sessione di navigazione è un oggetto non UI basato su stato che può funzionare con un controller di visualizzazione o senza.

    Guarda la demo:il download dell'SDK di navigazione contiene una demo che puoi eseguire per visualizzare un esempio di esperienza di navigazione che passa dalla guida passo passo della navigazione standard a un'esperienza di navigazione che mostra solo la posizione del dispositivo che si sposta lungo una polilinea stradale.

  • Navigazione attiva, tu fornisci. Ecco un'altra differenza fondamentale tra un'esperienza di navigazione fornita da Google e un'esperienza di navigazione personalizzata. Anziché affidare indicazioni al gestore eventi integrato di Navigator SDK, attiva il feed passo passo e implementa i gestori di eventi tramite GMSNavigatorListener. In questo modo la tua esperienza può rispondere agli eventi descritti nella sezione Ascoltare gli eventi di navigazione.

  • Termina la navigazione, fornisci tu. Come per l'esperienza di navigazione di Google, la navigazione personalizzata richiede anche di terminare la navigazione nel modo più adatto all'esperienza con l'app.

La tabella seguente descrive alcuni scenari di navigazione personalizzata.

Scenario di esempio

Passi di alto livello

Devi fornire indicazioni al conducente di solo testo per dispositivi di piccole dimensioni come i veicoli a due ruote.

Crea il tuo navigatore e imposta le indicazioni passo passo come feed di dati su un dispositivo con schermo piccolo mentre il navigatore è in esecuzione sul cellulare del conducente al di fuori della sua visuale immediata. Consulta la pagina Attivare il feed di dati passo passo.

I conducenti che utilizzano la tua app vogliono avere una mappa panoramica per la maggior parte del loro viaggio, con indicazioni passo passo minime per le strade cittadine.

L'app deve consentire ai conducenti di entrare e uscire dall'esperienza di navigazione su Google in base alle loro esigenze, senza alternare le impostazioni del navigatore per la modalità di destinazione e quella di viaggio.

Per i clienti dei servizi di mobilità: i conducenti spesso percorrono percorsi prestabiliti con un'elevata familiarità e non hanno bisogno di alcuna guida, ma è necessario un modo per garantire che il sistema di gestione del veicolo sia in grado di gestire le consegne o le corse.

Imposta un navigatore. Imposta la destinazione e ricevi aggiornamenti sulla posizione. Integra l'SDK Driver nella tua app. Per maggiori dettagli, consulta la guida introduttiva all'SDK Driver per On-demand Rides and Deliveries o Last Mile Fleet Solution.

Crea indicazioni personalizzate

Questa sezione illustra i passaggi generali da seguire per creare indicazioni personalizzate.

Questo processo è diverso da quello descritto in Percorrere un percorso, come indicato di seguito:

  • Innanzitutto, stabilisci una sessione di navigazione in modo indipendente e ottieni un'istanza del navigatore tramite la sessione anziché chiamando il controller di visualizzazione.
  • 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. Se 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 in modo indipendente da un'istanza UI. Ciò significa che può essere eseguita senza UI o essere trasmessa a qualsiasi esperienza basata sull'interfaccia utente. Con questo approccio, la sessione di navigazione continua a essere eseguita nella tua app fino a quando non viene rimosso l'ultimo riferimento.
  2. Stabilisci un fornitore di servizi di localizzazione basati sulla strada. Utilizza il fornitore della posizione se vuoi che la tua app abbia il monitoraggio continuo della posizione, ad esempio quando viene mostrata una visualizzazione di navigazione con un punto blu lungo il percorso.
  3. Imposta un listener per indicazioni dettagliate passo passo implementando il protocollo GMSNavigatorListener. Poi, trasforma queste informazioni in quelle necessarie per la tua esperienza di navigazione personalizzata. Ad esempio:
    1. Implementare campi di solo testo per trasmettere in modo semplice le indicazioni stradali sullo schermo.
    2. Progetta e compila i campi per la tua UI.
  4. Configurare un simulatore di navigazione. Ciò è necessario per lo sviluppo e i test.

Crea una sessione di navigazione indipendente

I seguenti snippet di codice della demo mostrano la navigazione stabilita in modo indipendente dal controller di visualizzazione. Il codice aggiunge poi una mappa panoramica configurata per mostrare la posizione attuale rilevata sulla 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;

Passare 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`];