Requirements

  • The compileSdk version should be 35.
  • The minimum SDK version supported by the SDK is 21.
  • The kotlin version should be 1.9.0 and above.
  • The gradle version should be 8.3.1 and above.

This is the new Headless authentication SDK that is significantly faster and more robust than the previous version. This upgrade enhances performance, reliability, and security, ensuring a seamless authentication experience, along with a seamless integration process. We strongly recommend migrating to the new SDK for improved efficiency and better support. To migrate from the old SDK, remove the previous SDK dependency and integration and follow the below mentioned steps.

Step 1: Add SDK Dependency

First, let’s add the OTPLESS SDK to your project. Update your app’s build.gradle file by adding the following dependency:

  implementation ("io.github.otpless-tech:otpless-headless-sdk:latest_version")

Please check the latest version of the SDK here. Make sure to synchronize your Gradle project to fetch the dependency.

Step 2: Update AndroidManifest.xml

Add this intent filter to your LoginActivity in AndroidManifest.xml:

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.BROWSABLE" />
    <category android:name="android.intent.category.DEFAULT" />
    <data
        android:scheme="otpless.your_appid_in_lowercase"
        android:host="otpless" />
</intent-filter>

Replace YOUR_APP_ID with your actual App ID provided in your OTPLESS dashboard.

🔍 Example: If your App ID is “AcmeApp123”, scheme becomes otpless.acmeapp123

Additionally, ensure your activity is set to singleTop launch mode and that the exported attribute is true:

android:launchMode="singleTop"
android:exported="true"

Step 3: Add SDK Initialization

Import OtplessSDK in your LoginActivity.ktfile:

import com.otpless.v2.android.sdk.main.OtplessSDK;

initialize the SDK in your LoginActivity or LoginFragment depending upon your application architecture. In case of:

  • LoginActivity - Initialise the SDK in the onCreate() function
  • LoginFragment - Initialise the SDK in the onViewCreated() function.
OtplessSDK.initialize(appId = "YOUR_APPID", activity = activity)
OtplessSDK.setResponseCallback(this::onOtplessResponse)

Replace YOUR_APP_ID with your actual App ID provided in your OTPLESS dashboard.

Step 4: Handle Callback

Now, let’s implement a callback method to handle the response from the OTPLESS SDK:

private fun onOtplessResponse(response: OtplessResponse) {
    OtplessSDK.commit(response)
    when (response.responseType) {
        ResponseTypes.INITIATE -> {
            // notify that authentication has been initiated
        }
        ResponseTypes.VERIFY -> {
            // notify that verification has failed.
        }
        ResponseTypes.INTERNET_ERR -> {
            // notify that the request could not be processed because of poor/no internet connection
        }
        ResponseTypes.ONETAP -> {
            // final response with token
            val token = response.response?.optJSONObject("data")?.optString("token")
            if (!token.isNullOrBlank()) {
                // Process token and proceed.
            }
        }
        ResponseTypes.OTP_AUTO_READ -> {
            val otp = response.response?.optString("otp")
            if (!otp.isNullOrBlank()) {
                // Autofill the OTP in your TextField/EditText
            }
        }
        ResponseTypes.FALLBACK_TRIGGERED -> {
            // In case of Smart Auth when channel fallback triggered
        }
    }
}

Override onNewIntent()

override fun onNewIntent(intent: Intent) {
    super.onNewIntent(intent)
    lifecycleScope.launch {
        OtplessSDK.onNewIntent(intent)
    }
}
ResponseTypeDescription
INITIATEWhen authentication is initiated.
VERIFYTriggered when OTP or deeplink verification fails.
ONETAPThis is the final response of an authentication session. It includes the token that should be sent to your backend for server-to-server validation.
OTP_AUTO_READWhen the OTP is automatically retrieved from SMS or WhatsApp. It includes OTP value in this responseType

Error Codes

Checkout error codes here

Step 5: Initiate Authentication

Well done! You have completed the foundational setup of the SDK. Now, let’s move to the next step and understand how to initiate and verify different authentication modes.

Choose the authentication mode you want to integrate from the options below: