Domande frequenti

Informazioni sul prodotto

Problemi

Rete

Dati

Personalizzazione dell'interfaccia utente

Routing

Simulatore

Workflows

Informazioni sul prodotto

L'app deve implementare una finestra di dialogo con la notifica dei Termini di servizio dell'SDK di navigazione che ogni conducente deve accettare. Questa finestra di dialogo offre al conducente la possibilità di accettare i Termini di servizio. Insieme all'SDK di navigazione viene fornito un file di testo dei termini.
In Android, usa il metodo NavigationApi.showTermsAndConditionsDialog per visualizzare la finestra di dialogo contenente i termini.
In iOS, chiama GMSNavigationServices.showTermsAndConditionsDialogIfNeededWithCompanyName.
Tutte le lingue supportate da Google Maps Mobile sono automaticamente disponibili per l'SDK di navigazione. Un dispositivo ha una lingua di sistema predefinita e un'app non può modificare questa impostazione, ma ha accesso a oltre 70 lingue.

Sì. Una volta avviato, LocationListener continua a essere eseguito in background in Android. L'app continua ad agganciare la posizione e mantiene l'orientamento.

In iOS, per continuare a ricevere aggiornamenti sulla posizione della posizione e dell'orientamento in background, implementa l'aggancio alla strada e imposta allowsBackgroundLocationUpdates su YES.

Sì. Quando una route viene creata o modificata, RouteChangeListener fornisce le polilinee.

No, l'SDK di navigazione non richiede l'installazione di Google Maps Mobile sul dispositivo.
No, al momento l'SDK di navigazione non fornisce questa funzionalità.
Sì. La direzione del traffico è disponibile e visualizzata per impostazione predefinita.

Problemi

In Xcode 12, le app non vengono create correttamente per il simulatore. Come faccio a risolvere il problema?

Per risolvere il problema, apri le impostazioni di build del progetto Xcode e aggiungi arm64 a Excluded Architectures solo per le build di "Simulatore di iOS".

Per maggiori informazioni, vedi il seguente thread di StackOverflow.

GMSMapView non viene caricato.

Se GMSMapView non viene caricato:

  • Verifica che NavSDK sia abilitato nella console Cloud.
  • Se Nav SDK è installato, ma il tuo progetto non utilizza le API Nav SDK, rimuovilo dal tuo file binario.

Rete

In che modo l'SDK di navigazione gestisce una connettività scadente?
L'SDK di navigazione prememorizza il percorso per ogni percorso. Le informazioni prememorizzate nella cache includono informazioni sui percorsi per 15-20 minuti e alternative di percorso nel caso in cui il conducente si discosti dal percorso. L'SDK di navigazione calcola la posizione approssimativa utilizzando il GPS del dispositivo e i sensori.
È disponibile una modalità offline?
No, l'SDK di navigazione non offre una modalità offline al momento; tuttavia, l'SDK fornisce informazioni pre-memorizzate nella cache per un percorso.

Dati

Posso recuperare tutte le fermate/destinazioni di un viaggio prima di iniziare il percorso?

Sì. In Android, per recuperare le indicazioni stradali per un percorso, chiama Navigator.getRouteSegments().

In iOS, chiama GMSNavigator.routeLegs(read).

È disponibile la guida passo passo all'inizio di un percorso?
Sì. L'SDK di navigazione fornisce un elenco di segmenti di percorso. Inoltre, il conducente può scorrere la scheda delle indicazioni stradali nell'intestazione per visualizzare ogni manovra.
Come viene comunicato l'orario di arrivo stimato agli utenti dell'app?

In Android, svolgi i passaggi che seguono per fornire informazioni sull'orario di arrivo stimato agli utenti dell'app:

  1. Recupera il tempo e la distanza per tutte le tappe utilizzando Navigator.getTimeAndDistanceList().
  2. Inoltra queste informazioni all'applicazione client come fai attualmente per l'orario di arrivo stimato del driver.

