From 979cfa2f302def0017dbc73f07abd74d9d15db12 Mon Sep 17 00:00:00 2001 From: barbeau Date: Wed, 27 Apr 2016 17:35:26 -0400 Subject: [PATCH 1/7] Add purchase_url to free bikes and stations Applications consuming GBFS would like to show markers for the available bikes and stations on the map, and when the user taps on these show a link that they can follow to rent that particular bike (for free bikes) or a bike at that particular station (for station-based systems). Currently, to implement this feature rental URLs need to be hard-coded in the application for each bike/share vendor/deployment. This patch adds the capability to discover these rental_urls directly from the GBFS feed for each free bike and station. --- gbfs.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gbfs.md b/gbfs.md index 6f6307c9..88c54c5f 100644 --- a/gbfs.md +++ b/gbfs.md @@ -204,6 +204,7 @@ stations | Yes | Array that contains one object per station i - is_renting | Yes | 1/0 boolean - is the station currently renting bikes (even if the station is empty, if it is set to allow rentals this value should be 1) - is_returning | Yes | 1/0 boolean - is the station accepting bike returns (if a station is full but would allow a return if it was not full then this value should be 1) - last_reported | Yes | Timestamp of the last time this station reported its status to the backend +- purchase_url | Optional | A fully qualified URL, to which the station_id can be passed as a parameter, where a user can rent a bike at this station_id. For example, if a fully qualified URL to a rental webpage for this station is http://app.socialbicycles.com/map?station_id=1219, then the value of purchase_url would be http://app.socialbicycles.com/map, and station_id would be 1219. ### free_bike_status.json Describes bikes that are not at a station and are not currently in the middle of an active ride. @@ -216,6 +217,7 @@ bikes | Yes | Array that contains one object per bike that is - lon | Yes | Longitude of the bike. The field value must be a valid WGS 84 latitude. See: http://en.wikipedia.org/wiki/World_Geodetic_System - is_reserved | Yes | 1/0 value - is the bike currently reserved for someone else - is_disabled | Yes | 1/0 value - is the bike currently disabled (broken) +- purchase_url | Optional | A fully qualified URL, to which the bike_id can be passed as a parameter, where a user can rent this bike_id. For example, if a fully qualified URL to a rental webpage for this bike is http://app.socialbicycles.com/map?bike_id=3503, then the value of purchase_url would be http://app.socialbicycles.com/map, and bike_id would be 3503. ### system_hours.json Describes the system hours of operation. A JSON array of hours defined as follows: From c6eab6e8eb2cd088e59888fbbeb7b2c01baae11f Mon Sep 17 00:00:00 2001 From: barbeau Date: Wed, 11 May 2016 15:51:04 -0400 Subject: [PATCH 2/7] Include full purchase_url URL in GBFS station_information and free_bike_status * Based on https://github.com/NABSA/gbfs/pull/25#issuecomment-218548900. --- gbfs.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gbfs.md b/gbfs.md index 88c54c5f..f9cb6587 100644 --- a/gbfs.md +++ b/gbfs.md @@ -189,6 +189,7 @@ stations | Yes | Array that contains one object per station in th - post_code | Optional | Postal code where station is located - rental_methods | Optional | Array of enumerables containing the payment methods accepted at this station.
Current valid values (in CAPS) are:
This list is intended to be as comprehensive at the time of publication as possible but is subject to change, as defined in [File Requirements](#file-requirements) above - capacity | Optional | Number of total docking points installed at this station, both available and unavailable +- purchase_url | Optional | A fully qualified and encoded URL where a user can rent a bike at this station_id. This URL should be a deep link specific to this station_id, and should not be a general rental page that includes information for more than one station. ### station_status.json @@ -204,7 +205,6 @@ stations | Yes | Array that contains one object per station i - is_renting | Yes | 1/0 boolean - is the station currently renting bikes (even if the station is empty, if it is set to allow rentals this value should be 1) - is_returning | Yes | 1/0 boolean - is the station accepting bike returns (if a station is full but would allow a return if it was not full then this value should be 1) - last_reported | Yes | Timestamp of the last time this station reported its status to the backend -- purchase_url | Optional | A fully qualified URL, to which the station_id can be passed as a parameter, where a user can rent a bike at this station_id. For example, if a fully qualified URL to a rental webpage for this station is http://app.socialbicycles.com/map?station_id=1219, then the value of purchase_url would be http://app.socialbicycles.com/map, and station_id would be 1219. ### free_bike_status.json Describes bikes that are not at a station and are not currently in the middle of an active ride. @@ -217,7 +217,7 @@ bikes | Yes | Array that contains one object per bike that is - lon | Yes | Longitude of the bike. The field value must be a valid WGS 84 latitude. See: http://en.wikipedia.org/wiki/World_Geodetic_System - is_reserved | Yes | 1/0 value - is the bike currently reserved for someone else - is_disabled | Yes | 1/0 value - is the bike currently disabled (broken) -- purchase_url | Optional | A fully qualified URL, to which the bike_id can be passed as a parameter, where a user can rent this bike_id. For example, if a fully qualified URL to a rental webpage for this bike is http://app.socialbicycles.com/map?bike_id=3503, then the value of purchase_url would be http://app.socialbicycles.com/map, and bike_id would be 3503. +- purchase_url | Optional | A fully qualified and encoded URL where a user can rent this bike_id. This URL should be a deep link specific to this bike_id, and should not be a general rental page that includes information for more than one bike. ### system_hours.json Describes the system hours of operation. A JSON array of hours defined as follows: From 10e8e5d5a583fcda6b5cff8c1f7ec2706d72d661 Mon Sep 17 00:00:00 2001 From: barbeau Date: Wed, 15 Jun 2016 17:30:41 -0400 Subject: [PATCH 3/7] Change from purchase_url to rental_url, better deep link description --- gbfs.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gbfs.md b/gbfs.md index f9cb6587..c7ab8b62 100644 --- a/gbfs.md +++ b/gbfs.md @@ -189,7 +189,7 @@ stations | Yes | Array that contains one object per station in th - post_code | Optional | Postal code where station is located - rental_methods | Optional | Array of enumerables containing the payment methods accepted at this station.
Current valid values (in CAPS) are:
  • KEY _(i.e. operator issued bike key / fob / card)_
  • CREDITCARD
  • PAYPASS
  • APPLEPAY
  • APPLEPAY
  • ANDROIDPAY
  • TRANSITCARD
  • ACCOUNTNUMBER
  • PHONE
This list is intended to be as comprehensive at the time of publication as possible but is subject to change, as defined in [File Requirements](#file-requirements) above - capacity | Optional | Number of total docking points installed at this station, both available and unavailable -- purchase_url | Optional | A fully qualified and encoded URL where a user can rent a bike at this station_id. This URL should be a deep link specific to this station_id, and should not be a general rental page that includes information for more than one station. +- rental_url | Optional | A fully qualified and encoded URL where a user can rent a bike at this station_id. This URL should be a deep link specific to this station_id, and should not be a general rental page that includes information for more than one station. The deep link should take users directly to this station_id, without any prompts, interstitial pages, or logins. Make sure that users can see this station_id even if they never previously opened the application. This is the same principle as the ["first click free"](https://support.google.com/news/publisher/answer/40543) experience for web sites. ### station_status.json @@ -217,7 +217,7 @@ bikes | Yes | Array that contains one object per bike that is - lon | Yes | Longitude of the bike. The field value must be a valid WGS 84 latitude. See: http://en.wikipedia.org/wiki/World_Geodetic_System - is_reserved | Yes | 1/0 value - is the bike currently reserved for someone else - is_disabled | Yes | 1/0 value - is the bike currently disabled (broken) -- purchase_url | Optional | A fully qualified and encoded URL where a user can rent this bike_id. This URL should be a deep link specific to this bike_id, and should not be a general rental page that includes information for more than one bike. +- rental_url | Optional | A fully qualified and encoded URL where a user can rent this bike_id. This URL should be a deep link specific to this bike_id, and should not be a general rental page that includes information for more than one bike. The deep link should take users directly to this bike_id, without any prompts, interstitial pages, or logins. Make sure that users can see this bike_id even if they never previously opened the application. This is the same principle as the ["first click free"](https://support.google.com/news/publisher/answer/40543) experience for web sites. ### system_hours.json Describes the system hours of operation. A JSON array of hours defined as follows: From b2434e2b0565b590c76997f9a939904e50e12228 Mon Sep 17 00:00:00 2001 From: Sean Barbeau Date: Fri, 22 Nov 2019 16:03:13 -0500 Subject: [PATCH 4/7] Update to GBFS-DeepLinks-v2 proposal * Based on initial draft reviewed by others in a Google Doc at http://bit.ly/gbfs-deep-links-v2 * See discussion starting in https://github.com/NABSA/gbfs/pull/25#issuecomment-541063734 --- gbfs.md | 146 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 144 insertions(+), 2 deletions(-) diff --git a/gbfs.md b/gbfs.md index be7eee35..b6f8645e 100644 --- a/gbfs.md +++ b/gbfs.md @@ -18,6 +18,7 @@ This document explains the types of files and data that comprise the General Bik * [system_regions.json](#system_regionsjson) * [system_pricing_plans.json](#system_pricing_plansjson) * [system_alerts.json](#system_alertsjson) +* [Deep Links - Analytics and Examples](#Deep-Links) * [Possible Future Enhancements](#possible-future-enhancements) ## Revision History @@ -54,6 +55,7 @@ system_alerts.json | Optional | Describes current system * All files should be valid JSON * All data should be UTF-8 encoded * Line breaks should be represented by unix newline characters only (\n) +* All URIs must be a fully qualified URI that includes the scheme (e.g., http:// or https://), and any special characters in the URI must be correctly escaped. See http://www.w3.org/Addressing/URL/4_URI_Recommentations.html for a description of how to create fully qualified URI values. ### File Distribution * This specification does not dictate the implementation details around the distribution of the JSON data files @@ -172,6 +174,13 @@ phone_number | Optional | A single voice telephone number for the specifie email | Optional | A single contact email address for customers to address questions about the system timezone | Yes | The time zone where the system is located. Time zone names never contain the space character but may contain an underscore. Please refer to the "TZ" value in https://en.wikipedia.org/wiki/List_of_tz_database_time_zones for a list of valid values license_url | Optional | A fully qualified URL of a page that defines the license terms for the GBFS data for this system, as well as any other license terms the system would like to define (including the use of corporate trademarks, etc) +rental_apps | Optional | A JSON object that contains rental app information in the android and ios JSON objects. + \- android | Optional | A JSON object that contains rental app download and app discovery information for the Android platform in the store_uri and discovery_uri fields. See [examples](#Examples) of how to use these fields. + - store_uri | Conditionally Required | A URI where the rental Android app can be downloaded from. Typically this will be a URI to an app store such as Google Play. If the URI points to an app store such as Google Play, the URI should follow Android best practices so the viewing app can directly open the URI to the native app store app instead of a website.

If a rental_uris.android field is populated then this field is required, otherwise it is optional.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

Example value: `https://play.google.com/store/apps/details?id=com.abcrental.android` + - discovery_uri | Conditionally Required | A URI that can be used to discover if the rental Android app is installed on the device (e.g., using [`PackageManager.queryIntentActivities()`](https://developer.android.com/reference/android/content/pm/PackageManager.html#queryIntentActivities)). This intent is used by viewing apps prioritize rental apps for a particular user based on whether they already have a particular rental app installed.

This field is required if a rental_uris.android field is populated, otherwise it is optional.

Example value: `com.abcrental.android://` + \- ios | Optional | A JSON object that contains rental information for the iOS platform in the store_uri and discovery_uri fields. + - store_uri | Conditionally Required | A URI where the rental iOS app can be downloaded from. Typically this will be a URI to an app store such as the Apple App Store. If the URI points to an app store such as the Apple App Store, the URI should follow iOS best practices so the viewing app can directly open the URI to the native app store app instead of a website.

If a rental_uris.ios field is populated then this field is required, otherwise it is optional.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

Example value: `https://apps.apple.com/app/apple-store/id123456789` + - discovery_uri | Conditionally Required | A URI that can be used to discover if the rental iOS app is installed on the device (e.g., using [`UIApplication canOpenURL:`](https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl?language=objc)). This intent is used by viewing apps prioritize rental apps for a particular user based on whether they already have a particular rental app installed.

This field is required if a rental_uris.ios field is populated, otherwise it is optional.

Example value: `com.abcrental.ios://` ### station_information.json @@ -191,7 +200,10 @@ stations | Yes | Array that contains one object per station in th \- post_code | Optional | Postal code where station is located \- rental_methods | Optional | Array of enumerables containing the payment methods accepted at this station.
Current valid values (in CAPS) are:
  • KEY _(i.e. operator issued bike key / fob / card)_
  • CREDITCARD
  • PAYPASS
  • APPLEPAY
  • ANDROIDPAY
  • TRANSITCARD
  • ACCOUNTNUMBER
  • PHONE
This list is intended to be as comprehensive at the time of publication as possible but is subject to change, as defined in [File Requirements](#file-requirements) above \- capacity | Optional | Number of total docking points installed at this station, both available and unavailable -\- rental_url | Optional | A fully qualified and encoded URL where a user can rent a bike at this station_id. This URL should be a deep link specific to this station_id, and should not be a general rental page that includes information for more than one station. The deep link should take users directly to this station_id, without any prompts, interstitial pages, or logins. Make sure that users can see this station_id even if they never previously opened the application. This is the same principle as the ["first click free"](https://support.google.com/news/publisher/answer/40543) experience for web sites. +rental_uris | Optional | A JSON object that contains rental URIs for Android, iOS, and web in the android, ios, and web fields. See [examples](#Examples) of how to use these fields and [supported analytics](#Analytics). + \- android | Optional | The URI that can be passed to an Android app with an `android.intent.action.VIEW` Android intent to support Android Deep Links (https://developer.android.com/training/app-links/deep-linking). Please use Android App Links (https://developer.android.com/training/app-links) if possible so viewing apps don’t need to manually manage the redirect of the user to the app store if the user doesn’t have the application installed.

This URI should be a deep link specific to this station, and should not be a general rental page that includes information for more than one station. The deep link should take users directly to this station, without any prompts, interstitial pages, or logins. Make sure that users can see this station even if they never previously opened the application. This is the same principle as the ["first click free"](https://support.google.com/news/publisher/answer/40543) experience for web sites.

If this field is empty, it means deep linking isn’t supported in the native Android rental app.

Note that URIs do not necessarily include the station_id for this station - other identifiers can be used by the rental app within the URI to uniquely identify this station.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

Android App Links example value: `https://www.abc.com/app?sid=1234567890&platform=android`

Deep Link (without App Links) example value: `com.abcrental.android://open.abc.app/app?sid=1234567890` + \- ios | Optional | The URI that can be used on iOS to launch the rental app for this station. More information on this iOS feature can be found [here](https://developer.apple.com/documentation/uikit/core_app/allowing_apps_and_websites_to_link_to_your_content/communicating_with_other_apps_using_custom_urls?language=objc). Please use iOS Universal Links (https://developer.apple.com/ios/universal-links/) if possible so viewing apps don’t need to manually manage the redirect of the user to the app store if the user doesn’t have the application installed.

This URI should be a deep link specific to this station, and should not be a general rental page that includes information for more than one station. The deep link should take users directly to this station, without any prompts, interstitial pages, or logins. Make sure that users can see this station even if they never previously opened the application. This is the same principle as the ["first click free"](https://support.google.com/news/publisher/answer/40543) experience for web sites.

If this field is empty, it means deep linking isn’t supported in the native iOS rental app.

Note that the URI does not necessarily include the station_id - other identifiers can be used by the rental app within the URL to uniquely identify this station.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

iOS Universal Links example value: `https://www.abc.com/app?sid=1234567890&platform=ios`

Deep Link (without Universal Links) example value: `com.abcrental.ios://open.abc.app/app?sid=1234567890` + \- web | Optional | A URL that can be used by a web browser to show more information about renting a vehicle at this station.

This URL should be a deep link specific to this station, and should not be a general rental page that includes information for more than one station. The deep link should take users directly to this station, without any prompts, interstitial pages, or logins. Make sure that users can see this station even if they never previously opened the application. This URI should follow ["first click free"](https://support.google.com/news/publisher/answer/40543) experience for web sites.

If this field is empty, it means deep linking isn’t supported for web browsers.

Example value: https://www.abc.com/app?sid=1234567890 ### station_status.json @@ -219,7 +231,10 @@ bikes | Yes | Array that contains one object per bike that is \- lon | Yes | Longitude of the bike. The field value must be a valid WGS 84 latitude in decimal degrees format. See: http://en.wikipedia.org/wiki/World_Geodetic_System, https://en.wikipedia.org/wiki/Decimal_degrees \- is_reserved | Yes | 1/0 value - is the bike currently reserved for someone else \- is_disabled | Yes | 1/0 value - is the bike currently disabled (broken) -\- rental_url | Optional | A fully qualified and encoded URL where a user can rent this bike_id. This URL should be a deep link specific to this bike_id, and should not be a general rental page that includes information for more than one bike. The deep link should take users directly to this bike_id, without any prompts, interstitial pages, or logins. Make sure that users can see this bike_id even if they never previously opened the application. This is the same principle as the ["first click free"](https://support.google.com/news/publisher/answer/40543) experience for web sites. +rental_uris | Optional | A JSON object that contains rental URIs for Android, iOS, and web in the android, ios, and web fields. See [examples](#Examples) of how to use these fields and [supported analytics](#Analytics). + \- android | Optional | The URI that can be passed to an Android app with an android.intent.action.VIEW Android intent to support Android Deep Links (https://developer.android.com/training/app-links/deep-linking). Please use Android App Links (https://developer.android.com/training/app-links) if possible so viewing apps don’t need to manually manage the redirect of the user to the app store if the user doesn’t have the application installed.

This URI should be a deep link specific to this bike, and should not be a general rental page that includes information for more than one bike. The deep link should take users directly to this bike, without any prompts, interstitial pages, or logins. Make sure that users can see this bike even if they never previously opened the application. This is the same principle as the ["first click free"](https://support.google.com/news/publisher/answer/40543) experience for web sites.

If this field is empty, it means deep linking isn’t supported in the native Android rental app.

Note that URIs do not necessarily include the bike_id for this bike - other identifiers can be used by the rental app within the URI to uniquely identify this bike.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

Android App Links example value: `https://www.abc.com/app?sid=1234567890&platform=android`

Deep Link (without App Links) example value: `com.abcrental.android://open.abc.app/app?sid=1234567890` + \- ios | Optional | The URI that can be used on iOS to launch the rental app for this bike. More information on this iOS feature can be found here: https://developer.apple.com/documentation/uikit/core_app/allowing_apps_and_websites_to_link_to_your_content/communicating_with_other_apps_using_custom_urls?language=objc. Please use iOS Universal Links (https://developer.apple.com/ios/universal-links/) if possible so viewing apps don’t need to manually manage the redirect of the user to the app store if the user doesn’t have the application installed.

This URI should be a deep link specific to this bike, and should not be a general rental page that includes information for more than one bike. The deep link should take users directly to this bike, without any prompts, interstitial pages, or logins. Make sure that users can see this bike even if they never previously opened the application. This is the same principle as the ["first click free"](https://support.google.com/news/publisher/answer/40543) experience for web sites.

If this field is empty, it means deep linking isn’t supported in the native iOS rental app.

Note that the URI does not necessarily include the bike_id - other identifiers can be used by the rental app within the URL to uniquely identify this bike.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

iOS Universal Links example value: `https://www.abc.com/app?sid=1234567890&platform=ios`

Deep Link (without Universal Links) example value: `com.abcrental.ios://open.abc.app/app?sid=1234567890` + \- web | Optional | A URL that can be used by a web browser to show more information about renting a vehicle at this bike.

This URL should be a deep link specific to this bike, and should not be a general rental page that includes information for more than one bike. The deep link should take users directly to this bike, without any prompts, interstitial pages, or logins. Make sure that users can see this bike even if they never previously opened the application. This URI should follow ["first click free"](https://support.google.com/news/publisher/answer/40543) experience for web sites.

If this field is empty, it means deep linking isn’t supported for web browsers.

Example value: https://www.abc.com/app?sid=1234567890 ### system_hours.json Describes the system hours of operation. A JSON array of hours defined as follows: @@ -319,6 +334,133 @@ alerts | Yes | Array - alert objects each indicating a separa \- description | Optional | String - Detailed text description of the alert \- last_updated | Optional | Integer POSIX timestamp indicating the last time the info for the particular alert was updated +## Deep Links + +Deep links to iOS, Android, and web apps are supported via URIs in the `system_information.json`, `station_information.json`, and `free_bike_status.json` files. The following sections describe how analytics can be added to these URIs, as well as some examples. + +### Analytics + +In all of the rental URI fields, a viewing app can report the origin of a deep link to request to a rental app by appending the `client_id` parameter to the URI along with the domain name for the viewing app. + +For example, if Google is the viewing app, it can append: + +`client_id=google.com` + +...to the URI field to report that Google is the originator of the deep link request. If the Android URI is: + +`com.abcrental.android://open.abc.app/stations?id=1234567890` + +...then the URI used by Google would be: `com.abcrental.android://open.abc.app/stations?id=1234567890&client_id=google.com` + +Other supported parameters include: + +1. `ad_id` - Advertising ID issued to the viewing app (e.g., IFDA on iOS) +2. `token` - A token identifier that was issued by the rental app to the viewing app. + +### Examples + +#### Example 1 - App Links on Android and Universal Links on iOS are supported: + +*system_information.json* + +``` +{ +"last_updated": 1572447999, +"data": { +"system_id": "1000", +"short_name": "ABC Bike Rental", +"rental_apps": { + "android": { + "discovery_uri": "com.abcrental.android://" + }, + "ios": { + "discovery_uri": "com.abcrental.ios://" + } + } +... +``` + +*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" + } + }, + ... +``` + + +Note that the Android URI and iOS Universal Link URLs don’t necessarily use the same identifier as the station_id. + + +#### Example 2 - App Links are not supported on Android and Universal Links are not supported on iOS, but deep links are still supported on Android and iOS: + +*system_information.json* + +``` +{ +"last_updated": 1572447999, +"data": { +"system_id": "1000", +"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://" + } + } + +... +``` + +*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" + } + }, + ... +``` + +#### Example 3 - Deep link web URLs are supported, but not Android or iOS native apps: + +*station_information.json* + +``` +"stations":[ + { + "station_id":425, + "name":"Coppertail", + "lat":27.9563335328521, + "lon":-82.430436084371, + "rental_uris": { + "web":"https://www.abc.com/app?sid=1234567890", + } + }, + ... +``` + ## Possible Future Enhancements There are some items that were proposed in an earlier version of this document but which do not fit into the current specification. They are collected here for reference and for possible discussion and inclusion in this or a future version. From d07aa7d6a2f418b05d5a3273c2a5822275c6b46d Mon Sep 17 00:00:00 2001 From: Sean Barbeau Date: Fri, 22 Nov 2019 16:06:30 -0500 Subject: [PATCH 5/7] Add more references to examples and analytics section --- gbfs.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gbfs.md b/gbfs.md index b6f8645e..3769e8ad 100644 --- a/gbfs.md +++ b/gbfs.md @@ -175,10 +175,10 @@ email | Optional | A single contact email address for customers to timezone | Yes | The time zone where the system is located. Time zone names never contain the space character but may contain an underscore. Please refer to the "TZ" value in https://en.wikipedia.org/wiki/List_of_tz_database_time_zones for a list of valid values license_url | Optional | A fully qualified URL of a page that defines the license terms for the GBFS data for this system, as well as any other license terms the system would like to define (including the use of corporate trademarks, etc) rental_apps | Optional | A JSON object that contains rental app information in the android and ios JSON objects. - \- android | Optional | A JSON object that contains rental app download and app discovery information for the Android platform in the store_uri and discovery_uri fields. See [examples](#Examples) of how to use these fields. + \- android | Optional | A JSON object that contains rental app download and app discovery information for the Android platform in the store_uri and discovery_uri fields. See [examples](#Examples) of how to use these fields and [supported analytics](#Analytics).  - store_uri | Conditionally Required | A URI where the rental Android app can be downloaded from. Typically this will be a URI to an app store such as Google Play. If the URI points to an app store such as Google Play, the URI should follow Android best practices so the viewing app can directly open the URI to the native app store app instead of a website.

If a rental_uris.android field is populated then this field is required, otherwise it is optional.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

Example value: `https://play.google.com/store/apps/details?id=com.abcrental.android`  - discovery_uri | Conditionally Required | A URI that can be used to discover if the rental Android app is installed on the device (e.g., using [`PackageManager.queryIntentActivities()`](https://developer.android.com/reference/android/content/pm/PackageManager.html#queryIntentActivities)). This intent is used by viewing apps prioritize rental apps for a particular user based on whether they already have a particular rental app installed.

This field is required if a rental_uris.android field is populated, otherwise it is optional.

Example value: `com.abcrental.android://` - \- ios | Optional | A JSON object that contains rental information for the iOS platform in the store_uri and discovery_uri fields. + \- ios | Optional | A JSON object that contains rental information for the iOS platform in the store_uri and discovery_uri fields. See [examples](#Examples) of how to use these fields and [supported analytics](#Analytics).  - store_uri | Conditionally Required | A URI where the rental iOS app can be downloaded from. Typically this will be a URI to an app store such as the Apple App Store. If the URI points to an app store such as the Apple App Store, the URI should follow iOS best practices so the viewing app can directly open the URI to the native app store app instead of a website.

If a rental_uris.ios field is populated then this field is required, otherwise it is optional.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

Example value: `https://apps.apple.com/app/apple-store/id123456789`  - discovery_uri | Conditionally Required | A URI that can be used to discover if the rental iOS app is installed on the device (e.g., using [`UIApplication canOpenURL:`](https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl?language=objc)). This intent is used by viewing apps prioritize rental apps for a particular user based on whether they already have a particular rental app installed.

This field is required if a rental_uris.ios field is populated, otherwise it is optional.

Example value: `com.abcrental.ios://` From 1a8aa9c29df3ff821a72a59bb71b821a3fab6ec5 Mon Sep 17 00:00:00 2001 From: Sean Barbeau Date: Thu, 5 Dec 2019 09:40:42 -0500 Subject: [PATCH 6/7] Remove "first click free" reference * The contents of this link has changed since I originally wrote the proposal. --- gbfs.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/gbfs.md b/gbfs.md index 3769e8ad..39613fef 100644 --- a/gbfs.md +++ b/gbfs.md @@ -201,9 +201,9 @@ stations | Yes | Array that contains one object per station in th \- rental_methods | Optional | Array of enumerables containing the payment methods accepted at this station.
Current valid values (in CAPS) are:
  • KEY _(i.e. operator issued bike key / fob / card)_
  • CREDITCARD
  • PAYPASS
  • APPLEPAY
  • ANDROIDPAY
  • TRANSITCARD
  • ACCOUNTNUMBER
  • PHONE
This list is intended to be as comprehensive at the time of publication as possible but is subject to change, as defined in [File Requirements](#file-requirements) above \- capacity | Optional | Number of total docking points installed at this station, both available and unavailable rental_uris | Optional | A JSON object that contains rental URIs for Android, iOS, and web in the android, ios, and web fields. See [examples](#Examples) of how to use these fields and [supported analytics](#Analytics). - \- android | Optional | The URI that can be passed to an Android app with an `android.intent.action.VIEW` Android intent to support Android Deep Links (https://developer.android.com/training/app-links/deep-linking). Please use Android App Links (https://developer.android.com/training/app-links) if possible so viewing apps don’t need to manually manage the redirect of the user to the app store if the user doesn’t have the application installed.

This URI should be a deep link specific to this station, and should not be a general rental page that includes information for more than one station. The deep link should take users directly to this station, without any prompts, interstitial pages, or logins. Make sure that users can see this station even if they never previously opened the application. This is the same principle as the ["first click free"](https://support.google.com/news/publisher/answer/40543) experience for web sites.

If this field is empty, it means deep linking isn’t supported in the native Android rental app.

Note that URIs do not necessarily include the station_id for this station - other identifiers can be used by the rental app within the URI to uniquely identify this station.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

Android App Links example value: `https://www.abc.com/app?sid=1234567890&platform=android`

Deep Link (without App Links) example value: `com.abcrental.android://open.abc.app/app?sid=1234567890` - \- ios | Optional | The URI that can be used on iOS to launch the rental app for this station. More information on this iOS feature can be found [here](https://developer.apple.com/documentation/uikit/core_app/allowing_apps_and_websites_to_link_to_your_content/communicating_with_other_apps_using_custom_urls?language=objc). Please use iOS Universal Links (https://developer.apple.com/ios/universal-links/) if possible so viewing apps don’t need to manually manage the redirect of the user to the app store if the user doesn’t have the application installed.

This URI should be a deep link specific to this station, and should not be a general rental page that includes information for more than one station. The deep link should take users directly to this station, without any prompts, interstitial pages, or logins. Make sure that users can see this station even if they never previously opened the application. This is the same principle as the ["first click free"](https://support.google.com/news/publisher/answer/40543) experience for web sites.

If this field is empty, it means deep linking isn’t supported in the native iOS rental app.

Note that the URI does not necessarily include the station_id - other identifiers can be used by the rental app within the URL to uniquely identify this station.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

iOS Universal Links example value: `https://www.abc.com/app?sid=1234567890&platform=ios`

Deep Link (without Universal Links) example value: `com.abcrental.ios://open.abc.app/app?sid=1234567890` - \- web | Optional | A URL that can be used by a web browser to show more information about renting a vehicle at this station.

This URL should be a deep link specific to this station, and should not be a general rental page that includes information for more than one station. The deep link should take users directly to this station, without any prompts, interstitial pages, or logins. Make sure that users can see this station even if they never previously opened the application. This URI should follow ["first click free"](https://support.google.com/news/publisher/answer/40543) experience for web sites.

If this field is empty, it means deep linking isn’t supported for web browsers.

Example value: https://www.abc.com/app?sid=1234567890 + \- android | Optional | The URI that can be passed to an Android app with an `android.intent.action.VIEW` Android intent to support Android Deep Links (https://developer.android.com/training/app-links/deep-linking). Please use Android App Links (https://developer.android.com/training/app-links) if possible so viewing apps don’t need to manually manage the redirect of the user to the app store if the user doesn’t have the application installed.

This URI should be a deep link specific to this station, and should not be a general rental page that includes information for more than one station. The deep link should take users directly to this station, without any prompts, interstitial pages, or logins. Make sure that users can see this station even if they never previously opened the application.

If this field is empty, it means deep linking isn’t supported in the native Android rental app.

Note that URIs do not necessarily include the station_id for this station - other identifiers can be used by the rental app within the URI to uniquely identify this station.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

Android App Links example value: `https://www.abc.com/app?sid=1234567890&platform=android`

Deep Link (without App Links) example value: `com.abcrental.android://open.abc.app/app?sid=1234567890` + \- ios | Optional | The URI that can be used on iOS to launch the rental app for this station. More information on this iOS feature can be found [here](https://developer.apple.com/documentation/uikit/core_app/allowing_apps_and_websites_to_link_to_your_content/communicating_with_other_apps_using_custom_urls?language=objc). Please use iOS Universal Links (https://developer.apple.com/ios/universal-links/) if possible so viewing apps don’t need to manually manage the redirect of the user to the app store if the user doesn’t have the application installed.

This URI should be a deep link specific to this station, and should not be a general rental page that includes information for more than one station. The deep link should take users directly to this station, without any prompts, interstitial pages, or logins. Make sure that users can see this station even if they never previously opened the application.

If this field is empty, it means deep linking isn’t supported in the native iOS rental app.

Note that the URI does not necessarily include the station_id - other identifiers can be used by the rental app within the URL to uniquely identify this station.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

iOS Universal Links example value: `https://www.abc.com/app?sid=1234567890&platform=ios`

Deep Link (without Universal Links) example value: `com.abcrental.ios://open.abc.app/app?sid=1234567890` + \- web | Optional | A URL that can be used by a web browser to show more information about renting a vehicle at this station.

This URL should be a deep link specific to this station, and should not be a general rental page that includes information for more than one station. The deep link should take users directly to this station, without any prompts, interstitial pages, or logins. Make sure that users can see this station even if they never previously opened the application.

If this field is empty, it means deep linking isn’t supported for web browsers.

Example value: https://www.abc.com/app?sid=1234567890 ### station_status.json @@ -232,9 +232,9 @@ bikes | Yes | Array that contains one object per bike that is \- is_reserved | Yes | 1/0 value - is the bike currently reserved for someone else \- is_disabled | Yes | 1/0 value - is the bike currently disabled (broken) rental_uris | Optional | A JSON object that contains rental URIs for Android, iOS, and web in the android, ios, and web fields. See [examples](#Examples) of how to use these fields and [supported analytics](#Analytics). - \- android | Optional | The URI that can be passed to an Android app with an android.intent.action.VIEW Android intent to support Android Deep Links (https://developer.android.com/training/app-links/deep-linking). Please use Android App Links (https://developer.android.com/training/app-links) if possible so viewing apps don’t need to manually manage the redirect of the user to the app store if the user doesn’t have the application installed.

This URI should be a deep link specific to this bike, and should not be a general rental page that includes information for more than one bike. The deep link should take users directly to this bike, without any prompts, interstitial pages, or logins. Make sure that users can see this bike even if they never previously opened the application. This is the same principle as the ["first click free"](https://support.google.com/news/publisher/answer/40543) experience for web sites.

If this field is empty, it means deep linking isn’t supported in the native Android rental app.

Note that URIs do not necessarily include the bike_id for this bike - other identifiers can be used by the rental app within the URI to uniquely identify this bike.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

Android App Links example value: `https://www.abc.com/app?sid=1234567890&platform=android`

Deep Link (without App Links) example value: `com.abcrental.android://open.abc.app/app?sid=1234567890` - \- ios | Optional | The URI that can be used on iOS to launch the rental app for this bike. More information on this iOS feature can be found here: https://developer.apple.com/documentation/uikit/core_app/allowing_apps_and_websites_to_link_to_your_content/communicating_with_other_apps_using_custom_urls?language=objc. Please use iOS Universal Links (https://developer.apple.com/ios/universal-links/) if possible so viewing apps don’t need to manually manage the redirect of the user to the app store if the user doesn’t have the application installed.

This URI should be a deep link specific to this bike, and should not be a general rental page that includes information for more than one bike. The deep link should take users directly to this bike, without any prompts, interstitial pages, or logins. Make sure that users can see this bike even if they never previously opened the application. This is the same principle as the ["first click free"](https://support.google.com/news/publisher/answer/40543) experience for web sites.

If this field is empty, it means deep linking isn’t supported in the native iOS rental app.

Note that the URI does not necessarily include the bike_id - other identifiers can be used by the rental app within the URL to uniquely identify this bike.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

iOS Universal Links example value: `https://www.abc.com/app?sid=1234567890&platform=ios`

Deep Link (without Universal Links) example value: `com.abcrental.ios://open.abc.app/app?sid=1234567890` - \- web | Optional | A URL that can be used by a web browser to show more information about renting a vehicle at this bike.

This URL should be a deep link specific to this bike, and should not be a general rental page that includes information for more than one bike. The deep link should take users directly to this bike, without any prompts, interstitial pages, or logins. Make sure that users can see this bike even if they never previously opened the application. This URI should follow ["first click free"](https://support.google.com/news/publisher/answer/40543) experience for web sites.

If this field is empty, it means deep linking isn’t supported for web browsers.

Example value: https://www.abc.com/app?sid=1234567890 + \- android | Optional | The URI that can be passed to an Android app with an android.intent.action.VIEW Android intent to support Android Deep Links (https://developer.android.com/training/app-links/deep-linking). Please use Android App Links (https://developer.android.com/training/app-links) if possible so viewing apps don’t need to manually manage the redirect of the user to the app store if the user doesn’t have the application installed.

This URI should be a deep link specific to this bike, and should not be a general rental page that includes information for more than one bike. The deep link should take users directly to this bike, without any prompts, interstitial pages, or logins. Make sure that users can see this bike even if they never previously opened the application.

If this field is empty, it means deep linking isn’t supported in the native Android rental app.

Note that URIs do not necessarily include the bike_id for this bike - other identifiers can be used by the rental app within the URI to uniquely identify this bike.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

Android App Links example value: `https://www.abc.com/app?sid=1234567890&platform=android`

Deep Link (without App Links) example value: `com.abcrental.android://open.abc.app/app?sid=1234567890` + \- ios | Optional | The URI that can be used on iOS to launch the rental app for this bike. More information on this iOS feature can be found here: https://developer.apple.com/documentation/uikit/core_app/allowing_apps_and_websites_to_link_to_your_content/communicating_with_other_apps_using_custom_urls?language=objc. Please use iOS Universal Links (https://developer.apple.com/ios/universal-links/) if possible so viewing apps don’t need to manually manage the redirect of the user to the app store if the user doesn’t have the application installed.

This URI should be a deep link specific to this bike, and should not be a general rental page that includes information for more than one bike. The deep link should take users directly to this bike, without any prompts, interstitial pages, or logins. Make sure that users can see this bike even if they never previously opened the application.

If this field is empty, it means deep linking isn’t supported in the native iOS rental app.

Note that the URI does not necessarily include the bike_id - other identifiers can be used by the rental app within the URL to uniquely identify this bike.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

iOS Universal Links example value: `https://www.abc.com/app?sid=1234567890&platform=ios`

Deep Link (without Universal Links) example value: `com.abcrental.ios://open.abc.app/app?sid=1234567890` + \- web | Optional | A URL that can be used by a web browser to show more information about renting a vehicle at this bike.

This URL should be a deep link specific to this bike, and should not be a general rental page that includes information for more than one bike. The deep link should take users directly to this bike, without any prompts, interstitial pages, or logins. Make sure that users can see this bike even if they never previously opened the application.

If this field is empty, it means deep linking isn’t supported for web browsers.

Example value: https://www.abc.com/app?sid=1234567890 ### system_hours.json Describes the system hours of operation. A JSON array of hours defined as follows: From 3e90af28a9c5a9d5829a9207beb9eaa78adf7c7a Mon Sep 17 00:00:00 2001 From: Sean Barbeau Date: Thu, 5 Dec 2019 10:11:40 -0500 Subject: [PATCH 7/7] Add (beta) label to new fields Following the goverance pilot process outlined at https://github.com/NABSA/gbfs/issues/163#issuecomment-559218562 --- gbfs.md | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/gbfs.md b/gbfs.md index 39613fef..86fcb910 100644 --- a/gbfs.md +++ b/gbfs.md @@ -174,13 +174,13 @@ phone_number | Optional | A single voice telephone number for the specifie email | Optional | A single contact email address for customers to address questions about the system timezone | Yes | The time zone where the system is located. Time zone names never contain the space character but may contain an underscore. Please refer to the "TZ" value in https://en.wikipedia.org/wiki/List_of_tz_database_time_zones for a list of valid values license_url | Optional | A fully qualified URL of a page that defines the license terms for the GBFS data for this system, as well as any other license terms the system would like to define (including the use of corporate trademarks, etc) -rental_apps | Optional | A JSON object that contains rental app information in the android and ios JSON objects. - \- android | Optional | A JSON object that contains rental app download and app discovery information for the Android platform in the store_uri and discovery_uri fields. See [examples](#Examples) of how to use these fields and [supported analytics](#Analytics). - - store_uri | Conditionally Required | A URI where the rental Android app can be downloaded from. Typically this will be a URI to an app store such as Google Play. If the URI points to an app store such as Google Play, the URI should follow Android best practices so the viewing app can directly open the URI to the native app store app instead of a website.

If a rental_uris.android field is populated then this field is required, otherwise it is optional.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

Example value: `https://play.google.com/store/apps/details?id=com.abcrental.android` - - discovery_uri | Conditionally Required | A URI that can be used to discover if the rental Android app is installed on the device (e.g., using [`PackageManager.queryIntentActivities()`](https://developer.android.com/reference/android/content/pm/PackageManager.html#queryIntentActivities)). This intent is used by viewing apps prioritize rental apps for a particular user based on whether they already have a particular rental app installed.

This field is required if a rental_uris.android field is populated, otherwise it is optional.

Example value: `com.abcrental.android://` - \- ios | Optional | A JSON object that contains rental information for the iOS platform in the store_uri and discovery_uri fields. See [examples](#Examples) of how to use these fields and [supported analytics](#Analytics). - - store_uri | Conditionally Required | A URI where the rental iOS app can be downloaded from. Typically this will be a URI to an app store such as the Apple App Store. If the URI points to an app store such as the Apple App Store, the URI should follow iOS best practices so the viewing app can directly open the URI to the native app store app instead of a website.

If a rental_uris.ios field is populated then this field is required, otherwise it is optional.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

Example value: `https://apps.apple.com/app/apple-store/id123456789` - - discovery_uri | Conditionally Required | A URI that can be used to discover if the rental iOS app is installed on the device (e.g., using [`UIApplication canOpenURL:`](https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl?language=objc)). This intent is used by viewing apps prioritize rental apps for a particular user based on whether they already have a particular rental app installed.

This field is required if a rental_uris.ios field is populated, otherwise it is optional.

Example value: `com.abcrental.ios://` +rental_apps *(beta)* | Optional | A JSON object that contains rental app information in the android and ios JSON objects. + \- android *(beta)* | Optional | A JSON object that contains rental app download and app discovery information for the Android platform in the store_uri and discovery_uri fields. See [examples](#Examples) of how to use these fields and [supported analytics](#Analytics). + - store_uri *(beta)* | Conditionally Required | A URI where the rental Android app can be downloaded from. Typically this will be a URI to an app store such as Google Play. If the URI points to an app store such as Google Play, the URI should follow Android best practices so the viewing app can directly open the URI to the native app store app instead of a website.

If a rental_uris.android field is populated then this field is required, otherwise it is optional.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

Example value: `https://play.google.com/store/apps/details?id=com.abcrental.android` + - discovery_uri *(beta)* | Conditionally Required | A URI that can be used to discover if the rental Android app is installed on the device (e.g., using [`PackageManager.queryIntentActivities()`](https://developer.android.com/reference/android/content/pm/PackageManager.html#queryIntentActivities)). This intent is used by viewing apps prioritize rental apps for a particular user based on whether they already have a particular rental app installed.

This field is required if a rental_uris.android field is populated, otherwise it is optional.

Example value: `com.abcrental.android://` + \- ios *(beta)* | Optional | A JSON object that contains rental information for the iOS platform in the store_uri and discovery_uri fields. See [examples](#Examples) of how to use these fields and [supported analytics](#Analytics). + - store_uri *(beta)* | Conditionally Required | A URI where the rental iOS app can be downloaded from. Typically this will be a URI to an app store such as the Apple App Store. If the URI points to an app store such as the Apple App Store, the URI should follow iOS best practices so the viewing app can directly open the URI to the native app store app instead of a website.

If a rental_uris.ios field is populated then this field is required, otherwise it is optional.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

Example value: `https://apps.apple.com/app/apple-store/id123456789` + - discovery_uri *(beta)* | Conditionally Required | A URI that can be used to discover if the rental iOS app is installed on the device (e.g., using [`UIApplication canOpenURL:`](https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl?language=objc)). This intent is used by viewing apps prioritize rental apps for a particular user based on whether they already have a particular rental app installed.

This field is required if a rental_uris.ios field is populated, otherwise it is optional.

Example value: `com.abcrental.ios://` ### station_information.json @@ -200,10 +200,10 @@ stations | Yes | Array that contains one object per station in th \- post_code | Optional | Postal code where station is located \- rental_methods | Optional | Array of enumerables containing the payment methods accepted at this station.
Current valid values (in CAPS) are:
  • KEY _(i.e. operator issued bike key / fob / card)_
  • CREDITCARD
  • PAYPASS
  • APPLEPAY
  • ANDROIDPAY
  • TRANSITCARD
  • ACCOUNTNUMBER
  • PHONE
This list is intended to be as comprehensive at the time of publication as possible but is subject to change, as defined in [File Requirements](#file-requirements) above \- capacity | Optional | Number of total docking points installed at this station, both available and unavailable -rental_uris | Optional | A JSON object that contains rental URIs for Android, iOS, and web in the android, ios, and web fields. See [examples](#Examples) of how to use these fields and [supported analytics](#Analytics). - \- android | Optional | The URI that can be passed to an Android app with an `android.intent.action.VIEW` Android intent to support Android Deep Links (https://developer.android.com/training/app-links/deep-linking). Please use Android App Links (https://developer.android.com/training/app-links) if possible so viewing apps don’t need to manually manage the redirect of the user to the app store if the user doesn’t have the application installed.

This URI should be a deep link specific to this station, and should not be a general rental page that includes information for more than one station. The deep link should take users directly to this station, without any prompts, interstitial pages, or logins. Make sure that users can see this station even if they never previously opened the application.

If this field is empty, it means deep linking isn’t supported in the native Android rental app.

Note that URIs do not necessarily include the station_id for this station - other identifiers can be used by the rental app within the URI to uniquely identify this station.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

Android App Links example value: `https://www.abc.com/app?sid=1234567890&platform=android`

Deep Link (without App Links) example value: `com.abcrental.android://open.abc.app/app?sid=1234567890` - \- ios | Optional | The URI that can be used on iOS to launch the rental app for this station. More information on this iOS feature can be found [here](https://developer.apple.com/documentation/uikit/core_app/allowing_apps_and_websites_to_link_to_your_content/communicating_with_other_apps_using_custom_urls?language=objc). Please use iOS Universal Links (https://developer.apple.com/ios/universal-links/) if possible so viewing apps don’t need to manually manage the redirect of the user to the app store if the user doesn’t have the application installed.

This URI should be a deep link specific to this station, and should not be a general rental page that includes information for more than one station. The deep link should take users directly to this station, without any prompts, interstitial pages, or logins. Make sure that users can see this station even if they never previously opened the application.

If this field is empty, it means deep linking isn’t supported in the native iOS rental app.

Note that the URI does not necessarily include the station_id - other identifiers can be used by the rental app within the URL to uniquely identify this station.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

iOS Universal Links example value: `https://www.abc.com/app?sid=1234567890&platform=ios`

Deep Link (without Universal Links) example value: `com.abcrental.ios://open.abc.app/app?sid=1234567890` - \- web | Optional | A URL that can be used by a web browser to show more information about renting a vehicle at this station.

This URL should be a deep link specific to this station, and should not be a general rental page that includes information for more than one station. The deep link should take users directly to this station, without any prompts, interstitial pages, or logins. Make sure that users can see this station even if they never previously opened the application.

If this field is empty, it means deep linking isn’t supported for web browsers.

Example value: https://www.abc.com/app?sid=1234567890 +rental_uris *(beta)* | Optional | A JSON object that contains rental URIs for Android, iOS, and web in the android, ios, and web fields. See [examples](#Examples) of how to use these fields and [supported analytics](#Analytics). + \- android *(beta)* | Optional | The URI that can be passed to an Android app with an `android.intent.action.VIEW` Android intent to support Android Deep Links (https://developer.android.com/training/app-links/deep-linking). Please use Android App Links (https://developer.android.com/training/app-links) if possible so viewing apps don’t need to manually manage the redirect of the user to the app store if the user doesn’t have the application installed.

This URI should be a deep link specific to this station, and should not be a general rental page that includes information for more than one station. The deep link should take users directly to this station, without any prompts, interstitial pages, or logins. Make sure that users can see this station even if they never previously opened the application.

If this field is empty, it means deep linking isn’t supported in the native Android rental app.

Note that URIs do not necessarily include the station_id for this station - other identifiers can be used by the rental app within the URI to uniquely identify this station.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

Android App Links example value: `https://www.abc.com/app?sid=1234567890&platform=android`

Deep Link (without App Links) example value: `com.abcrental.android://open.abc.app/app?sid=1234567890` + \- ios *(beta)* | Optional | The URI that can be used on iOS to launch the rental app for this station. More information on this iOS feature can be found [here](https://developer.apple.com/documentation/uikit/core_app/allowing_apps_and_websites_to_link_to_your_content/communicating_with_other_apps_using_custom_urls?language=objc). Please use iOS Universal Links (https://developer.apple.com/ios/universal-links/) if possible so viewing apps don’t need to manually manage the redirect of the user to the app store if the user doesn’t have the application installed.

This URI should be a deep link specific to this station, and should not be a general rental page that includes information for more than one station. The deep link should take users directly to this station, without any prompts, interstitial pages, or logins. Make sure that users can see this station even if they never previously opened the application.

If this field is empty, it means deep linking isn’t supported in the native iOS rental app.

Note that the URI does not necessarily include the station_id - other identifiers can be used by the rental app within the URL to uniquely identify this station.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

iOS Universal Links example value: `https://www.abc.com/app?sid=1234567890&platform=ios`

Deep Link (without Universal Links) example value: `com.abcrental.ios://open.abc.app/app?sid=1234567890` + \- web *(beta)* | Optional | A URL that can be used by a web browser to show more information about renting a vehicle at this station.

This URL should be a deep link specific to this station, and should not be a general rental page that includes information for more than one station. The deep link should take users directly to this station, without any prompts, interstitial pages, or logins. Make sure that users can see this station even if they never previously opened the application.

If this field is empty, it means deep linking isn’t supported for web browsers.

Example value: https://www.abc.com/app?sid=1234567890 ### station_status.json @@ -231,10 +231,10 @@ bikes | Yes | Array that contains one object per bike that is \- lon | Yes | Longitude of the bike. The field value must be a valid WGS 84 latitude in decimal degrees format. See: http://en.wikipedia.org/wiki/World_Geodetic_System, https://en.wikipedia.org/wiki/Decimal_degrees \- is_reserved | Yes | 1/0 value - is the bike currently reserved for someone else \- is_disabled | Yes | 1/0 value - is the bike currently disabled (broken) -rental_uris | Optional | A JSON object that contains rental URIs for Android, iOS, and web in the android, ios, and web fields. See [examples](#Examples) of how to use these fields and [supported analytics](#Analytics). - \- android | Optional | The URI that can be passed to an Android app with an android.intent.action.VIEW Android intent to support Android Deep Links (https://developer.android.com/training/app-links/deep-linking). Please use Android App Links (https://developer.android.com/training/app-links) if possible so viewing apps don’t need to manually manage the redirect of the user to the app store if the user doesn’t have the application installed.

This URI should be a deep link specific to this bike, and should not be a general rental page that includes information for more than one bike. The deep link should take users directly to this bike, without any prompts, interstitial pages, or logins. Make sure that users can see this bike even if they never previously opened the application.

If this field is empty, it means deep linking isn’t supported in the native Android rental app.

Note that URIs do not necessarily include the bike_id for this bike - other identifiers can be used by the rental app within the URI to uniquely identify this bike.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

Android App Links example value: `https://www.abc.com/app?sid=1234567890&platform=android`

Deep Link (without App Links) example value: `com.abcrental.android://open.abc.app/app?sid=1234567890` - \- ios | Optional | The URI that can be used on iOS to launch the rental app for this bike. More information on this iOS feature can be found here: https://developer.apple.com/documentation/uikit/core_app/allowing_apps_and_websites_to_link_to_your_content/communicating_with_other_apps_using_custom_urls?language=objc. Please use iOS Universal Links (https://developer.apple.com/ios/universal-links/) if possible so viewing apps don’t need to manually manage the redirect of the user to the app store if the user doesn’t have the application installed.

This URI should be a deep link specific to this bike, and should not be a general rental page that includes information for more than one bike. The deep link should take users directly to this bike, without any prompts, interstitial pages, or logins. Make sure that users can see this bike even if they never previously opened the application.

If this field is empty, it means deep linking isn’t supported in the native iOS rental app.

Note that the URI does not necessarily include the bike_id - other identifiers can be used by the rental app within the URL to uniquely identify this bike.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

iOS Universal Links example value: `https://www.abc.com/app?sid=1234567890&platform=ios`

Deep Link (without Universal Links) example value: `com.abcrental.ios://open.abc.app/app?sid=1234567890` - \- web | Optional | A URL that can be used by a web browser to show more information about renting a vehicle at this bike.

This URL should be a deep link specific to this bike, and should not be a general rental page that includes information for more than one bike. The deep link should take users directly to this bike, without any prompts, interstitial pages, or logins. Make sure that users can see this bike even if they never previously opened the application.

If this field is empty, it means deep linking isn’t supported for web browsers.

Example value: https://www.abc.com/app?sid=1234567890 +rental_uris *(beta)* | Optional | A JSON object that contains rental URIs for Android, iOS, and web in the android, ios, and web fields. See [examples](#Examples) of how to use these fields and [supported analytics](#Analytics). + \- android *(beta)* | Optional | The URI that can be passed to an Android app with an android.intent.action.VIEW Android intent to support Android Deep Links (https://developer.android.com/training/app-links/deep-linking). Please use Android App Links (https://developer.android.com/training/app-links) if possible so viewing apps don’t need to manually manage the redirect of the user to the app store if the user doesn’t have the application installed.

This URI should be a deep link specific to this bike, and should not be a general rental page that includes information for more than one bike. The deep link should take users directly to this bike, without any prompts, interstitial pages, or logins. Make sure that users can see this bike even if they never previously opened the application.

If this field is empty, it means deep linking isn’t supported in the native Android rental app.

Note that URIs do not necessarily include the bike_id for this bike - other identifiers can be used by the rental app within the URI to uniquely identify this bike.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

Android App Links example value: `https://www.abc.com/app?sid=1234567890&platform=android`

Deep Link (without App Links) example value: `com.abcrental.android://open.abc.app/app?sid=1234567890` + \- ios *(beta)* | Optional | The URI that can be used on iOS to launch the rental app for this bike. More information on this iOS feature can be found here: https://developer.apple.com/documentation/uikit/core_app/allowing_apps_and_websites_to_link_to_your_content/communicating_with_other_apps_using_custom_urls?language=objc. Please use iOS Universal Links (https://developer.apple.com/ios/universal-links/) if possible so viewing apps don’t need to manually manage the redirect of the user to the app store if the user doesn’t have the application installed.

This URI should be a deep link specific to this bike, and should not be a general rental page that includes information for more than one bike. The deep link should take users directly to this bike, without any prompts, interstitial pages, or logins. Make sure that users can see this bike even if they never previously opened the application.

If this field is empty, it means deep linking isn’t supported in the native iOS rental app.

Note that the URI does not necessarily include the bike_id - other identifiers can be used by the rental app within the URL to uniquely identify this bike.

See the [Analytics](#Analytics) section for how viewing apps can report the origin of the deep link to rental apps.

iOS Universal Links example value: `https://www.abc.com/app?sid=1234567890&platform=ios`

Deep Link (without Universal Links) example value: `com.abcrental.ios://open.abc.app/app?sid=1234567890` + \- web *(beta)* | Optional | A URL that can be used by a web browser to show more information about renting a vehicle at this bike.

This URL should be a deep link specific to this bike, and should not be a general rental page that includes information for more than one bike. The deep link should take users directly to this bike, without any prompts, interstitial pages, or logins. Make sure that users can see this bike even if they never previously opened the application.

If this field is empty, it means deep linking isn’t supported for web browsers.

Example value: https://www.abc.com/app?sid=1234567890 ### system_hours.json Describes the system hours of operation. A JSON array of hours defined as follows: @@ -334,13 +334,13 @@ alerts | Yes | Array - alert objects each indicating a separa \- description | Optional | String - Detailed text description of the alert \- last_updated | Optional | Integer POSIX timestamp indicating the last time the info for the particular alert was updated -## Deep Links +## Deep Links *(beta)* Deep links to iOS, Android, and web apps are supported via URIs in the `system_information.json`, `station_information.json`, and `free_bike_status.json` files. The following sections describe how analytics can be added to these URIs, as well as some examples. -### Analytics +### Analytics *(beta)* -In all of the rental URI fields, a viewing app can report the origin of a deep link to request to a rental app by appending the `client_id` parameter to the URI along with the domain name for the viewing app. +In all of the rental URI fields, a viewing app can report the origin of a deep link to request to a rental app by appending the `client_id` *(beta)* parameter to the URI along with the domain name for the viewing app. For example, if Google is the viewing app, it can append: @@ -354,10 +354,10 @@ For example, if Google is the viewing app, it can append: Other supported parameters include: -1. `ad_id` - Advertising ID issued to the viewing app (e.g., IFDA on iOS) -2. `token` - A token identifier that was issued by the rental app to the viewing app. +1. `ad_id` *(beta)* - Advertising ID issued to the viewing app (e.g., IFDA on iOS) +2. `token` *(beta)* - A token identifier that was issued by the rental app to the viewing app. -### Examples +### Examples *(beta)* #### Example 1 - App Links on Android and Universal Links on iOS are supported: