## Android Kotlin advanced setup In this guide, you'll find an overview and best practices for enabling advanced features and using built in functions for biometric authentication (passkeys) and step-up. ## Passkeys authentication Passkeys enable seamless, passwordless login with biometric authentication and WebAuthn. Follow these steps to integrate them manually using Frontegg's APIs. **Prerequisites** ```kotlin dependencies { implementation("androidx.browser:browser:1.8.0") } ``` br **Register Passkey:** ```kotlin FronteggAuth.instance.registerPasskeys(activity!!) { error -> if (error != null) { Log.e("FronteggAuth", "Failed to register passkey: $error") } else { Log.i("FronteggAuth", "Passkey registered successfully") } } ``` br **Login with passkey:** ```kotlin FronteggAuth.instance.loginWithPasskeys(activity!!) { error -> if (error != null) { Log.e("FronteggAuth", "Failed to login with passkey: $error") } else { Log.i("FronteggAuth", "Logged in successfully with passkey") } } ``` ## Step-up authentication Step-up authentication is a security feature that temporarily elevates a user's authentication level to perform sensitive actions, such as accessing personal data, making transactions, or changing security settings. This guide describes how to use the `isSteppedUp` and `stepUp` methods in your Android application to ensure that your app handles sensitive actions securely by checking authentication status and prompting for re-verification only when necessary. Please follow [this guide](https://developers.frontegg.com/guides/step-up/intro) for more details. ### `stepUp` - Triggers the step-up authentication process. Typically involves MFA or other user verification. br ``` FronteggAuth.instance.stepUp( activity = this, maxAge = Duration.ofMinutes(5) ) { error -> if (error != null) { // Handle authentication failure Log.e("StepUp", "Authentication failed", error) } else { // Authentication succeeded, continue with sensitive action performSecureOperation() } } ``` br `activity`: The current Android Activity instance. `callback`: A callback that receives an Exception if something goes wrong. `maxAge` (optional): Same as in isSteppedUp, defines how long the step-up remains valid. ### `isSteppedUp` - This method whether the user has already completed a step-up authentication and is allowed to proceed. ``` val isSteppedUp = FronteggAuth.instance.isSteppedUp(maxAge = Duration.ofMinutes(5)) if (isSteppedUp) { // Proceed with sensitive operation } else { // Trigger step-up } ``` br **Example**: ``` fun onSecureActionClicked() { if (FronteggAuth.instance.isSteppedUp(maxAge = Duration.ofMinutes(5))) { performSecureOperation() } else { FronteggAuth.instance.stepUp(this, Duration.ofMinutes(5)) { error -> if (error == null) { performSecureOperation() } else { Toast.makeText(this, "Step-up failed: ${error.message}", Toast.LENGTH_LONG).show() } } } } fun performSecureOperation() { // Execute the action that requires elevated authentication } ```