Android
Users can deep link through to the booking screen by adding an intent-filter to the relevant activity of their app in the AndroidManifest and the code to retrieve the data and construct the BookingActivity as detailed in the Android developer guide.
<!-- Booking deep linking -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="karhoo.app"
android:pathPattern="/location"
android:scheme="https" />
</intent-filter>
<!-- Trip tracking deep linking -->
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="karhoo.app"
android:pathPattern="/triptracking"
android:scheme="https" />
</intent-filter>
Get the data to construct the JourneyInfo (for the Booking Screen) or the TripInfo (for trip tracking) from the Intent
//Get the booking deep link data from the intent
intent?.data?.apply {
val origin = getQueryParameter(ORIGIN_LATITUDE)?.let { latitude ->
getQueryParameter(ORIGIN_LONGITUDE)?.let { longitude ->
Position(latitude = latitude.toDouble(), longitude = longitude.toDouble())
}
}
val destination = getQueryParameter(DESTINATION_LATITUDE)?.let { latitude ->
getQueryParameter(DESTINATION_LONGITUDE)?.let { longitude ->
Position(latitude = latitude.toDouble(), longitude = longitude.toDouble())
}
}
val dateTime = getQueryParameter(DATE_TIME)?.let {
DateTime.parse(it, DateTimeFormat.forPattern("yyyy-MM-dd HH:mm"))
}
journeyInfo = JourneyInfo(origin, destination, dateTime)
} ?: run { journeyInfo = null }
//Get the trip tracking deep link data from the intent
intent?.data?.apply {
val tripId = getQueryParameter(TRIP_ID)?.let { it }
tripId?.let {
val origin = getQueryParameter(ORIGIN_LATITUDE)?.let { latitude ->
getQueryParameter(ORIGIN_LONGITUDE)?.let { longitude ->
getQueryParameter(ORIGIN_DISPLAY_ADDRESS)?.let { display_address ->
val pos = Position(
latitude = latitude.toDouble(), longitude = = longitude.toDouble()
)
TripLocationInfo(position = pos, displayAddress = display_address)
}
}
}
val destination = getQueryParameter(DESTINATION_LATITUDE)?.let { latitude ->
getQueryParameter(DESTINATION_LONGITUDE)?.let { longitude ->
getQueryParameter(DESTINATION_DISPLAY_ADDRESS)?.let { display_address ->
val pos = Position(
latitude = latitude.toDouble(), longitude = = longitude.toDouble() )
TripLocationInfo(position = pos, displayAddress = display_address)
}
}
}
tripInfo = TripInfo(tripId = tripId, origin = origin, destination = destination)
}
} ?: run { tripInfo = null }
//These can be changed to match the parameter names used in the deep link
companion object {
private const val ORIGIN_LATITUDE = "origin_latitude"
private const val ORIGIN_LONGITUDE = "origin_longitude"
private const val DESTINATION_LATITUDE = "destination_latitude"
private const val DESTINATION_LONGITUDE = "destination_longitude"
private const val DATE_TIME = "date_time"
private const val TRIP_ID = "trip_id"
private const val ORIGIN_DISPLAY_ADDRESS = "origin_display_address"
private const val DESTINATION_DISPLAY_ADDRESS = "destination_display_address"
}
The use the JourneyInfo or TripInfo when building the BookingActivity
//Use the JourneyInfo created when starting the BookingActivity
val builder = BookingActivity.Builder.builder
.initialLocation(location)
.journeyInfo(journeyInfo)
.tripInfo(tripInfo)
startActivity(builder.build(this))
The following can be accessed using a deep link similar to the ones below where the parameters updated appropriately: