Créer des conseils personnalisés

Cette page décrit les étapes générales à suivre pour créer des conseils personnalisés dans le cadre d'une expérience de navigation personnalisée.

Ce processus diffère de celui décrit dans Naviguer sur un itinéraire comme suit :

  • Vous devez d'abord établir une session de navigation de manière indépendante et obtenir une instance de navigateur via la session plutôt qu'en appelant le contrôleur de vue.
  • Vous configurez 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 invoque le navigateur via la vue du plan de navigation, GMSNavigationServices contrôle et reçoit un flux d'événements d'une session de navigation indépendamment d'une instance d'UI. Cela signifie qu'il peut s'exécuter sans UI ou être transmis à 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 en soit supprimée.

  2. Établissez un fournisseur de localisation avec alignement sur la route. Utilisez le fournisseur de localisation si vous souhaitez que votre application surveille en permanence la position, 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 en implémentant le protocole GMSNavigatorListener. Transformez ensuite ces informations en ce qui est nécessaire pour votre expérience de navigation personnalisée. Exemple :

    1. Implémentez des champs de texte uniquement pour une diffusion d'écran simple des instructions.
    2. Concevez et remplissez les champs de votre propre UI.
  4. Configurer 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émo montre la navigation établie indépendamment du contrôleur de vue. Le code ajoute ensuite une carte générale configurée pour afficher la position actuelle sur la route.

// 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;

Transférer la navigation d'une expérience personnalisée vers 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 lors du partage de la carte.

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

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

`…`

[`_mapView enableNavigationWithSession:_navigationSession`];