KYCIS SDK Docs
Android

Native Setup

Initialize SDK and configure Android application

Application Class Setup

Initialize SDK once in your Application class:

import android.app.Application
import com.kycis.sdk.AI
import com.kycis.sdk.core.ConfirmUiText
import com.kycis.sdk.core.KycStepStrategy
import com.kycis.sdk.core.RuntimePolicy
import com.kycis.sdk.core.TriggerSettings
import com.kycis.sdk.core.TriggerStartMode

class DemoApp : Application() {
  override fun onCreate() {
    super.onCreate()

    AI.setStatusListener { status ->
      // optional logging/analytics
    }

    // Optional: register screen schemas BEFORE init so they are pushed at startup
    // AI.registerScreenSchemas(listOf(ScreenSchema(screenId = "pan_entry", ...)))

    AI.init(
      application = this,
      apiKey = "your-api-key",
      userId = "runtime-user-id",
      policy = RuntimePolicy(
        // Omit backendBaseUrl to use BuildConfig.KYCIS_BACKEND_URL
        // or override explicitly, e.g. "http://10.0.2.2:8000/v1" for emulator
        clientId = "your_tenant_id",
        mappingVersion = "v1",
        appVersion = "1.0.0",
        triggerStartMode = TriggerStartMode.CONFIRM_UI,
        kycStepStrategy = KycStepStrategy.HINT_THEN_INFER,
        triggerSettings = TriggerSettings(
          autoTriggerEnabled = true,
          includeErrorSignals = true,
          includeTimeSpentSignals = false,
          includeIdleSignals = false,
          includeStepHints = true
        ),
        confirmUiText = ConfirmUiText(
          title = "Need help completing this step?",
          startCta = "Start",
          dismissCta = "Not now"
        ),
        passiveEvalEnabled = true,
        passiveEvalIntervalSeconds = 10
      )
    )

    // Recommended: enables lifecycle/screen auto-observation
    AI.attach(this)
  }
}

Manifest Declaration

<application
    android:name=".DemoApp"
    android:label="@string/app_name"
    ... />

Required Permissions

In AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />

Runtime permission handling for RECORD_AUDIO is handled by SDK if you use AI.attach() with FragmentActivity.

SDK Module Integration

Option 1: Local Module

// settings.gradle.kts
include(":kycis-sdk")
project(":kycis-sdk").projectDir = file("../KYCIS/android-sdk/sdk")

// app/build.gradle.kts
dependencies {
    implementation(project(":kycis-sdk"))
}

Option 2: Composite Build (KYCISDemo-style)

// settings.gradle.kts
includeBuild("../KYCIS/android-sdk") {
    dependencySubstitution {
        substitute(module("com.kycis:kycis-sdk")).using(project(":sdk"))
    }
}

// app/build.gradle.kts
dependencies {
    implementation("com.kycis:kycis-sdk:1.0.0") // resolved to :sdk
}

Lifecycle and Passive Signals

When AI.attach is used:

  • onActivityResumed: binds current activity, observes screen name, records user interaction
  • PassiveTracker derives time on current screen and idle seconds from last interaction

If attach is never called, trackError emits SdkStatusCode.REDUCED_TRACKING_MODE once.

Permission Forwarding

If your activity needs custom permission handling:

override fun onRequestPermissionsResult(
  requestCode: Int,
  permissions: Array<out String>,
  grantResults: IntArray
) {
  if (AI.onRequestPermissionsResult(requestCode, permissions, grantResults)) return
  super.onRequestPermissionsResult(requestCode, permissions, grantResults)
}

Backend Client Abstraction

  • HttpBackendClient: production implementation
  • NoOpBackendClient: no network; trigger always false; useful for tests

All paths are relative to backendBaseUrl (must include /v1).

On this page