These docs are for v1.0. Click to read the latest docs for v2.0.

trackDriver

The driver tracking service provides details about the driver including the drivers position, their ETA and their time of arrival to the destination in minutes. Once a trip status has been changed from confirmed to driver en-route this endpoint will be available for updates.

trackDriver trackDriver(tripId: String) : PollCall<DriverTrackingInfo>

Returns a list of locations that match a provided search query. Position inside PlaceSearch means results will be biased to that proximity. You can use the locationInfo to then get full information on a place.

sessionToken inside PlaceSearch indicates the session for requests. Many requests can be made with the same session token.

Parameters

tripID: String (id of the trip)

Returns

PollCall

Errors

K4012 CouldNotGetTripCouldNotFindSpecifiedTrip
K4013 CouldNotGetTripPermissionDenied
K0004 CouldNotParseAuthorisationToken
K4013 CouldNotGetTrip

Examples

iOS

let driverTracking = Karhoo.getDriverTrackingService()

/* Polling */

// create observer
let driverTrackingObserver = Observer<DriverTrackingInfo> { [weak self] result in
    switch result {
        case .success(let driverTrackingInfo):
            print("Driver position: \(driverTrackingInfo.position)")
        case .failure(let error):
            // handle error (KarhooError)
        }
    }

// create observable
let driverTrackingObservable = driverTracking.trackDriver(tripId: "1234").observable()

// subscribe observer to observable
driverTrackingObservable.subscribe(observer: driverTrackingObserver)

// unsubscribe observer from observable
driverTrackingObservable.unsubscribe(observer: driverTrackingObserver)


/* Single Response */

driverTracking.trackDriver(tripId: "1234").execute { [weak self] result in
    switch result {
        case .success(let driverTrackingInfo):
            print("Driver position: \(driverTrackingInfo.position)")
        case .failure(let error):
            // handle error (KarhooError)
      }
}

Android

// Create observer
val driverPositionObserver = object : Observer<Resource<DriverTrackingInfo>> {
    override fun onValueChanged(value: Resource<DriverTrackingInfo>) {
        when (value) {
            is Resource.Success -> print(value.data)
            is Resource.Failure -> print(value.error.internalMessage)
        }
    }
}

// Subscribe to observable with repeatable poll time
val tripId = "ID_OF_THE_TRIP_TO_TRACK"
val REPEAT_INTERVAL = 10000
val driverTrackingInfoObservable = driverTrackingService.trackDriver(tripId).observable().apply {
    driverPositionObserver?.let {
        subscribe(it, REPEAT_INTERVAL)
    }
}

// Unsubscribe from observable
driverPositionObserver?.let {
    driverTrackingInfoObservable?.unsubscribe(it)
}

// Single response
driverTrackingService.trackDriver(tripId).execute { result ->
    when (result) {
        is Resource.Success -> print(result.data) // Handle data
        is Resource.Failure -> print(result.error.internalMessage) //Handle errors
    }
}