Itinéraire

Suivez ce guide pour tracer un itinéraire dans votre application vers une seule destination à l'aide du SDK Navigation pour iOS.

Présentation

  1. Intégrez le SDK Navigation à votre application, comme décrit dans la section Configurer votre projet.
  2. Configurez un GMSMapView.
  3. Demandez à l'utilisateur d'accepter les conditions d'utilisation et d'autoriser les services de localisation et les notifications en arrière-plan.
  4. Créez un tableau contenant une ou plusieurs destinations.
  5. Définissez un GMSNavigator pour contrôler la navigation détaillée.

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 demander à l'utilisateur d'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 :

  1. Activez les fonctionnalités de localisation et d'arrière-plan dans Xcode :

    1. Ouvrez votre cible dans Xcode et sélectionnez l'onglet Signing &Capabilities (Signature et fonctionnalités). Pour en savoir plus, consultez le guide d'Apple sur l'ajout de fonctionnalités à votre application.
    2. Ajoutez les fonctionnalités Location (Always) (Localisation (toujours)) et Location (When In Use) (Localisation (lorsque l'application est utilisée)). Dans le champ de texte de chaque fonctionnalité, ajoutez une brève explication de la raison pour laquelle votre application nécessite les services de localisation (par exemple : "Cette application a besoin d'une autorisation pour utiliser les services de localisation pour la navigation détaillée").
    3. Ajoutez la fonctionnalité Background Modes (Modes en arrière-plan), puis cochez la case Location updates (Mises à jour de la localisation). 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 la localisation en arrière-plan.
  2. Pour afficher la boîte de dialogue d'autorisation, appelez la requestAlwaysAuthorization() méthode de l'instance du gestionnaire de localisation.

Swift

self.locationManager.requestAlwaysAuthorization()

Objective-C

[_locationManager requestAlwaysAuthorization];

Consultez la documentation complète d'Apple sur l'autorisation des services de localisation.

Autoriser les notifications d'alerte pour le guidage 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");
     }
   }];

Accepter 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 les accepte. Notez que cet exemple inclut le code des services de localisation et des notifications d'alerte de guidage (affichés 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 GMSNavigationWaypoint destinations à visiter. Si l'itinéraire est calculé, il s'affiche sur la carte. Pour démarrer le guidage sur l'itinéraire, définissez isGuidanceActive sur true dans le rappel.

L'exemple suivant montre :

  • La création d'un itinéraire avec une destination.
  • Le démarrage du guidage.
  • L'activation des notifications de guidage en arrière-plan.
  • La simulation du trajet sur l'itinéraire (facultatif).
  • La définition du mode de la caméra sur "follow" (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 la section ID de lieu.

Scénarios avec 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 mode de transport

Le mode de transport 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 voiture et taxi, le parcours de l'utilisateur est basé sur le sens de déplacement. En mode vélo et marche, le parcours est représenté par la direction vers laquelle l'appareil est orienté (vers le haut de l'appareil en mode paysage).

Définissez la travelMode propriété de la vue de carte, comme illustré dans l'exemple suivant :

Swift

self.mapView.travelMode = .cycling

Objective-C

_mapView.travelMode = GMSNavigationTravelModeCycling;

Définir les routes à éviter

Utilisez les propriétés BOOL avoidsHighways et avoidsTolls 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;

Outil de recherche d'ID de lieu

Vous pouvez utiliser l'outil de recherche d'ID de lieu pour trouver des ID 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 n'est pas compatible avec l'ancrage du texte à des coordonnées spécifiques (latitude, longitude) sur la carte ni à un libellé. Pour en savoir plus, consultez la section Fenêtres d'informations.