Créer des conseils personnalisés

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

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

  • Vous devez d'abord établir une session de navigation indépendamment 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 lancez la navigation avec un appel setDestination. Lorsque l'expérience de navigation Google appelle le navigateur via la vue de carte 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 ajustée à la route. Utilisez le fournisseur de localisation si vous souhaitez que votre application dispose d'une surveillance continue de la localisation, par exemple lorsque vous affichez une vue de navigation avec un point bleu le long de l'itinéraire.

  3. Configurez un écouteur pour une navigation détaillée 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 des champs pour votre propre UI.
  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émo montre que la navigation est établie indépendamment du contrôleur de vue. Le code ajoute ensuite une carte de présentation configurée pour afficher la position actuelle ajustée à 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;

Transmettre 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. Il 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`];