#Karhoo Android UI SDK
The UI SDK extends our Network SDK with ready to use screens and views for your end users to book rides with Karhoo in your application.
For more general information about the SDKs, checkout the karhoo developer portal
Installation
Depending on the payment provider that you wish to integrate with, we offer three dependencies, each one containing a different payment provider integration. Only one of them should be used when adding the UISDK to your project
Stable Release
dependencies {
//... Other project dependencies
//The -adyen dependency contains the Adyen integration:
implementation 'com.github.karhoo.karhoo-android-ui-sdk:uisdk-adyen:1.13.3'
//Note that only one dependency from the above three should be integrated into your project
}
Initialisation
There are a few things the UI SDK needs to know before you can get started such as what environment to connect to, or what kind of authentication method to use. To configure the SDK you will need to provide an implementation of our KarhooUISDKConfiguration interface. This lets our SDK grab certain dependencies and configuration settings.
class KarhooConfig(val context: Context): KarhooUISDKConfiguration {
override lateinit var paymentManager: PaymentManager
var sdkAuthenticationRequired: ((callback: () -> Unit) -> Unit)? = null
override fun logo(): Drawable? {
return context.getDrawable(R.drawable.your-logo)
}
override fun environment(): KarhooEnvironment {
return KarhooEnvironment.Sandbox()
}
override fun context(): Context {
return context
}
override fun authenticationMethod(): AuthenticationMethod {
return AuthenticationMethod.KarhooUser()
}
override suspend fun requireSDKAuthentication(callback: () -> Unit) {
sdkAuthenticationRequired?.invoke(callback)
}
}
// Then set the payment provider and register the configuration in your Application file
// The payment provider's view needs to be instantiated. It can be AdyenPaymentView or BraintreePaymentView depending on the PSP choice
// Adyen integration
val paymentManager = AdyenPaymentManager()
paymentManager.paymentProviderView = AdyenPaymentView()
// Braintree integration
val paymentManager = BraintreePaymentManager()
paymentManager.paymentProviderView = BraintreePaymentView()
// Later down the line
val config = SDKConfig(context = this.applicationContext)
config.sdkAuthenticationRequired = {
loginInBackground(it, yourToken)
}
KarhooApi.setConfiguration(configuration = config)
// Implementing the token refresh flow
private var deferredRequests: MutableList<(()-> Unit)> = arrayListOf()
private fun loginInBackground(callback: () -> Unit, token: String) {
if (!requestedAuthentication) {
Log.e(TAG, "Need an external authentication")
requestedAuthentication = true
deferredRequests.add(callback)
GlobalScope.launch {
//Refresh your own access token in order to ensure a proper validity period for the Karhoo token
//Then use that token to refresh the credentials inside the SDK
KarhooApi.authService.login(token).execute { result ->
when (result) {
is Resource.Success -> {
Log.e(TAG, "We got a new token from the back-end")
deferredRequests.map {
it.invoke()
}
deferredRequests.clear()
requestedAuthentication = false
}
is Resource.Failure -> toastErrorMessage(result.error)
}
}
}
} else {
deferredRequests.add(callback)
}
}
With this configuration the UISDK can be initialised in your Activities/Fragments. This will also ensure the network layer (KarhooSDK) is initialised and configured properly.
For full documentation of SDK services please visit our Developer Portal: https://developer.karhoo.com/reference#user-service
Set up for developing the SDK
This project uses the Gradle build system.
First download the project by cloning this repository or downloading an archived snapshot. (See the options at the top of the page.)
In Android Studio, use the "Import non-Android Studio project" or "Import Project" option. If prompted for a gradle configuration accept the default settings.
Alternatively use the gradlew build
command to build the project directly.
Getting Started with the sample app
The demo app require that you add your own set of API keys:
- Create a file in the app directory called
secure.properties
(this file should NOT be under version control to protect your API key) - Add the API keys and configurations to secure.properties. You can also take a look at the
secure.properties.template
as an example.- Get a Maps API key
- Enable Firebase analytics/crashlytics and add config file to the project (google-service.json) (Optional)
- Add GUEST CHECKOUT configuration for your account in order to enable the guest checkout journey
- Add Staging environment configuration in order to be able to use Staging environment
- Update fabric API key in app/build.gradle
- Build and run
Issues
๐ Bugs
Please file an issue for bugs, missing documentation, or unexpected behavior.
๐ก Feature Requests
Please file an issue to suggest new features. Vote on feature requests by adding a ๐. This helps maintainers prioritize what to work on.
โ Questions
For questions related to using the library, please re-visit a documentation first. If there are no answer, please create an issue with a label help needed
.