In iOS, segui questi passaggi per fornire informazioni sull'orario di arrivo stimato agli utenti dell'app:

  1. Recupera le zampe nel percorso utilizzando Navigator.getRouteSegments().
  2. Chiama il numero GMSNavigator.timeToNextDestination per ogni tappa del viaggio.
  3. Inoltra le informazioni sull'orario all'applicazione client come fai attualmente per l'orario di arrivo stimato del driver.
RoadSnappedLocationProvider può essere utilizzato per ottenere la posizione attuale del conducente scattata se la navigazione non è in primo piano?

Sì. In Android, RoadSnappedLocationProvider viene eseguito in background per impostazione predefinita.

In iOS, per mantenere la navigazione in esecuzione in background, implementa il listener per GMSRoadSnappedLocationProviderListener e imposta la proprietà allowsBackgroundLocationUpdates su TRUE.

L'SDK di navigazione supporta il geofencing?

No. Nel contesto della navigazione, remainingTimeOrdistanceChangeListener ha un vantaggio rispetto a un semplice recinto virtuale. Il recinto virtuale potrebbe non tenere conto della geometria della strada e potrebbe non essere centrato sul punto esatto verso cui si sta dirigendo il conducente.

Puoi approssimare questa funzionalità utilizzando remainingTimeOrdistanceChangeListener.

  1. Imposta la soglia per determinare la frequenza dei callback.
  2. Controlla la distanza rimanente per raggiungere la destinazione.

Ad esempio, se imposti la soglia su 100 m, ricevi una richiamata quando la distanza dalla destinazione cambia di 100 m. Man mano che la distanza diminuisce, puoi aggiornare la soglia impostando un valore inferiore e ricevere più frequenti chiamate. Quindi, controlla la distanza rimanente per determinare se sei abbastanza vicino al punto di partenza/arrivo.

In iOS, implementa il listener GMSNavigatorListener.didUpdateRemainingDistance per gestire la distanza tra le notifiche.

Posso disattivare le notifiche quando l'app di navigazione è in background?

Sì. In Android, usa Navigator.setHeadsUpNotificationEnabled per controllare le notifiche. Questo metodo ha un argomento booleano. FALSE disattiva le notifiche; TRUE attiva le notifiche.

In iOS, disattiva la notifica in background per le posizioni agganciate alla strada impostando GMSRoadSnappedLocationProvider.allowsBackgroundLocationUpdates su NO.

Per disattivare l'elaborazione in background per altre notifiche sulla posizione, chiama GMSNavigator.sendsBackgroundNotifications(NO).

Personalizzazione dell'interfaccia utente

Posso assegnare un codice colore all'opzione di percorso migliore?
No. Al momento la codifica con colori di un'opzione di percorso specifica non è supportata.
L'SDK di navigazione può mostrare l'orario di arrivo stimato per la destinazione finale?

Sì. In Android, utilizza i seguenti metodi:

  1. Recupera il tempo e la distanza per tutte le tappe utilizzando Navigator.getTimeAndDistanceList().
  2. Nascondi l'orario di arrivo stimato della tappa corrente utilizzando NavigationFragment.setEtaCardEnabled(false).
  3. Visualizza l'orario di arrivo stimato finale.

In iOS, utilizza quanto segue:

  1. Chiama GMSNavigator.routeLegs(read).
  2. Con l'ultima tappa, chiama GMSNavigator.timeToNextDestination.
  3. Nascondi l'orario di arrivo stimato della tappa corrente utilizzando da MSMapView.settings.navigationFooterEnabled=NO a FALSE.
  4. Visualizza l'orario di arrivo stimato finale.
Come faccio a nascondere gli aggiornamenti dell'orario di arrivo stimato?

Puoi disattivare le schede Orario di arrivo stimato con i seguenti metodi:

  • In Android, usa navigationView.setEtaCardEnabled(false).
  • In iOS, utilizza GMSMapView.settings.navigationFooterEnabled=NO.
Quali personalizzazioni dell'interfaccia utente sono disponibili per le schede di intestazione e piè di pagina?

