Mobile SDK overview
Embed SenseCrypt face authentication directly in your own iOS or Android app — device-bound keys, on-device face matching and liveness, and the five authentication flows.
The SenseCrypt Authenticator SDK embeds face authentication into your iOS or Android application. Your app gets a device-bound key in secure hardware, on-device face matching and liveness, and the same authentication flows the SenseCrypt Authenticator app uses — because that app is itself built on this SDK.
The SDK is not publicly published. It is distributed on request, as versioned binary artifacts (an Android .aar and an iOS Swift package). If your integration needs it, contact SenseCrypt to be provisioned with SDK access and a development license. Most integrations do not need it — if you only want SenseCrypt sign-in for a web or mobile app, integrate over standard OIDC/SAML and let users approve with the Authenticator app. See Relying party.
When to use the SDK
Use the SDK when you need the face ceremony to happen inside your own app, rather than handing the user off to the Authenticator app. Typical reasons:
- Your app is the authenticator for your product, and a second app is unacceptable UX.
- You are building a kiosk, field-service, or single-purpose device app where installing a separate authenticator isn't possible.
- You need to own the enrollment and sign-in screens end to end for branding or compliance reasons.
If none of those apply, integrate over OIDC/SAML instead — it is dramatically less work and carries no license, no native binaries, and no biometric surface in your app.
What the SDK gives you
- Device-bound keys. Key material is generated in the platform's secure hardware (Secure Enclave on iOS, Android Keystore on Android) and never leaves it. Every SDK call to SenseCrypt is signed with that key.
- On-device face matching and liveness. Detection, matching, and liveness run locally against models bundled in the SDK. No image and no biometric template leaves the device — SenseCrypt remains biometric-blind.
- Five typed flows. Registration, login, key rotation, revocation, and face capture, each a state machine you observe rather than orchestrate.
- Optional drop-in UI. Ready-made QR-scan and face-capture surfaces (SwiftUI views, Compose composables) with camera handling, permission gating, and retry chrome already built. You can also drive the flows with your own UI.
Architecture
The SDK is a Rust core exposed to each platform through UniFFI bindings, with a hand-written idiomatic facade on top:
Your app → Swift / Kotlin facade → UniFFI bindings → Rust core
├── flow state machines
├── portal HTTP client (signed)
└── ML: detection, matching, liveness
platform callbacks ────────────────────────────┘
(Secure Enclave / Keystore, biometric prompt, secure storage, attestation)Two consequences worth knowing up front:
The flows live in Rust, not in your app. You submit inputs (a QR payload, a PIN, a face capture) and observe emitted states. Retry budgets, signed aborts, network retries, and key ceremonies are all handled inside the core. This is deliberate — the security-critical sequencing is not something each host app should re-implement.
Platform-native concerns are injected callbacks. Key wrapping, secure storage, the biometric gate, and device attestation are implemented per platform and wired in by open(). You don't implement these; the SDK does it for you.
Platform support
| iOS | Android | |
|---|---|---|
| Minimum version | iOS 15 | API 24 (Android 7.0) |
| Artifact | Swift package + static XCFramework | .aar |
| Architectures | arm64 (device), arm64 + x86_64 (simulator) | arm64-v8a, armeabi-v7a |
| UI toolkit for bundled surfaces | SwiftUI (UIKit wrappers provided) | Jetpack Compose |
| Flow observation | AsyncStream | SharedFlow / StateFlow |
Android has no x86/x86_64 slices. The AAR ships arm64-v8a and armeabi-v7a only. It will not run on an x86_64 emulator — use an ARM system image (which is the default on Apple Silicon) or a physical device.
The five flows
Each flow is started from the SenseCryptAuthenticator handle, emits a typed state enum, and terminates in success, cancellation, or failure.
| Flow | Purpose | Page |
|---|---|---|
| Registration | Enroll a user and mint a device key — via emailed PIN, or full self-signup | Registration |
| Login | Approve a sign-in: scan QR, match face, post result | Login |
| Key rotation | Make-before-break rotation of every key on the device | Key management |
| Revocation | Remove one device key | Key management |
| Face capture | Shared capture sub-flow, vended by login and registration | UI components |
Getting started
Install
Add the artifact, place the license, declare permissions and dependencies.
Initialize
open() the SDK and load the inference engine.
Login flow
The most common integration — approve a sign-in.
Error reference
Every error case and what to do about it.
Related
- Authenticator app — the end-user app, if you don't need to embed.
- Relying party — integrating over OIDC/SAML with no SDK.
- How SenseCrypt works — the end-to-end model.
- Security — biometric blindness and key custody.
Mobile (Authenticator)
The SenseCrypt Authenticator app for iOS and Android — the end-user app that approves sign-ins with a face scan. Most integrations use it as-is rather than embedding anything.
Install
Add the SenseCrypt Authenticator SDK to an iOS or Android project — artifact placement, the development license, required dependencies, and camera permissions.