Quickstarts / Mobile App / Android

Android (Kotlin) Quickstart

Add X-Auth to a Kotlin Android app via Gradle. Call advice() from a coroutine inside any click listener.

Coordinate: com.xentranet:x-auth-android Android API 24+ ยท Kotlin 1.9+ Time: ~6 min
1

Add the Gradle dependency

Pull the SDK from Maven Central.

app/build.gradle.kts
dependencies {
    implementation("com.xentranet:x-auth-android:1.0.0")
}
2

Construct an XAuth instance

Build the SDK once in your Application subclass and expose it via Hilt or a singleton.

App.kt
package com.example.transfer

import android.app.Application
import com.xentranet.xauth.XAuth

class App : Application() {
    lateinit var xauth: XAuth
        private set

    override fun onCreate() {
        super.onCreate()
        xauth = XAuth(tenantId = BuildConfig.XAUTH_TENANT_ID)
    }
}
3

Call advice() from a coroutine

Launch in lifecycleScope from any click listener. Ship the bearer over your usual HTTP client.

TransferActivity.kt
package com.example.transfer

import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import com.xentranet.xauth.Decision
import kotlinx.coroutines.launch

class TransferActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_transfer)

        val xauth = (application as App).xauth

        transferButton.setOnClickListener {
            lifecycleScope.launch {
                val advice = xauth.advice(
                    action = "transfer", amount = 2999, currency = "USD"
                )
                if (advice.decision != Decision.ALLOW) return@launch

                httpClient.post("https://api.example.com/transfer") {
                    header("Authorization", "Bearer ${advice.accessToken}")
                    setBody("""{"amount":2999}""")
                }
            }
        }
    }
}
4

Verify on your backend

Any backend SDK with verify() works.

api/transfer.ts (Node example)
const { transaction_ctx } = await xauth.verify(bearer, {
  expect: { action: 'transfer', amount: req.body.amount },
});

Pair with a backend quickstart: Express, Go, Spring Boot, ASP.NET.

Next steps

Wire biometric step-up via the device's BiometricPrompt and tune your risk policy.