1️⃣ Getting started
In this short guide, you will learn how to integrate the Keyless SDK in your Android or iOS mobile application, and enroll and authenticate users through the Keyless platform.
Before jumping into your code editor, make sure that you're familiar with the various components of the authentication system, and common biometic authentication flows.
Prerequisites
Make sure you have both required API keys, and the list of productions hosts from your Keyless contact:
YOUR_CLOUDSMITH_TOKEN
to download the SDK from cloudsmith repositoryKEYLESS_API_KEY
to configure the mobile SDKKEYLESS_HOSTS
a list of node URLs. Urls inKEYLESS_HOSTS
must NOT contain any trailing slashes/
.
Review the Keyless SDK requirements:
The Keyless SDK uses
Android 6.0 (API level 23) and above
Installation
To allow Keyless to handle the result of registerForActivityResult, you must call Keyless from an Activity implementing ActivityResultCaller.
Extend any androidX activity that implements the interface for you, for example let your Activity extend the generic ComponentActivity or the more widespread AppCompatActivity.
If you use Proguard, add the following rules to your Proguard configuration file:
# Keyless Proguard -keep class io.keyless.sdk.** {*;} -keepclassmembers class io.keyless.sdk.** {*;}
In the the
repositories
section of thesettings.gradle
file of your Android application, add the following snippet, replacingYOUR_CLOUDSMITH_TOKEN
with the CloudSmith token provided to you by Keyless.dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() maven { url "https://dl.cloudsmith.io/YOUR_CLOUDSMITH_TOKEN/keyless/partners/maven/" } } }
In the
dependencies
block of your projectbuild.gradle
file, typicallyapp/build.gradle
, add:dependencies { // ... implementation 'io.keyless:keyless-android-sdk:+' }
In the
android
block of your projectbuild.gradle
file, typicallyapp/build.gradle
, make sure you have the following options:android { // ... compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } // add the following only if you're using Kotlin kotlinOptions { jvmTarget = "1.8" } }
Essential configuration
There is some essential configuration to do before you can use the Keyless SDK.
Initialize the Keyless SDK in your
Application
class:// MainApplication override fun onCreate() { super.onCreate() // Initialize Keyless Keyless.initialize(this) }
Add your application to the Manifest
<application ... android:name=".MainApplication" ... </application>
Configure the Keyless SDK from your
MainActivity
,ViewModel
or any class you use to communicate withKeyless
. Note thatconfigure
is asynchronous so wait for the completion callback before calling the next Keyless APIsThe
configure
method requires aSetupConfig
as parameter, as well as theKEYLESS_API_KEY
andKEYLESS_HOSTS
you received from Keyless. You should listen to the result as follows:val setupConfig = SetupConfig( apiKey = "KEYLESS_API_KEY", hosts = listOf("KEYLESS_HOSTS") ) Keyless.configure(setupConfig) { result -> when (result) { is Keyless.KeylessResult.Success -> { Log.d("KeylessSDK", "configure success") // Keyless is ready, you can now call // enroll/authenticate/deEnroll ... } is Keyless.KeylessResult.Failure ->{ Log.d("KeylessSDK", "configure error") // Inspect result.error for more info } } }
Additional configuration
As well as the essential configuration parameters, you can also specify the optional configuration parameters detailed in the following sections. Details of these configuration options can be summarised in the relevant sections throughout the Mobile SDK (i.e. Logging, Liveness Settings etc.) and you can inspect the Config class to see optional parameters (or the builder to see exposed methods). Some of the more the more generic configurations are described below for convenience.
Shared circuits
This is the target desired number of circuits kept on the server. To set this number use the numberOfSharedCircuits
.
Networking module
If you need to perform network requests on behalf of the Keyless SDK, you can implement the KLNetworkingModule
interface. Set the networkingModule
parameter with an instance of the KLNetworkingModule
:
public interface KLNetworkingModule {
public fun sendHTTPRequest(
baseUrl: String,
path: String,
method: String,
headers: Map<String, String>,
body: String
): KLHTTPResponse
public data class KLHTTPResponse(
val errorCode: Int,
val httpCode: Int,
val responseBody: String
)
}
Last updated
Was this helpful?