In Android, utilizzi StylingOptions per impostare lo stile dei colori di sfondo. Per nascondere o mostrare l'intestazione e il piè di pagina, utilizza le funzioni per i membri setHeaderEnabled e setFooterEnabled di NavigationFragment.

In iOS, utilizza GMSMapView.settings.navigationHeaderPrimaryBackgroundColor per impostare lo stile del colore di sfondo. Per nascondere o mostrare intestazione e piè di pagina, usa le proprietà navigationFooterEnabled e navigationHeaderEnabled di GMSUISettings.

Routing

Posso fornire a un conducente un percorso specifico o rimuovere percorsi alternativi?
No. Per impostazione predefinita, vengono forniti più percorsi e quello più veloce ha la priorità. Puoi modificare il percorso predefinito aggiungendo alla richiesta preferenze come "evita autostrade e pedaggi". L'aggiunta di tappe influisce anche sul percorso.
Posso mostrare all'utente dell'app un'etichetta diversa per la destinazione rispetto alla località di destinazione predefinita?

Sì. In Android, crea un Marker con un titolo personalizzato per la destinazione e la latitudine/longitudine. L'SDK di navigazione mostra il titolo personalizzato e le coordinate su NavigationMap.

In iOS, puoi creare e visualizzare un GMSMarker per la destinazione.

Posso utilizzare l'SDK di navigazione per monitorare le deviazioni da un percorso definito?

Sì. In Android, utilizza Navigator.setRouteChangedListener per ricevere notifiche quando un percorso cambia o viene consigliato un nuovo percorso:

  1. Registra un listener che controlla la posizione del dispositivo lungo il percorso utilizzando il metodo Navigator.setRouteChangedListener.
  2. Aggiungi il codice al gestore di eventi di callback onRouteChanged:
    • Invia un messaggio all'utente dell'app con informazioni aggiornate su orario di arrivo stimato e distanza.
    • Monitora la posizione del dispositivo.
    • [Facoltativo] Aggiungi altre funzionalità richieste dall'app per gestire quando il conducente si trova fuori dal percorso stabilito.

In iOS, utilizza GMSNavigator e i suoi ascoltatori per ricevere notifiche quando un percorso cambia o viene consigliato un nuovo percorso:

  1. Sul controller delle visualizzazioni della mappa, implementa i protocolli GMSNavigatorListener e GMSRoadSnappedLocationProviderListener.
  2. Implementa GMSNavigatorListener.navigatorDidChangeRoute.
  3. Accedi alla nuova route utilizzando le proprietà routeLegs e currentRouteLeg di GMSNavigator.
Il conducente può uscire dalla navigazione senza completare il percorso?

Sì. In Android, chiama il metodo Navigator.stopGuidance() per interrompere la navigazione.

In iOS, chiama GMSNavigator.clearDestinations.

Simulatore

Il simulatore supporta i cambi di percorso?

Sì. In Android, chiama simulateLocationsAlongNewRoute per simulare un percorso che include una modifica del percorso. Il metodo simulateLocationsAlongExistingRoute ignora le modifiche alla route esistente.

In iOS, utilizza GMSLocationSimulator.simulateAlongNewRouteToDestinations per simulare un viaggio che include una modifica del percorso. Se non prevedi eventuali modifiche al percorso, puoi utilizzare GMSLocationSimulator.simulateLocationsAlongExistingRoute o GMSLocationSimulator.simulateAlongNewRouteToDestinations.

Workflows

Come faccio a ignorare la notifica dopo aver chiuso un'attività contenente un frammento di navigazione?

La notifica di navigazione rimane visibile durante la navigazione, quando l'attività è chiusa. Quando il veicolo arriva a destinazione, la navigazione si interrompe e la notifica scompare.

Per gestire i clic sulla notifica, utilizza Navigator.startGuidance(intent resumeIntent). L'evento resume intent si attiva quando l'utente dell'app fa clic sulla notifica. In genere, Navigator.startguidance(getIntent()) viene chiamato dall'attività principale, che richiama l'attività quando l'utente dell'app fa clic sulla notifica.