Add X-Auth to a Kotlin Android app via Gradle. Call advice() from a coroutine inside any click listener.
Pull the SDK from Maven Central.
dependencies {
implementation("com.xentranet:x-auth-android:1.0.0")
}Build the SDK once in your Application subclass and expose it via Hilt or a singleton.
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)
}
}advice() from a coroutineLaunch in lifecycleScope from any click listener. Ship the bearer over your usual HTTP client.
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}""")
}
}
}
}
}Any backend SDK with verify() works.
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.
Wire biometric step-up via the device's BiometricPrompt and tune your risk policy.