Itinéraire

Suivez ce guide pour tracer un itinéraire dans votre application vers une destination unique, à 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. Invitez l'utilisateur à accepter les conditions d'utilisation, et autorisez 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

Inviter l'utilisateur à accorder 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 requis pour la navigation. Si votre application s'exécute en arrière-plan, elle doit également inviter l'utilisateur à autoriser les notifications d'alertes 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 une autorisation de l'utilisateur. Pour activer les services de localisation et afficher la boîte de dialogue d'autorisation, procédez comme suit:

  1. Ajoutez la clé NSLocationAlwaysUsageDescription à Info.plist.
  2. Pour la valeur, ajoutez une brève explication de la raison pour laquelle votre application nécessite des services de localisation. Par exemple: "Cette application a besoin de l'autorisation d'utiliser les services de localisation pour la navigation détaillée."

  3. Pour afficher la boîte de dialogue d'autorisation, appelez requestAlwaysAuthorization() de l'instance du gestionnaire d'établissements.

Swift

self.locationManager.requestAlwaysAuthorization()

Objective-C

[_locationManager requestAlwaysAuthorization];

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");
     }
   }];

Accepter les conditions d'utilisation

Utilisez le code suivant pour afficher la boîte de dialogue des conditions d'utilisation et activez la navigation lorsque l'utilisateur accepte les conditions. Notez que cet exemple inclut le code des services de localisation et les notifications d'alerte de guidage (comme indiqué précédemment).

Swift

let companyName = "Ride Sharing Co."
GMSNavigationServices.showTermsAndConditionsDialogIfNeeded(
  withCompanyName: companyName) { 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

NSString *companyName = @"Ride Sharing Co.";
[GMSNavigationServices
  showTermsAndConditionsDialogIfNeededWithCompanyName:companyName
  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 lancer le guidage

Pour tracer un itinéraire, appelez la méthode setDestinations() du navigateur avec un tableau contenant une ou plusieurs destinations (GMSNavigationWaypoint) à visiter. S'il est correctement calculé, l'itinéraire s'affiche sur la carte. Pour commencer le guidage sur l'itinéraire, en commençant par la première destination, définissez isGuidanceActive sur true dans le rappel.

L'exemple suivant montre :

  • Créer un itinéraire avec deux destinations.
  • Démarrage du guidage.
  • Activation des notifications de guidage en arrière-plan...
  • Simuler un trajet sur l'itinéraire (facultatif).
  • Définissez le mode de l'appareil photo sur "Suivre" (facultatif).

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;
                             }];
}

Pour en savoir plus sur les ID de lieu, consultez la page Identifiants de lieu.

Définir le mode de transport

Le mode de transport détermine le type d'itinéraire qui sera récupéré et la manière dont le parcours de l'utilisateur est déterminé. Vous pouvez définir l'un des quatre modes de transport pour un itinéraire: en voiture, à vélo, à pied et en taxi. En mode voiture et taxi, le parcours de l'utilisateur est basé sur le sens du trajet. En mode À vélo et à pied, le parcours est représenté par le sens dans lequel l'appareil est orienté.

Définissez la propriété travelMode de la vue plan, 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 BOOL avoidsHighways et avoidsTolls pour éviter les autoroutes et/ou les routes à péage le long d'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 rechercher des ID de lieu à utiliser pour les destinations des itinéraires. 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 couverte. Le SDK Navigation ne prend pas en charge l'ancrage du texte à une latitude/longitude sur la carte ou à un libellé. Pour en savoir plus, consultez la section Fenêtres d'informations.