Configurer les perturbations en temps réel
Les perturbations en temps réel sont un ensemble de fonctionnalités qui alertent les utilisateurs sur les perturbations sur leur itinéraire et leur permettent de signaler et de vérifier les perturbations qu'ils rencontrent. Les perturbations peuvent être des accidents de la route, des embouteillages, la présence de policiers et de radars, des travaux, des fermetures de voies et certaines conditions météorologiques. Cette page explique les fonctionnalités d'interruption en temps réel et leurs options de configuration, y compris les considérations pour les applications qui utilisent des interfaces utilisateur de navigation personnalisées.
Fonctionnalités de perturbation en temps réel
Le SDK Navigation inclut les fonctionnalités de perturbation en temps réel suivantes dans l'expérience de navigation de base :- Bulle de perturbation interactive le long des itinéraires.
- Alertes de perturbation automatisées avec vote pendant la navigation active.
- Signalement des perturbations pendant la navigation active.
Ces fonctionnalités sont configurables et activées par défaut. Les sections suivantes fournissent plus d'informations sur les fonctionnalités et les options de configuration disponibles.
Bulle de perturbation interactive le long des itinéraires
Lorsqu'une application affiche un itinéraire, dans un aperçu de l'itinéraire ou pendant la navigation active, toutes les perturbations actuelles apparaissent sous forme de bulles le long de l'itinéraire. Lorsque vous activez la couche de trafic, les perturbations hors itinéraire s'affichent également sur la carte. Les bulles incluent une icône indiquant le type de perturbation.
Vous pouvez contrôler l'affichage des bulles de perturbation le long des itinéraires à l'aide de shouldDisplayPrompts, qui contrôle également le affichage des alertes automatisées lorsqu'un utilisateur approche d'une perturbation.
mapView.navigator.shouldDisplayPrompts = true
Afficher les détails de la perturbation lorsqu'un utilisateur appuie sur une bulle
Appuyer sur une bulle de perturbation ouvre une fiche d'informations contenant plus de détails. Cela s'applique aux bulles sur l'itinéraire et hors itinéraire, bien que les bulles hors itinéraire ne s'affichent que si la couche de trafic est activée. La fiche affiche le type de perturbation, l'heure à laquelle elle a été signalée pour la dernière fois et parfois une option permettant de voter pour indiquer si la perturbation est toujours présente. Le type de fiche d'informations et ses options de configuration varient selon que l'utilisateur est en navigation active ou non.
Fiches d'informations sur les bulles dans les aperçus d'itinéraire, avant de démarrer la navigation active
Avant de démarrer la navigation active, les utilisateurs peuvent appuyer sur une bulle sur l'itinéraire ou hors itinéraire sur la carte ou l'aperçu de l'itinéraire pour ouvrir une fiche d'informations. Les bulles hors itinéraire nécessitent l'activation de la couche de trafic. La fiche d'informations fournit plus de détails sur la perturbation.
Vous pouvez contrôler la possibilité pour les utilisateurs d'appuyer sur les bulles de perturbation dans les aperçus d'itinéraire pour afficher plus d'informations à l'aide de showsIncidentCards.
mapView.settings.showsIncidentCards = true
Fiches d'informations sur les bulles pendant la navigation active
Pendant la navigation active, les utilisateurs peuvent appuyer sur une bulle de perturbation sur l'itinéraire ou hors itinéraire pour ouvrir une fiche d'informations. La fiche indique le type de perturbation et l'heure à laquelle elle a été signalée pour la dernière fois, et inclut des boutons permettant aux utilisateurs de voter pour indiquer si la perturbation est toujours présente.
Le vote est disponible pour les perturbations sur l'itinéraire et hors itinéraire dans un rayon de 5 km autour de l'utilisateur, à l'exception des routes fermées. Google traite ces votes pour déterminer s'il doit continuer à afficher la perturbation. Les votes peuvent également apparaître sur la carte pour d'autres utilisateurs de Google Maps et du SDK Navigation.
Vous pouvez contrôler l'affichage et la possibilité d'appuyer sur les bulles de perturbation pendant la navigation active à l'aide de
shouldDisplayPrompts, qui contrôle également l'
affichage des bulles le long des itinéraires et l'
affichage des alertes automatisées lorsqu'un utilisateur approche d'une perturbation.
mapView.navigator.shouldDisplayPrompts = true
Alertes de perturbation automatisées avec vote pendant la navigation active
Pendant la navigation active, lorsqu'un utilisateur approche d'une perturbation sur un itinéraire, une invite s'affiche avec des informations sur la perturbation et des boutons permettant de voter pour indiquer si la perturbation est toujours présente. Les votes envoyés par les utilisateurs sont traités par Google et peuvent apparaître sur la carte pour d'autres utilisateurs de Google Maps et du SDK Navigation, ainsi que pour déterminer s'il faut continuer à afficher la perturbation.
Vous pouvez configurer l'affichage des invites d'alerte pendant la navigation active à l'aide de
shouldDisplayPrompts, qui contrôle également l'affichage
des bulles le long des itinéraires.
mapView.navigator.shouldDisplayPrompts = true
Signalement des perturbations pendant la navigation active
En mode de navigation active, un bouton s'affiche dans l'interface utilisateur de navigation, ce qui permet aux utilisateurs de signaler de nouvelles perturbations sur leur itinéraire. Lorsqu'un utilisateur appuie sur le bouton, un menu contenant les types de perturbations disponibles à signaler s'affiche. Les signalements envoyés par les utilisateurs sont traités par Google et peuvent apparaître sur la carte pour d'autres utilisateurs de Google Maps et du SDK Navigation.
Afficher ou masquer le bouton de signalement standard
Vous pouvez configurer la visibilité du bouton de signalement standard pendant la navigation active à l'aide de
navigationReportIncidentButtonEnabled.
// Enables the incident reporting FAB to show in situations where incident // reporting is possible. mapView.settings.navigationReportIncidentButtonEnabled = true
Ajouter un bouton de signalement personnalisé
Au lieu du bouton de signalement des perturbations standard, vous pouvez ajouter un bouton de signalement personnalisé à l'interface utilisateur de navigation. Lorsque l'utilisateur clique sur le bouton personnalisé, vous pouvez déclencher l'affichage du menu de signalement en appelant la presentReportIncidentsPanel
méthode. Avant d'ajouter un bouton de signalement personnalisé, vérifiez que l'application est en navigation active et que l'utilisateur se trouve dans un pays où le signalement est activé en appelant reportIncidentsAvailable. Si l'une de ces conditions n'est pas remplie, le menu de signalement ne s'affiche pas.
// Check if reporting is available before displaying your button let isReportingAvailable = mapview.isIncidentReportingAvailable() customReportingIncidentButton.isHidden = !isReportingAvailable customReportingIncidentButton.addTarget(self, action: #selector(didTapReportIncidentButton), for: .touchUpInside) // Trigger the reporting flow if the button is clicked func didTapReportIncidentButton() { mapView.presentReportIncidentsPanel(self) { [weak self] error in guard let self = self else { return } if let error = error as NSError? { if error.domain == GMSMapViewPresentReportIncidentPanelErrorDomain { let errorCode = GMSMapViewPresentReportIncidentPanelErrorCode(rawValue: error.code) switch errorCode { case .internal: self.showErrorMessage( title: "Error Presenting Report Incident Panel", message: "An internal error occurred." ) case .reportingNotAvailable: self.showErrorMessage( title: "Error Presenting Report Incident Panel", message: "Reporting is not available." ) case .none: self.showErrorMessage( title: "Error Presenting Report Incident Panel", message: "An unknown error occurred." ) } } else { // Handle other potential errors (e.g., network errors) self.showErrorMessage( title: "Error Presenting Report Incident Panel", message: "An unexpected error occurred: \(error.localizedDescription)" ) } } // If error is nil, the panel was presented successfully. You can add any extra logic here. } }
Utiliser des interfaces utilisateur de navigation personnalisées
Si votre implémentation du SDK Navigation inclut des éléments d'interface utilisateur personnalisés, vous devez tenir compte des éléments de perturbation en temps réel pour éviter les conflits.
Positionnement du bouton de signalement
Par défaut, le bouton de signalement des perturbations est positionné en bas/dans l'angle de fin de la carte : à droite pour les langues qui se lisent de gauche à droite et à gauche pour les langues qui se lisent de droite à gauche. Si vous devez déplacer le bouton de signalement pour laisser de la place aux éléments d'interface utilisateur personnalisés, utilisez unbottomTrailingButtonsLayoutGuide.
Swift
// Create a new layout guide let topRightLayoutGuide = UILayoutGuide() self.view.addLayoutGuide(topRightLayoutGuide) // Activate constraints using fixed constants here as an example // assuming the current reporting button is of fixed height topRightLayoutGuide.topAnchor.constraint(equalTo: _mapView.navigationHeaderLayoutGuide.bottomAnchor, constant: 50).isActive = true topRightLayoutGuide.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor, constant: -14).isActive = true // Assign the layout guide _mapView.bottomTrailingButtonsLayoutGuide = topRightLayoutGuide // Create an alternate layout guide to use when the header and the footer are not full width let topRightAlternateLayoutGuide = UILayoutGuide() self.view.addLayoutGuide(topRightAlternateLayoutGuide) // Activate constraints using fixed constants here as an example // assuming the current RTD button is of fixed height topRightAlternateLayoutGuide.topAnchor.constraint(equalTo: _mapView.navigationHeaderLayoutGuide.bottomAnchor, constant: 20).isActive = true topRightAlternateLayoutGuide.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor, constant: -10).isActive = true // Assign the layout guide _mapView.bottomTrailingButtonsAlternateLayoutGuide = topRightAlternateLayoutGuide
Objective-C
// Create a new layout guide UILayoutGuide *topRightLayoutGuide = [[UILayoutGuide alloc] init]; [self.view addLayoutGuide:topRightLayoutGuide]; // Activate constraints using fixed constants here as an example // assuming the current RTD button is of fixed height [[topRightLayoutGuide.topAnchor constraintEqualToAnchor:_mapView.navigationHeaderLayoutGuide.bottomAnchor constant:50] setActive:YES]; [[topRightLayoutGuide.trailingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor constant:-14] setActive:YES]; // Assign the layout guide _mapView.bottomTrailingButtonsLayoutGuide = topRightLayoutGuide; // Create an alternate layout guide to use when the header and the footer are not full width UILayoutGuide *topRightAlternateLayoutGuide = [[UILayoutGuide alloc] init]; [self.view addLayoutGuide:topRightAlternateLayoutGuide]; // Activate constraints using fixed constants here as an example // assuming the current RTD button is of fixed height [[topRightAlternateLayoutGuide.topAnchor constraintEqualToAnchor:_mapView.navigationHeaderLayoutGuide.bottomAnchor constant:50] setActive:YES]; [[topRightAlternateLayoutGuide.trailingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor constant:-14] setActive:YES]; // Assign the layout guide _mapView.bottomTrailingButtonsAlternateLayoutGuide = topRightAlternateLayoutGuide;
API de visibilité des invites (expérimentale)
L'API de visibilité des invites vous aide à éviter les conflits entre les éléments d'interface utilisateur générés par le SDK Navigation et vos propres éléments d'interface utilisateur personnalisés en ajoutant un écouteur pour recevoir un rappel avant qu'un élément d'interface utilisateur du SDK Navigation ne s'affiche et dès que l'élément est supprimé. Vous pouvez recevoir des rappels pour les éléments de perturbation en temps réel, y compris les fiches d'informations, les invites et le menu de signalement des perturbations, ainsi que pour d'autres notifications générées par le SDK Navigation.Swift
// Additional methods added to GMSNavigatorListener ... func navigatorWillPresentPrompt(_ navigator: GMSNavigator) { // Hide any sort of custom UI element. } func navigatorDidDismissPrompt(_ navigator: GMSNavigator) { // Show any sort of custom UI element. } ...
Objective-C
// Additional methods added to GMSNavigatorListener ... - (void)navigatorWillPresentPrompt:(GMSNavigator *)navigator { // Hide any sort of custom UI element. } - (void)navigatorDidDismissPrompt:(GMSNavigator *)navigator { // Show any sort of custom UI element. } ...