Skip to content

FelixFalkovsky/BiometryCMP

Repository files navigation

Biometry Auth KMP

Version Kotlin License Platform

Biometry authentication (Touch ID, Face ID, fingerprint) for Android and iOS from shared Kotlin Multiplatform code.


Table of Contents


Features

  • Check availabilityBiometryAuthenticator.isBiometryAvailable() returns BiometryAvailability (supported type, error message).
  • AuthenticateBiometryAuthenticator.authenticate() shows the system dialog and returns BiometryResult (Success / Cancelled / Error).
  • Shared modelsBiometryResult, BiometryAvailability, BiometryType in commonMain.
  • AndroidBiometricManager + BiometricPrompt (runs on main thread).
  • iOSLocalAuthentication framework (Touch ID / Face ID).

Requirements

Gradle 8.0+
Kotlin 2.0+
Android minSdk 23+, compileSdk 34
iOS 11.0+

Installation

Repositories (root settings.gradle.kts or build.gradle.kts):

repositories {
    mavenCentral()
    google()
}

Dependency (your KMP module):

// commonMain
commonMain.dependencies {
    implementation("dev.enumset:biometry-auth:1.0.0")
}

Usage

Common code

Use from a coroutine (recommended: Dispatchers.Main on Android for UI):

val authenticator = createBiometryAuthenticator()

// Check availability
val availability = authenticator.isBiometryAvailable()
if (!availability.isAvailable) {
    // availability.errorMessage, availability.biometryType
    return
}

// Authenticate
when (val result = authenticator.authenticate(
    title = "Sign in",
    subtitle = "Confirm your identity",
    negativeButtonText = "Cancel",
    allowDeviceCredentials = true
)) {
    is BiometryResult.Success -> { /* success */ }
    is BiometryResult.Cancelled -> { /* user cancelled */ }
    is BiometryResult.Error -> { /* result.message, result.code */ }
}

Android

  1. Before using biometry, set the FragmentActivity (e.g. in onCreate):
import dev.enumset.biometry.setFragmentActivityForBiometry

// In your FragmentActivity
setFragmentActivityForBiometry(this)
  1. Call from a coroutine with Dispatchers.Main (dialog must run on main thread):
lifecycleScope.launch(Dispatchers.Main) {
    val authenticator = createBiometryAuthenticator()
    val result = authenticator.authenticate(
        title = "Sign in",
        subtitle = "Confirm your identity",
        negativeButtonText = "Cancel",
        allowDeviceCredentials = true
    )
}

iOS

Use the same common API: createBiometryAuthenticator() and authenticate(). The actual implementation uses LocalAuthentication.

Add to your app Info.plist (required for Face ID):

<key>NSFaceIDUsageDescription</key>
<string>Authenticate with Face ID or Touch ID</string>

Samples

Module Description
sample/androidApp Android app (availability check + auth).
sample/composeApp Compose Multiplatform sample (Android + iOS).
sample/iosApp Native iOS app + Xcode integration.

Run Android sample:

./gradlew :sample:androidApp:assembleDebug
./gradlew :sample:androidApp:installDebug

iOS: build the framework with ./gradlew :biometry:linkDebugFrameworkIosSimulatorArm64 and follow sample/iosApp/README.md for Xcode.


Permissions

The library does not declare permissions. Your app must add them.

Android — in your app manifest:

  • USE_BIOMETRIC (API 28+)
  • USE_FINGERPRINT (API 23–27, deprecated in 28)

See Biometric authentication | Android Developers.


Building

./gradlew :biometry:build

License

Apache-2.0

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages