Qu'est-ce que la navigation personnalisée ?

Une expérience de navigation personnalisée peut désigner une application qui élimine complètement le guidage de direction avec la navigation uniquement en arrière-plan, à une application qui projette un guidage personnalisé sur un écran distinct de l'appareil qui exécute le navigateur.

Qu'est-ce que l'expérience de navigation personnalisée ?

  • Démarrez la navigation : vous créez une session de navigation. Comme pour l'expérience de navigation Google, une expérience de navigation personnalisée implique toujours la création d'une instance de navigation et la définition de la destination. Toutefois, avec une expérience de navigation personnalisée, vous devez d'abord établir une session de navigation à l'aide de GMSNavigationServices. Une session de navigation est un objet non UI associé à un état qui peut fonctionner avec ou sans contrôleur de vue.

    Voir la démonstration:le SDK Navigation contient une démonstration que vous pouvez exécuter pour voir un exemple d'expérience de navigation qui passe du guidage détaillé via la navigation standard à une expérience de navigation qui n'affiche que la position de l'appareil se déplaçant le long d'une polyligne routière.

  • Navigation active (que vous fournissez) : Voici une autre différence clé entre une expérience de navigation fournie par Google et une expérience de navigation personnalisée. Au lieu de transmettre des conseils au gestionnaire d'événements intégré du SDK Navigation, vous activez le flux de navigation détaillée et implémentez des gestionnaires d'événements via GMSNavigatorListener. Cela permet à votre expérience de répondre aux événements décrits dans la section Écouter les événements de navigation.

  • terminer la navigation (que vous fournissez). Comme pour l'expérience de navigation Google, la navigation personnalisée nécessite également que vous arrêtiez la navigation de la manière la plus adaptée à l'expérience de l'application.

Le tableau suivant décrit certains scénarios de navigation personnalisés.

Exemple de scénario

Principales étapes

Vous devez fournir des conseils à la conduite en texte seul pour les petits appareils tels que les véhicules à deux roues.

Créez votre navigateur et configurez la navigation détaillée en tant que flux de données sur un appareil à petit écran pendant que le navigateur s'exécute sur le téléphone portable du conducteur en dehors de son champ de vision immédiat. Consultez Activer la navigation détaillée.

Les conducteurs qui utilisent votre application souhaitent disposer d'une carte d'aperçu pour la majeure partie de leur trajet, avec un minimum d'instructions de navigation détaillée dans les rues de la ville.

Votre application doit permettre aux conducteurs d'accéder à l'expérience de navigation Google et de la quitter selon leurs besoins, sans modifier les paramètres du navigateur pour la destination et le mode trajet.

Pour les clients des services de mobilité: les conducteurs empruntent souvent des itinéraires bien connus et n'ont pas besoin de conseils. Toutefois, vous avez besoin d'un moyen de vous assurer que votre système de gestion des véhicules peut gérer les livraisons ou les trajets.

Configurer un navigateur Définissez la destination et recevez des notifications de position. Intégrez le SDK Driver à votre application. Pour en savoir plus, consultez la page "Getting Started with the Driver SDK for On-demand Rides and Deliveries" ou la page Last Mile Fleet Solution.

Créer des conseils personnalisés

Cette section décrit les grandes étapes à suivre pour créer des conseils personnalisés.

Ce processus diffère de celui décrit dans la section Parcourir une route comme suit:

  • Vous établissez d'abord une session de navigation de manière indépendante et obtenez une instance de navigateur via la session plutôt qu'en appelant le contrôleur de vue.
  • Vous pouvez configurer un écouteur d'événements pour répondre aux événements de navigation et les gérer.

  1. Créez une session de navigation à l'aide de GMSNavigationService.createNavigationSession et commencez la navigation avec un appel setDestination. Lorsque l'expérience de navigation Google appelle le navigateur via la vue plan de navigation, GMSNavigationServices contrôle et reçoit un flux d'événements provenant d'une session de navigation indépendamment d'une instance d'interface utilisateur. Cela signifie qu'elle peut soit s'exécuter sans UI, soit être transmise à n'importe quelle expérience basée sur l'UI. Avec cette approche, la session de navigation continue de s'exécuter dans votre application jusqu'à ce que la dernière référence soit supprimée.
  2. Établissez un fournisseur de services de localisation des routes enregistrées sur la route. Utilisez le fournisseur de localisation si vous souhaitez que votre application assure une surveillance de la position en continu, par exemple lorsque vous affichez une vue de navigation avec un point bleu le long de l'itinéraire.
  3. Configurez un écouteur pour obtenir des instructions détaillées de la navigation détaillée en implémentant le protocole GMSNavigatorListener. Ensuite, transformez ces informations en ce dont vous avez besoin pour votre expérience de navigation personnalisée. Exemple :
    1. Implémentez des champs de texte uniquement pour caster facilement des itinéraires à l'écran.
    2. Concevez et remplissez les champs de votre propre interface utilisateur.
  4. Configurez un simulateur de navigation. Cela est nécessaire pour le développement et les tests.

Créer une session de navigation indépendante

L'extrait de code suivant de la démonstration montre la navigation établie indépendamment du contrôleur de vue. Le code ajoute ensuite une vue d'ensemble configurée pour afficher l'emplacement actuel du trafic routier.

// Create the navigation session.

 _navigationSession = [GMSNavigationServices createNavigationSession];
 GMSRoadSnappedLocationProvider *roadSnappedLocationProvider =
     _navigationSession.roadSnappedLocationProvider;
 [roadSnappedLocationProvider startUpdatingLocation];
 GMSNavigator *navigator = _navigationSession.navigator;
 [navigator addListener:self];
 navigator.voiceGuidance = GMSNavigationVoiceGuidanceSilent;
 navigator.sendsBackgroundNotifications = NO;
 _navigationSession.started = YES;
​​ [navigator setDestinations:@[ destination ]
                   callback:^(GMSRouteStatus routeStatus) {
                      // …handle changes in route status.
                    }];

 // Add an overview map.
 _mapView = [[GMSMapView alloc] initWithFrame:CGRectZero];
 [self.mainStackView addArrangedSubview:_mapView];
 [self.mainStackView setNeedsLayout];
 _mapView.settings.compassButton = YES;
 _mapView.delegate = self;
 _mapView.myLocationEnabled = YES;
 _mapView.roadSnappedMyLocationSource = roadSnappedLocationProvider;

Faire passer la navigation d'une expérience personnalisée à l'expérience Google

Cet extrait de code montre comment votre application peut permettre à l'utilisateur d'accéder à l'expérience de navigation Google à partir d'une expérience de navigation personnalisée. Cet extrait de code montre également comment votre application effectue cette transition tout en partageant la carte.

`UIButton *button = [UIButton buttonWithType:UIButtonTypePlain`];

[`button addTarget:self action:@selector(didTapEnterGoogleNavigationButton:)
forControlState:[_directionsButton addTarget:self`];

`…`

[`_mapView enableNavigationWithSession:_navigationSession`];