Suivez ce guide pour tracer un itinéraire dans votre application vers une destination unique, à 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
. - Inviter l'utilisateur à accepter les conditions d'utilisation et autoriser la localisation et les notifications en arrière-plan.
- Créez un tableau contenant une ou plusieurs destinations.
Définir une
GMSNavigator
pour contrôler la navigation détaillée.- Ajoutez des destinations à l'aide de
setDestinations
. - Définir
isGuidanceActive
surtrue
pour lancer la navigation. - Utiliser
simulateLocationsAlongExistingRoute
pour simuler la progression du véhicule sur l'itinéraire, à des fins de test, le débogage et la démonstration de votre application.
- Ajoutez des destinations à l'aide de
Voir le code
Inviter l'utilisateur à accorder les autorisations nécessaires
Avant d'utiliser le SDK Navigation, l'utilisateur doit accepter les et vous autorisez l'utilisation des services de localisation, qui sont nécessaire à la navigation. Si votre application s'exécute en arrière-plan, elle doit également invite l'utilisateur à autoriser les notifications d'alerte de guidage. Cette section présente les informations 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 l'autorisation procédez comme suit:
- Ajoutez la clé
NSLocationAlwaysUsageDescription
àInfo.plist
. Pour la valeur, ajoutez une brève explication expliquant pourquoi votre appli nécessite des données de localisation services. Par exemple : "Cette application a besoin de l'autorisation d'utiliser les services de localisation pour navigation détaillée. »
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 une alerte notifications 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 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é 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 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. Si l'opération réussit
calculé, l'itinéraire est affiché sur la carte. Pour lancer le guidage pendant l'itinéraire,
en commençant par la première destination, définissez isGuidanceActive
sur true
dans le
.
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).
- Régler 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 à récupérer le cours de l'utilisateur est déterminé. Vous pouvez définir l'un des quatre modes de transport pour une en voiture, à vélo, à pied et en taxi. En voiture et en taxi, le parcours de l'utilisateur en fonction du sens du trajet ; en mode vélo et marche, représentées par la direction vers laquelle l'appareil est orienté.
Définissez la travelMode
de la vue plan, 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 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'identifiants de lieu.
pour trouver 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, l'attribution n'est pas abordée. Le SDK Navigation ne prend pas en charge l'ancrage du du texte à des coordonnées de latitude/longitude sur la carte ou à un libellé. Pour plus d'informations, consultez la section Fenêtres d'informations.