Suivez ce guide pour tracer un itinéraire dans votre application vers une seule destination à l'aide du SDK Navigation pour iOS.
Présentation
- Intégrez le SDK Navigation à votre application, comme décrit dans la section Configurer votre projet.
- Configurez un
GMSMapView. - Invitez l'utilisateur à accepter les conditions d'utilisation et à autoriser les services de localisation et les notifications en arrière-plan.
- Créez un tableau contenant une ou plusieurs destinations.
Définissez un
GMSNavigatorpour contrôler la navigation détaillée.- Ajoutez des destinations à l'aide de
setDestinations. - Définissez
isGuidanceActivesurtruepour lancer la navigation. - Utilisez
simulateLocationsAlongExistingRoutepour simuler la progression du véhicule sur l'itinéraire, à des fins de test, de débogage et de démonstration de votre application.
- Ajoutez des destinations à l'aide de
Voir le code
Demander à l'utilisateur les autorisations nécessaires
Avant d'utiliser le SDK Navigation, l'utilisateur doit accepter les conditions d'utilisation et autoriser l'utilisation des services de localisation, qui sont nécessaires à la navigation. Si votre application s'exécute en arrière-plan, elle doit également inviter l'utilisateur à autoriser les notifications d'alerte de guidage. Cette section explique comment afficher les invites d'autorisation requises.
Autoriser les services de localisation
Le SDK Navigation utilise les services de localisation, qui nécessitent l'autorisation de l'utilisateur. Pour activer les services de localisation et afficher la boîte de dialogue d'autorisation, procédez comme suit :
Activez les fonctionnalités de localisation et d'arrière-plan dans Xcode :
- Ouvrez votre cible dans Xcode et sélectionnez l'onglet Signature et fonctionnalités. Pour en savoir plus, consultez le guide d'Apple sur l'ajout de fonctionnalités à votre application.
- Ajoutez les fonctionnalités Position (toujours) et Position (lors de l'utilisation). Dans le champ de texte de chacun, ajoutez une brève explication indiquant pourquoi votre application a besoin des services de localisation (par exemple, "Cette application a besoin d'une autorisation pour utiliser les services de localisation pour la navigation guidée.").
- Ajoutez la fonctionnalité Modes d'arrière-plan, puis cochez la case Mises à jour de la position. Sans cette fonctionnalité, l'application plante au démarrage de la navigation. Pour en savoir plus, consultez le guide d'Apple sur la gestion des mises à jour de localisation en arrière-plan.
Pour afficher la boîte de dialogue d'autorisation, appelez la méthode
requestAlwaysAuthorization()de l'instance du gestionnaire de localisation.
Swift
self.locationManager.requestAlwaysAuthorization()
Objective-C
[_locationManager requestAlwaysAuthorization];
Consultez la documentation Apple complète sur l'autorisation des services de localisation.
Autoriser les notifications d'alerte pour les conseils en arrière-plan
Le SDK Navigation a besoin de l'autorisation de l'utilisateur pour fournir des notifications d'alerte lorsque l'application s'exécute en arrière-plan. Ajoutez le code suivant pour demander à l'utilisateur l'autorisation d'afficher ces notifications :
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");
}
}];
Autoriser les capteurs de mouvement
Dans une future version majeure, le SDK Navigation pour iOS combinera les données de localisation de base avec les capteurs de mouvement de l'appareil (CMAltimeter) pour calculer l'altitude de l'itinéraire. Lorsque le SDK accède à l'altimètre, iOS utilise automatiquement cette chaîne pour demander l'autorisation à l'utilisateur.
L'ajout de cette clé n'a aucune incidence sur le comportement actuel, mais empêche les plantages d'initialisation lorsque vous mettez à niveau le SDK ultérieurement.
Pour préparer les futures mises à niveau du SDK, configurez les autorisations du capteur de mouvement comme suit :
Ouvrez votre cible dans Xcode et accédez à l'onglet Info, ou ouvrez votre fichier
Info.plist.Ajoutez une clé : Privacy - Motion Usage Description (
NSMotionUsageDescription).Ajoutez une brève explication pour l'utilisateur. Par exemple : "Cette application nécessite l'accès au capteur de mouvement pour calculer l'altitude et améliorer la précision du routage sur la carte."
Acceptez les conditions d'utilisation
Utilisez le code suivant pour afficher la boîte de dialogue des conditions d'utilisation et activer la navigation lorsque l'utilisateur accepte les conditions. Notez que cet exemple inclut le code des services de localisation et des notifications d'alerte de guidage (affichées précédemment).
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.
}
}];
Créer un itinéraire et démarrer le guidage
Pour tracer un itinéraire, appelez la méthode setDestinations du navigateur avec un tableau d'une ou plusieurs destinations GMSNavigationWaypoint à visiter. Si l'itinéraire est calculé avec succès, il s'affiche sur la carte. Pour démarrer le guidage le long de l'itinéraire, définissez isGuidanceActive sur true dans le rappel.
L'exemple suivant montre :
- Créer un itinéraire avec une destination
- Démarrer l'assistance guidée
- Activer les notifications de conseils en arrière-plan.
- Simulez le trajet (facultatif).
- Définissez le mode de caméra sur "Suivre" (facultatif).
Swift
func startNav() {
var destinations = [GMSNavigationWaypoint]()
destinations.append(GMSNavigationWaypoint.init(placeID: "ChIJnUYTpNASkFQR_gSty5kyoUk",
title: "PCC Natural Market")!)
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"]];
[_mapView.navigator setDestinations:destinations
callback:^(GMSRouteStatus routeStatus){
[_mapView.locationSimulator simulateLocationsAlongExistingRoute];
_mapView.navigator.guidanceActive = YES;
_mapView.cameraMode = GMSNavigationCameraModeFollowing;
}];
}
Pour en savoir plus sur les ID de lieu, consultez ID de lieu.
Scénarios à plusieurs arrêts
Vous pouvez configurer jusqu'à 25 points de repère.
La méthode setDestinations n'est pas compatible avec les trajets à plusieurs arrêts. Utilisez continueToNextDestinationWithCompletion() pour faire passer le point de cheminement à la prochaine étape du parcours.
Définir le mode de transport
Le mode de déplacement définit à la fois le type d'itinéraire à récupérer et la manière de déterminer le parcours de l'utilisateur. Vous pouvez définir l'un des quatre modes de transport pour un itinéraire : voiture, vélo, marche et taxi. En mode conduite et taxi, le cap de l'utilisateur est basé sur la direction du déplacement. En mode vélo et marche, le cap est représenté par la direction vers laquelle l'appareil est orienté (vers le haut de l'appareil en mode paysage).
Définissez la propriété travelMode de la vue de la carte, comme indiqué dans l'exemple suivant :
Swift
self.mapView.travelMode = .cycling
Objective-C
_mapView.travelMode = GMSNavigationTravelModeCycling;
Définir les routes à éviter
Utilisez les propriétés avoidsHighways et avoidsTolls BOOL pour éviter les autoroutes, les routes à péage ou les deux sur un itinéraire.
Swift
self.mapView.navigator?.avoidsTolls = true
Objective-C
_mapView.navigator.avoidsTolls = YES;
Régler le volume du guidage audio
Pour ajuster le volume du guidage vocal, définissez la propriété volumeLevel sur le navigateur sur "low" (faible), "normal" ou "high" (élevé). Le navigateur utilise le dernier niveau de volume enregistré ou le niveau normal par défaut.
Swift
self.mapView.navigator?.volumeLevel = .low
Objective-C
_mapView.navigator.volumeLevel = GMSNavigationVolumeLevelLow;
Outil de recherche d'ID de lieu
Vous pouvez utiliser l'outil de recherche d'identifiants de lieu pour trouver les identifiants de lieu à utiliser pour les destinations d'itinéraire. Ajoutez une destination à partir d'un placeID avec GMSNavigationWaypoint.
Texte flottant
Vous pouvez ajouter du texte flottant n'importe où dans votre application, à condition que l'attribution Google ne soit pas masquée. Le SDK Navigation ne permet pas d'ancrer le texte à des coordonnées spécifiques (latitude, longitude) sur la carte ni à un libellé. Pour en savoir plus, consultez Fenêtres d'informations.