Du nouveau pour la version 2.0 de GBFS đČđŽ
Une nouvelle version du GBFS amĂ©liore le partage dâĂ©quipements en libre-service.
(Depuis cet article, nous avons apportĂ© beaucoup de changements ! Pour plus d’informations sur les versions les plus rĂ©centes de GBFS, consultez nos articles sur les v2.2 et v2.3-RC (ainsi que les liens vers les traductions !).)
Avez-vous dĂ©jĂ vu un grand-bi ? MĂȘme si le nom vous est inconnu, vous reconnaĂźtrez sans aucun doute une photo de ce vĂ©lo:
Le grand-bi est cette bicyclette du 19e siĂšcle possĂ©dant une grande roue en avant et une toute petite roue Ă lâarriĂšre. Lorsquâil fit son entrĂ©e sur le marchĂ©, le grand-bi procurait davantage de vitesse et une plus grande capacitĂ© Ă rouler sur les routes bosselĂ©es que ses prĂ©dĂ©cesseurs. Une rĂ©volution Ă lâĂ©poque!
Le grand-bi marqua-t-il lâhistoire du cyclisme ? AssurĂ©ment đ. La bicyclette âsĂ©curisĂ©eâ se rĂ©vĂ©la-t-elle nĂ©anmoins meilleure ? Absolument đđ.
LancĂ© en 2015 par NABSA (North American Bikeshare Association), le format de donnĂ©es GBFS (General Bikeshare Feed Specification) est maintenant disponible en version 2.0, permettant de suivre lâusage et la disponibilitĂ© de vĂ©los et trottinettes en libre service, apportant Ă©galement des amĂ©liorations majeures Ă la v1.0, qui Ă©tait dĂ©jĂ excellente!
En 2019, NABSA a confiĂ© Ă MobilityData le mandat pour coordonner la communautĂ© formĂ©e autour du GBFS afin de sâassurer que le format de donnĂ©es soit dĂ©veloppĂ© de maniĂšre Ă satisfaire les standards et besoins en constante Ă©volution de lâindustrie. Nous sommes trĂšs reconnaissants envers les acteurs de cette communautĂ© dont la participation Ă nos ateliers et sur GitHub aura permis de produire la version 2.0 du GBFS et ainsi aider les utilisateurs Ă trouver plus facilement que jamais des solutions Ă leurs besoins de mobilitĂ© đ.
Les nouveautĂ©s de la version 2.0 đ
La premiĂšre version de la GBFS fut un grand succĂšs puisque prĂšs de 230 opĂ©rateurs de vĂ©los et trottinettes lâont adoptĂ© afin de partager en temps rĂ©el des informations accessibles via des applications mobiles utilisĂ©es par des millions dâutilisateurs partout dans le monde. Cependant, alors que les services de mobilitĂ© partagĂ©e en libre-service gagnent en popularitĂ©, il devenait Ă©vident que les fonctionnalitĂ©s offertes par la v1.0 du GBFS ne parvenaient pas Ă rĂ©pondre Ă tous les besoins des utilisateurs. Nous avons Ă©galement remarquĂ© quâil Ă©tait utile de clarifier lâutilisation de certains champs dans le format dâĂ©change. Voici donc les diffĂ©rentes amĂ©liorations proposĂ©es par la v2.0 du GBFS.
Liens intĂ©grĂ©s đ
Lâune des fonctions de base du GBFS consiste Ă rendre visible pour lâutilisateur les engins quâil peut louer dans les applications des fournisseurs de services de mobilitĂ© partagĂ©e. Quand un utilisateur aperçoit un vĂ©lo (ou une trottinette) auquel il souhaite accĂ©der, lâĂ©tape suivante consiste Ă cliquer sur lâicĂŽne reprĂ©sentant ce dernier afin de le louer đ. Toutefois, et câĂ©tait une lacune de la v1.0, le GBFS ne permettait pas Ă des intĂ©grateurs comme Transit ou Google Maps dâutiliser cette information. Lâutilisateur devait quitter le calculateur dâitinĂ©raire, lancer lâapplication du service de mobilitĂ© partagĂ©e et chercher de nouveau le vĂ©hicule en question dans ladite application.
La v2.0 du GBFS corrige ce problĂšme en proposant de nouveaux champs permettant lâajout de liens intĂ©grĂ©s (deep links). Cela permet Ă lâutilisateur dâaccĂ©der directement Ă lâapplication dâun fournisseur de service, tout en gardant en mĂ©moire lâemplacement du vĂ©hicule quâil cherche Ă louer.
Les liens intégrés (deep links) sont adaptés de différentes maniÚres, décrites dans les paragraphes suivants.
App Links sur Android et Universal Links sur iOS đ±
La mĂ©thode prĂ©fĂ©rĂ©e par les fournisseurs de services de mobilitĂ© partagĂ©e (utilisant le GBFS) pour adapter les liens intĂ©grĂ©s se nomme ââAndroid App Linksââ pour Android et ââUniversal Linksââ pour iOS. Ces formats de liens intĂ©grĂ©s requiĂšrent une configuration chez lâintĂ©grateur et chez le fournisseur, mais permettent de nombreux avantages comparativement Ă des systĂšmes de liens intĂ©grĂ©s plus anciens :
- Lorsquâun utilisateur utilise lâicĂŽne pour accĂ©der Ă un vĂ©hicule, il est immĂ©diatement redirigĂ© vers lâapplication du fournisseur de service; il nây a donc plus de dialogue intermĂ©diaire demandant Ă lâutilisateur sâil souhaite ouvrir le lien vers le site Internet ou vers lâapplication.
- Les intĂ©grateurs nâont plus Ă vĂ©rifier manuellement si lâapplication du fournisseur de service en question est dĂ©jĂ installĂ©e sur le smartphone et le rediriger vers la page de tĂ©lĂ©chargement de lâapplication si ce nâest pas le cas; cette situation est automatiquement prise en charge par le systĂšme dâexploitation.
- Il est dĂ©sormais possible de crĂ©er des liens intĂ©grĂ©s qui fonctionnent que lâon utilise le site (via le navigateur internet), ou lâapplication du fournisseur de services de mobilitĂ© partagĂ©e.
DĂšs quâun fournisseur de GBFS implĂ©mente des Android App Links ou des Universal Links dans son application et sur son site Internet, il lui faut ajouter une sectionrental_apps
et discovery_uris
dans le fichier system_information.json
du GBFS.
system_information.json
{
"last_updated": 1572447999,
"data": {
"system_id": "abc_cityname",
"short_name": "ABC Bike Rental",
"rental_apps": {
"android": {
"discovery_uri": "com.abcrental.android://"
},
"ios": {
"discovery_uri": "com.abcrental.ios://"
}
}
}
....
discovery_uris
est une URL (Universal Resource Identifiers) pouvant ĂȘtre utilisĂ©e afin de savoir si lâapplication dâun fournisseur de services en mobilitĂ© partagĂ©e est installĂ©e sur Android ou iOS, par exemple, en utilisant, respectivement, PackageManager.queryIntentActivities et UIApplication canOpenURL. Ce champ permet Ă un intĂ©grateur de prioriser les applications de location de services de mobilitĂ© partagĂ©e qui sont dĂ©jĂ installĂ©es sur lâappareil de lâutilisateur. Par exemple, si on retrouve trois fournisseurs de services de location de vĂ©los dans une ville et que lâutilisateur a dĂ©jĂ installĂ© lâapplication du fournisseur ââXââ, un intĂ©grateur devrait donner la prioritĂ© aux options de trajet vers les Ă©quipements du fournisseur ââXââ.
Ensuite, pour chaque station (dansstation_information.json
) ou un Ă©quipement est disponible (dans free_bike_status.json
), un lien intĂ©grĂ© unique devrait ĂȘtre crĂ©Ă© dans rental_uris
qui mĂšnera lâutilisateur Ă la page de la station ou de lâĂ©quipement en libre-service dans lâapplication du fournisseur de service de mobilitĂ© partagĂ©e.
Voici un exemple pour une station : station_information.json
"stations": [
{
"station_id": "425",
"name": "Coppertail",
"lat": 27.9563335328521,
"lon": -82.430436084371,
"rental_uris": {
"android": "https://www.abc.com/app?sid=1234567890&platform=android",
"ios": "https://www.abc.com/app?sid=1234567890&platform=ios"
}
}
âŠ
Le lien intĂ©grĂ© peut ĂȘtre de nâimporte quel format utile Ă lâimplĂ©mentation spĂ©cifique dâun fournisseur de service en mobilitĂ© partagĂ©e et peut contenir de nombreux paramĂštres quâil considĂšre pertinents. Dans lâexemple ci-dessus, le fournisseur de services de mobilitĂ© partagĂ©e utilise le paramĂštre sid
pour identifier la station, paramĂštre que lâapplication du fournisseur peut ensuite utiliser afin de montrer cette station Ă lâutilisateur. Certains paramĂštres, rĂ©servĂ©s pour la communication entre un intĂ©grateur et lâapplication dâun fournisseur, permettent de gĂ©nĂ©rer des donnĂ©es Ă des fins dâanalyses ; ceci sera expliquĂ© plus en dĂ©tail un peu plus loin.
LâintĂ©grateur peut alors ouvrir le champ rental_uris
en tant que lien intégré sur la plateforme appropriée; par exemple android.intent.action.VIEW
sur Android. Les intĂ©grateurs devraient consulter la documentation portant sur les liens intĂ©grĂ©s âDeep Linksâ sur Android et âCommunicate with Other Appsâ sur iOS pour plus de dĂ©tails.
Le consensus concernant les meilleures pratiques Ă maintenir dans lâindustrie suggĂšre aux fournisseurs de services de mobilitĂ© partagĂ©e de changer lâidentifiant attribuĂ© Ă un Ă©quipement dans un lien intĂ©grĂ© aprĂšs chaque location afin dâĂ©viter que lâon puisse par inadvertance retracer le point de dĂ©part et la destination de lâutilisateur sâĂ©tant servi de cet Ă©quipement. Consultez la section « Protection de la vie privĂ©e de lâutilisateur » plus bas pour en savoir plus sur les thĂ©matiques de vie privĂ©e et le paramĂštre bike_id
.
Format de lien intĂ©grĂ© de base đ±
Des applications plus anciennes nâont peut-ĂȘtre pas la capacitĂ© technique dâutiliser ââAndroid App Linksââ sur Android et ââUniversal Linksââ sur iOS, mais peuvent nĂ©anmoins utiliser des liens intĂ©grĂ©s âDeep Linksâ.
Afin de permettre aux intĂ©grateurs dâutiliser des liens intĂ©grĂ©s, les fournisseurs de services de mobilitĂ© partagĂ©e doivent produire un champ store_uri
pour chaque systĂšme dâexploitation, en plus du champ discovery_uri
. Ceci permet de rediriger lâutilisateur vers la page de tĂ©lĂ©chargement appropriĂ©e de leur application si elle nâest pas dĂ©jĂ installĂ©e.
system_information.json
{
"last_updated": 1572447999,
"data": {
"system_id": "abc_cityname",
"short_name": "ABC Bike Rental",
"rental_apps": {
"android": {
"discovery_uri": "com.abcrental.android://"
"store_uri": "https://play.google.com/store/apps/details?id=com.abcrental.android",
},
"ios": {
"store_uri": "https://apps.apple.com/app/apple-store/id123456789",
"discovery_uri": "com.abcrental.ios://"
}
},
âŠ
Si vous ĂȘtes un fournisseur de services de mobilitĂ© partagĂ©e, vous pouvez trouver le numĂ©ro dâidentification au sein du champ store_uri
en utilisant la documentation pour iOS et Android.
De façon similaire Ă la prĂ©cĂ©dente mĂ©thode permettant dâimplĂ©menter des liens intĂ©grĂ©s, les fournisseurs de services de mobilitĂ© partagĂ©e devront spĂ©cifier un lien intĂ©grĂ© unique dans rental_uris
pour chaque station ou équipement en libre-service. Ici, la principale différence réside dans le fait que votre URL sera fort probablement propriétaire plutÎt que de commencer par http
. Dans lâexemple plus bas, le fournisseur de services de mobilitĂ© partagĂ©e a dĂ©fini son URI comme Ă©tant com.abcrental.android://
pour Android et com.abcrental.ios://
pour iOS :
station_information.json
"stations": [
{
"station_id": "425",
"name": "Coppertail",
"lat": 27.9563335328521,
"lon": -82.430436084371,
"rental_uris": {
"android": "com.abcrental.android://open.abc.app/app?sid=1234567890",
"ios": "com.abcrental.ios://open.abc.app/app?sid=1234567890"
}
},
âŠ
Avant dâouvrir le lien intĂ©grĂ©, lâapplication de lâintĂ©grateur devra dâabord vĂ©rifier si lâusager a prĂ©alablement installĂ© lâapplication en utilisant le champ discovery_uri
. Si ce nâest pas le cas, lâintĂ©grateur devra utiliser le champ store_uri
pour ouvrir la page de tĂ©lĂ©chargement de lâapplication de lâintĂ©grateur.
Applications Internet đ
Pour finir, la v2.0 du GBFS permet dâincorporer des liens intĂ©grĂ©s Ă des sites Internet (qui ne sont pas conçues pour Android ou iOS) pour les stations et les Ă©quipements en libre-service via lâURL de location web
:
"stations": [
{
"station_id":"425",
"name":"Coppertail",
"lat":27.9563335328521,
"lon":-82.430436084371,
"rental_uris": {
"web":"https://www.abc.com/app?sid=1234567890",
}
},
âŠ
Les applications des fournisseurs de services de mobilitĂ© partagĂ©e peuvent envoyer les utilisateurs consulter cette URL pour visualiser une station en particulier Ă lâaide dâun navigateur Internet.
DonnĂ©es gĂ©nĂ©rĂ©es Ă des fins dâanalyses đ
Les applications dâintĂ©grateurs peuvent utiliser certains paramĂštres afin de gĂ©nĂ©rer des donnĂ©es dans le but dâeffectuer des analyses. La version 2.0 du GBFS permet dĂ©jĂ de gĂ©nĂ©rer des donnĂ©es en utilisant les paramĂštres listĂ©s ci-dessous; alors que dâautres seront probablement ajoutĂ©s Ă©ventuellement:
client_id
; le nom de domaine dâun intĂ©grateur. (e.g.,google.com
pour Google)ad_id
; Advertising ID produit pour lâintĂ©grateur (e.g., Identifier pour Advertiser (IFDA) sur iOS ou Google Advertising ID (AAID) sur Android.token
; un identifiant produit par lâapplication du fournisseur de services de mobilitĂ© partagĂ©e pour lâintĂ©grateur
Consultez la documentation GBFS Deep Links Analytics documentation pour plus dâinformation.
Faciliter la recherche et la communication au travers des champs đ€
La version v2.0 du GBFS donne la possibilité de trouver différents fichiers à travers les données; le fichier de recherche autodiscovery, gbfs.json
, qui contient les liens vers tous les autres fichiers est dorĂ©navant requis dans la version v2.0. Le champ ânomâ de chaque fichier dans gbfs.json
a Ă©galement Ă©tĂ© normalisĂ©. Cela permet Ă lâapplication dâun consommateur de donnĂ©es de suivre un seul lien vers gbfs.json
, au lieu de plusieurs URL vers différents fichiers pour un seul flux.
Afin de faciliter les communications entre les consommateurs et les producteurs, un nouveau champ courriel feed_contact_email
a été ajouté au system_information.json
. Ce dernier permet Ă lâutilisateur de facilement contacter lâopĂ©rateur afin de lui signaler des problĂšmes techniques.
Clarifications des caractĂ©ristiques đ ïž
Quelques clarifications ont été effectuées dans les champs de la version 2.0 de la GBFS.
Dans la version 1.0, la signification exacte de num_bikes_available
et num_docks_available
nâĂ©tait pas claire en fonction de la disponibilitĂ© des places en station. Par exemple, sâil y avait physiquement cinq vĂ©los Ă une station, mais que la valeur attribuĂ©e Ă is_renting
Ă©tait fausse, est-ce que num_bikes_available
devrait ĂȘtre 0 ou 5?
Dans la v2.0, les définitions de num_bikes_available
etnum_docks_available
ont Ă©tĂ© prĂ©cisĂ©es en spĂ©cifiant quâil sâagit de lâĂ©tat physique du nombre de vĂ©los prĂ©sent et de places vides disponibles Ă une station, indĂ©pendamment de la possibilitĂ© dâemprunter ou de retourner un vĂ©lo. Par consĂ©quent, un utilisateur doit maintenant consulter le champ is_renting
pour savoir si un vĂ©lo ââdisponibleââ peut ĂȘtre louĂ©, et le champ is_returning
pour savoir si un vĂ©lo peut ĂȘtre retournĂ© Ă une borne vide.
Autre modification nouvelle à v2.0 : des valeurs booléennes JSON canoniques true
oufalse
remplacent0
et1
utilisé précédemment.
Ainsi, les données obtenues dans la version 1.0 :
{
"station_id": "2721922",
"is_installed": 1,
"is_renting": 1,
"is_returning": 1,
âŠ
},
⊠ont maintenant cet aspect dans la version 2.0 :
{
"station_id": "2721922",
"is_installed": true,
"is_renting": true,
"is_returning": true,
âŠ
},
Protection de la vie privĂ©e de lâusagerđ”ïžđ
Afin de rĂ©duire les risques de transmettre des donnĂ©es dâordre privĂ©, le changement de lâidentifiant bike_id
aprĂšs chaque location pour les vĂ©hicule en libre-service est maintenant requis dans la version 2.0 du GBFS. Cela signifie que lâidentifiant dâun vĂ©hicule produit par le GBFS au moment de sa location doit ĂȘtre diffĂ©rent de lâidentifiant qui lui est attribuĂ© une fois la location terminĂ©e. Cette technique rend beaucoup plus difficiles les tentatives de traçage du trajet de lâutilisateur Ă partir des donnĂ©es brutes.
Faciliter la transition vers la version 2.0 đ
La version 2.0 du GBFS est une mise Ă jour majeure, ce qui signifie que certains changements produiront des conflits entre la version de lâapplication quâemploient encore certains fournisseurs et la nouvelle version de lâapplication de leur fournisseur de services de mobilitĂ© partagĂ©e. Par exemple, quand un producteur de donnĂ©es changera des valeurs boolĂ©ennes de 0/1
Ă false/true
, la version de lâapplication qui nâa pas Ă©tĂ© mise Ă jour ne fonctionnera pas normalement.
Par consĂ©quent, Ă mesure que les fournisseurs de services de mobilitĂ© partagĂ©e mettent Ă jour leur flux, il est important de sâassurer que lâancienne version soit encore supportĂ©e parallĂšlement Ă la plus rĂ©cente en leur attribuant diffĂ©rentes URLs. Le GBFS dĂ©finit les pratiques suivantes :
- Les producteurs de GBFS doivent fournir des âpoints dâaccĂšsââ permettant de supporter la spĂ©cification actuelle (la v1.0) ainsi que et la version courante (ici la v2.0) dans un dĂ©lai dâau moins 3 mois Ă compter de la sortie dâune nouvelle version MAJOR ou MINOR. Il ne sera pas requis de supporter plus dâune version MINOR de la mĂȘme version MAJOR parce que les versions partielles (minor) seront compatibles et rĂ©troactives.
- Les utilisateurs du GBFS devraient Ă minima ĂȘtre en mesure de maintenir le support Ă long terme (LTS). Il est fortement recommandĂ© que les utilisateurs du GBFS puissent supporter les versions subsĂ©quentes.
- Les URLs par défaut du GBFS (e.g. https://www.example.com/data/gbfs.json ou https://www.example.com/data/fr/system_information.json) doivent diriger les consommateurs vers les données conformes à la documentation LTS en vigueur (couramment la v1.0).
Si les dĂ©veloppeurs ne sont pas prĂȘts Ă supporter les multiples versions du GBFS simultanĂ©ment, mais souhaitent nĂ©anmoins ajouter certaines fonctionnalitĂ©s de la v2.0 compatibles avec la v1.0, une mise Ă jour partielle, la version 1.1 du GBFS, est disponible. Ceci permet aux dĂ©veloppeurs dâajouter des liens intĂ©grĂ©s et un courriel feed_contact_email
Ă leur flot dâinformation, sans mise Ă jour.
Pour plus dâinformation sur les spĂ©cifications des versions du GBFS, consultez la documentation prĂ©vue Ă cet effet (Specification Versioning documentation.)
Vous pouvez consulter toutes les spécifications de la v2.0 du GBFS ici.
Que nous rĂ©serve lâavenir ? đ«
Nous avons mis en place les bases des futures évolutions du GBFS de maniÚre à maintenir une continuité dans le format tout en augmentant nettement ses fonctionnalités. Nous travaillons déjà à une mise à jour partielle, la version 2.1, laquelle permettra de délimiter des zones par géolocalisation (geofencinig) et de spécifier différents types de véhicules (ex : trottinettes). La version 3.0 du GBFS présentera également de nouvelles fonctionnalités, dont la nécessité pour les fournisseurs de créer une licence pour leur flux de données.
Enfin, nous vous invitons Ă vous impliquer dans le processus de dĂ©veloppement du GBFS. Rendez-vous sur le GitHub du GBFS afin de prendre part Ă des discussions ouvertes sur diverses problĂ©matiques ainsi que sur les changements proposĂ©s dans la section ââpull requestsââ. Cela nous fera plaisir de vous y retrouver! đ