For the complete documentation index, see llms.txt. This page is also available as Markdown.

Changelog

Release notes

Version 2.21.0

Release date:

  • 08/07/2026

What's new

Customize the liveness screen

You can now brand the liveness screen through the new uiCustomization option in CafLivenessConfig. Colors, the app bar title, the logo and close icons, the font and the mask blur are all configurable. Every field is optional — anything you leave out keeps the default appearance, so existing integrations are unaffected.

val uiCustomization = UiCustomization(
    font = LivenessFont.ResFont(R.font.your_font),
    appBar = AppBarCustomization(
        title = "Identity check",
        titleColor = Color.WHITE,
        color = navyColor,
        logoIcon = R.drawable.your_logo,
        closeButton = R.drawable.your_close_icon,
    ),
    mask = MaskCustomization(isBlurEnabled = true, color = navyColor),
    prompt = PromptCustomization(
        textColor = Color.WHITE,
        backgroundColor = greenColor,
        isRounded = true,
    ),
)
val config = CafLivenessConfig(
    mobileToken = mobileToken,
    personId = personId,
    uiCustomization = uiCustomization
)

CafFaceLivenessLite.instance.startLiveness(
    context = context,
    config = config,
) { event -> /* ... */ }

Colors are color values (@ColorInt), not color resources — resolve resources with ContextCompat.getColor(...) before passing them. Icons and fonts are resource ids.

Version 7.18.0

Release date:

  • 07/30/2026

What's new:

Dynamic iProov service location

The SDK now follows the iProov SP provided by the backend. Server-side change — no integration changes required.

Signed response on failure

When a liveness attempt fails (for example, eyes closed or poor lighting), the SDK now also retrieves the transaction result and returns the signedResponse in the Failure event — previously available only on success. If the result can't be retrieved, an Error event is returned instead.

Breaking changes

The LivenessLiteEvent contract changed. Update your event handling:

Before
After

Success(val response: String)

Success(val signedResponse: String)

Failure(type, description)

Failure(signedResponse, type, description)

Error(type, description)

Error(type, description, cause)

  • Success.response was renamed to Success.signedResponse.

  • Failure now includes signedResponse.

  • Error now includes cause (the originating Throwable).

  • CafLivenessConfig.stage now defaults to CafStage.PROD and no longer needs to be provided explicitly.

Links:

Face Liveness LiteHandling FailuresUi CustomizationChangelog

Last updated