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.
Créez une session de navigation à l'aide de
GMSNavigationService.createNavigationSessionet commencez la navigation avec un appelsetDestination. Lorsque l'expérience de navigation Google invoque le navigateur via la vue du plan de navigation,GMSNavigationServicescontrô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.Établissez un fournisseur de localisation avec accrochage à la route. Utilisez le fournisseur de localisation si vous souhaitez que votre application surveille en continu la position, par exemple lorsque vous affichez une vue de navigation avec un point bleu le long de l'itinéraire.
Configurez un écouteur pour obtenir des instructions détaillées, étape par étape en implémentant le protocole
GMSNavigatorListener. Ensuite, transformez ces informations en ce qui est nécessaire pour votre expérience de navigation personnalisée. Exemple :- Implémentez des champs de texte uniquement pour une diffusion d'écran simple des instructions.
- Concevez et remplissez les champs de votre propre UI.
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 accroché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. 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`];