Documentation Hub
Mobile SDK
Mobile SDK
  • Keyless SDK Documentation
  • Introduction
    • 🧩Components
    • ⚙️Integration Flows
    • 🤳Sample Apps
  • 📱Mobile SDK Guide
    • 1️⃣ Getting started
    • 2️⃣ Enrollment
    • 3️⃣ Authentication
    • 4️⃣ De-Enrollment
    • 5️⃣ Backup
    • 6️⃣ User and device management
  • 📱Mobile SDK Reference
    • UI Customization
    • Error handling
    • Liveness Settings
    • JWT signing
    • PIN authentication
    • Introduce Keyless to Users
    • Photo Enrollment
  • 📱Mobile SDK Use Cases
    • Account recovery
    • Dynamic Linking
  • 📒Mobile SDK Changelog
    • Changelog
  • 💽Server API
    • Getting Started
    • Users
    • Devices
    • Operations
Powered by GitBook
On this page

Was this helpful?

  1. Mobile SDK Reference

Liveness Settings

Keyless SDK provides three officially-supported configurations for the liveness detection (antispoofing component), listed below from the lowest to the highest level of security:

  • PASSIVE_STANDALONE_MEDIUM - for testing purposes only

  • PASSIVE_STANDALONE_HIGH - for most production use (SDK default)

  • PASSIVE_STANDALONE_HIGHEST - for higher security production use

Increasing the security level increases the ability of the system to reject spoof attempts (true positive rate, or TPR). A higher security level also increases the genuine reject rate (false positive rate, or FPR) and the time required by the anti-spoofing module to make a decision.

For most production scenarios, Keyless recommends the use of PASSIVE_STANDALONE_HIGH. This setting offers a good tradeoff between TPR, FPR, and time-to-decision. For scenarios that require a higher security level, we recommend increasing this setting to PASSIVE_STANDALONE_HIGHEST.

To customize the liveness detection call .withLivenessSettings(livenessConfiguration) when initializing any configuration.

// Authentication Configuration
val authenticationConfiguration = AuthenticationConfiguration.builder
        .withLivenessSettings(livenessConfiguration: livenessConfiguration)
//...
        .build()

// Enrollment Configuration
val enrollmentConfiguration = EnrollmentConfiguration.builder
        .withLivenessSettings(livenessConfiguration: livenessConfiguration)
//...
        .build()

// De-Enrollment Configuration
val deEnrollmentConfiguration = DeEnrollmentConfiguration.builder
        .withLivenessSettings(livenessConfiguration: livenessConfiguration)
//...
        .build()
// Authentication Configuration
let authenticationConfiguration = Keyless.AuthenticationConfiguration.builder
        .withLivenessSettings(livenessConfiguration: livenessConfiguration)
//...
        .build()

// Enrollment Configuration
let enrollmentConfiguration = Keyless.EnrollmentConfiguration.builder
        .withLivenessSettings(livenessConfiguration: livenessConfiguration)
//...
        .build()

// De-Enrollment Configuration
let deEnrollmentConfiguration = Keyless.DeEnrollmentConfiguration.builder
        .withLivenessSettings(livenessConfiguration: livenessConfiguration)
//...
        .build()
// Authentication Configuration
final authenticationConfiguration = BiomAuthConfig(
    livenessConfiguration: livenessConfiguration,
    livenessTimeout: livenessTimeout,
    //...
);

// Enrollment Configuration
final enrollmentConfiguration = BiomEnrollConfig(
    livenessConfiguration: livenessConfiguration,
    livenessTimeout: livenessTimeout,
    //...
);

// De-Enrollment Configuration
final deEnrollmentConfiguration = BiomDeEnrollConfig(
    livenessConfiguration: livenessConfiguration,
    livenessTimeout: livenessTimeout,
    //...
);

The liveness timeout customization has been deprecated in both Android and iOS SDKs. If you’re still using it, please note that it’s no longer effective.

Last updated 1 month ago

Was this helpful?

📱