Segui questa guida per tracciare un percorso all'interno della tua app verso una singola destinazione, utilizzando l'SDK di navigazione per iOS.
Panoramica
- Integra l'SDK di navigazione nella tua app, come descritto nella sezione Configura il progetto.
- Configurare una
GMSMapView
. - Chiedi all'utente di accettare i Termini e condizioni e di autorizzare la posizione servizi e notifiche in background.
- Crea un array contenente una o più destinazioni.
Definisci un
GMSNavigator
per controllare la navigazione passo passo.- Aggiungi destinazioni utilizzando
setDestinations
. - Imposta
isGuidanceActive
atrue
per avviare la navigazione. - Utilizza
simulateLocationsAlongExistingRoute
per simulare l'avanzamento del veicolo lungo il percorso, a scopo di test, eseguire il debug e la dimostrazione dell'app.
- Aggiungi destinazioni utilizzando
Visualizza il codice
Chiedi all'utente le autorizzazioni necessarie
Prima di utilizzare l'SDK di navigazione, l'utente deve accettare il Termini e condizioni e autorizzano l'utilizzo dei Servizi di geolocalizzazione, ovvero richiesta per la navigazione. Se l'app viene eseguita in background, deve anche e richiedere all'utente di autorizzare le notifiche di avviso. Questa sezione mostra come visualizzare le richieste di autorizzazione richieste.
Autorizza servizi di geolocalizzazione
L'SDK di navigazione utilizza i servizi di localizzazione, che richiedono autorizzazione dell'utente. Per attivare i servizi di geolocalizzazione e visualizzare l'autorizzazione segui questi passaggi:
- Aggiungi la chiave
NSLocationAlwaysUsageDescription
aInfo.plist
. Per il valore, aggiungi una breve spiegazione del motivo per cui la tua app richiede la posizione i servizi di machine learning. Ad esempio: "Questa app richiede l'autorizzazione per usare i servizi di geolocalizzazione per: navigazione passo passo".
Per visualizzare la finestra di dialogo di autorizzazione, chiama
requestAlwaysAuthorization()
di l'istanza di Gestore delle località.
Swift
self.locationManager.requestAlwaysAuthorization()
Objective-C
[_locationManager requestAlwaysAuthorization];
Autorizza le notifiche di avviso per indicazioni in background
L'SDK di navigazione richiede l'autorizzazione dell'utente per fornire un avviso notifiche quando l'app è in esecuzione in background. Aggiungi il seguente codice per richiedere all'utente l'autorizzazione a visualizzare queste notifiche:
Swift
UNUserNotificationCenter.current().requestAuthorization(options: [.alert]) {
granted, error in
// Handle denied authorization to display notifications.
if !granted || error != nil {
print("User rejected request to display notifications.")
}
}
Objective-C
// Request authorization for alert notifications.
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
UNAuthorizationOptions options = UNAuthorizationOptionAlert;
[center requestAuthorizationWithOptions:options
completionHandler:
^(
BOOL granted,
NSError *_Nullable error) {
if (!error && granted) {
NSLog(@"iOS Notification Permission: newly Granted");
} else {
NSLog(@"iOS Notification Permission: Failed or Denied");
}
}];
Accetta i Termini e condizioni
Utilizza il seguente codice per mostrare la finestra di dialogo Termini e condizioni e attiva quando l'utente accetta i termini. Tieni presente che questo esempio include il codice per i servizi di geolocalizzazione e le notifiche di avviso (mostrate in precedenza).
Swift
let termsAndConditionsOptions = GMSNavigationTermsAndConditionsOptions(companyName: "Ride Sharing Co.")
GMSNavigationServices.showTermsAndConditionsDialogIfNeeded(
with: termsAndConditionsOptions) { termsAccepted in
if termsAccepted {
// Enable navigation if the user accepts the terms.
self.mapView.isNavigationEnabled = true
self.mapView.settings.compassButton = true
// Request authorization to use location services.
self.locationManager.requestAlwaysAuthorization()
// Request authorization for alert notifications which deliver guidance instructions
// in the background.
UNUserNotificationCenter.current().requestAuthorization(options: [.alert]) {
granted, error in
// Handle rejection of notification authorization.
if !granted || error != nil {
print("Authorization to deliver notifications was rejected.")
}
}
} else {
// Handle rejection of terms and conditions.
}
}
Objective-C
GMSNavigationTermsAndConditionsOptions *termsAndConditionsOptions = [[GMSNavigationTermsAndConditionsOptions alloc] initWithCompanyName:@"Ride Sharing Co."];
[GMSNavigationServices
showTermsAndConditionsDialogIfNeededWithOptions:termsAndConditionsOptions
callback:^(BOOL termsAccepted) {
if (termsAccepted) {
// Enable navigation if the user accepts the terms.
_mapView.navigationEnabled = YES;
_mapView.settings.compassButton = YES;
// Request authorization to use the current device location.
[_locationManager requestAlwaysAuthorization];
// Request authorization for alert notifications which deliver guidance instructions
// in the background.
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
UNAuthorizationOptions options = UNAuthorizationOptionAlert;
[center requestAuthorizationWithOptions:options
completionHandler:
^(
BOOL granted,
NSError *_Nullable error) {
if (!error && granted) {
NSLog(@"iOS Notification Permission: newly Granted");
} else {
NSLog(@"iOS Notification Permission: Failed or Denied");
}
}];
} else {
// Handle rejection of the terms and conditions.
}
}];
Crea un percorso e avvia le indicazioni
Per tracciare un percorso, chiama il metodo setDestinations()
di Navigator con un array
contenente una o più destinazioni (GMSNavigationWaypoint
) da visitare. Se l'operazione riesce
una volta calcolata, il percorso viene mostrato sulla mappa. Per avviare le indicazioni lungo il percorso:
che iniziano con la prima destinazione, imposta isGuidanceActive
su true
nel
o la richiamata.
L'esempio seguente mostra:
- Creazione di un nuovo percorso con due destinazioni.
- Indicazioni iniziali.
- Attivazione notifiche di indicazioni in background.
- Simulazione di un viaggio lungo il percorso (facoltativo).
- Imposto la modalità fotocamera su "Segui" (facoltativo)
Swift
func startNav() {
var destinations = [GMSNavigationWaypoint]()
destinations.append(GMSNavigationWaypoint.init(placeID: "ChIJnUYTpNASkFQR_gSty5kyoUk",
title: "PCC Natural Market")!)
destinations.append(GMSNavigationWaypoint.init(placeID:"ChIJJ326ROcSkFQRBfUzOL2DSbo",
title:"Marina Park")!)
mapView.navigator?.setDestinations(destinations) { routeStatus in
self.mapView.navigator?.isGuidanceActive = true
self.mapView.locationSimulator?.simulateLocationsAlongExistingRoute()
self.mapView.cameraMode = .following
}
}
Objective-C
- (void)startNav {
NSArray<GMSNavigationWaypoint *> *destinations =
@[[[GMSNavigationWaypoint alloc] initWithPlaceID:@"ChIJnUYTpNASkFQR_gSty5kyoUk"
title:@"PCC Natural Market"],
[[GMSNavigationWaypoint alloc] initWithPlaceID:@"ChIJJ326ROcSkFQRBfUzOL2DSbo"
title:@"Marina Park"]];
[_mapView.navigator setDestinations:destinations
callback:^(GMSRouteStatus routeStatus){
[_mapView.locationSimulator simulateLocationsAlongExistingRoute];
_mapView.navigator.guidanceActive = YES;
_mapView.cameraMode = GMSNavigationCameraModeFollowing;
}];
}
Per informazioni sugli ID luogo, consulta ID luogo.
Imposta modalità di viaggio
La modalità di viaggio determina il tipo di percorso che verrà recuperato e il modo è determinato il corso dell'utente. Puoi impostare una delle quattro modalità di viaggio per un percorso: in auto, in bicicletta, a piedi e in taxi. In modalità "in auto" e "taxi", il percorso dell'utente in base alla direzione di marcia; in bicicletta e a piedi il percorso rappresentate dalla direzione in cui è rivolto il dispositivo.
Imposta la travelMode
della vista mappa, come mostrato nell'esempio seguente:
Swift
self.mapView.travelMode = .cycling
Objective-C
_mapView.travelMode = GMSNavigationTravelModeCycling;
Imposta le strade da evitare
Utilizza le proprietà BOOL
avoidsHighways
e avoidsTolls
da evitare
autostrade e/o strade a pedaggio lungo un percorso.
Swift
self.mapView.navigator?.avoidsTolls = true
Objective-C
_mapView.navigator.avoidsTolls = YES;
Ricerca di PlaceID
Puoi utilizzare lo strumento di ricerca PlaceID.
per trovare gli ID luogo da utilizzare per le destinazioni dei percorsi. Aggiungi una destinazione da un placeID
con GMSNavigationWaypoint
.
Testo mobile
Puoi aggiungere testo mobile in qualsiasi punto dell'app, a condizione che non viene trattata. L'SDK di navigazione non supporta l'ancoraggio il testo a una latitudine/longitudine sulla mappa o a un'etichetta. Per ulteriori informazioni, consulta le finestre informative.