Face ID, Touch ID & Passkeys: UX Patterns That Users Actually Trust
By 2025, nearly every flagship phone ships with a secure enclave and a biometric sensor. Apple reports 99 % of iPhone X-series users opt in to Face ID , while Google says over 90 % of Android 12 devices support the BiometricPrompt API . Yet crashes aren't the only way to lose users—clunky authentication flows are abandonment engines, too. Below we'll show how THE USEFUL APPS implements Face ID, Touch ID, and the new Passkey standard to create friction-free, secure log-ins in our client apps.
Take-away: Blend biometric auth with Passkeys and users log in 45 % faster, churn less, and rate you higher in the stores.
Table of Contents
- Why Biometrics Beat Passwords in 2025
- Understanding the Three APIs
- Five UX Principles Users Trust
- Designing the Perfect Flow (iOS & Android)
- Passkeys on Web + Hybrid
- Edge Cases & Accessibility
- Security and Compliance Checklist
- Real-World Results From Our Clients
- Next Steps & Further Reading
1. Why Biometrics Beat Passwords in 2025
- Speed: Average biometric unlock: 0.5 s. Average strong password entry: 6–12 s.
- Security: Biometric templates stay in the secure enclave; no credential database to breach.
- Delight: Smooth onboarding boosts first-day retention (Skip saw +7 % when we added Face ID).
But users only trust biometrics when:
- The system prompt is recognisable.
- Fallback flows are obvious.
- Error states don't blame them ("Face ID unavailable" not "You failed").
2. Understanding the Three APIs
API / Standard | Where It Runs | Key Call | UX Surface |
---|---|---|---|
Face ID / Touch ID | iOS | LAContext.evaluatePolicy |
Native sheet |
BiometricPrompt | Android | BiometricPrompt.authenticate |
System bottom sheet |
Passkeys (WebAuthn) | iOS 17, Android 14, Chrome, Safari | navigator.credentials.get({ publicKey }) |
OS credential picker |
Apple and Google now treat Passkeys as the preferred replacement for passwords: a public-key credential synced via iCloud Keychain or Google Password Manager . Under the hood, the OS still uses Face ID or the fingerprint sensor, but the site/app receives only a public key.
3. Five UX Principles Users Trust
- System First Always trigger the OS sheet—not a custom modal. Familiar visuals = instant trust.
- Single Decision One primary action: "Continue with Face ID." Hide alternative login under "Other options."
- Instant Feedback Success → auto-advance; Failure → shake animation + haptic + fallback button.
- Graceful Degradation Sensor blocked? Offer PIN; Face ID off? Offer Touch ID if available.
- Progressive Disclosure Explain Passkeys after success: "Great—your Passkey is now stored."
4. Designing the Perfect Flow (iOS & Android)
Quick diagram
Splash → Onboarding screen → "Enable biometric login" (optional step)
↘ Skip ↘ Enable → OS prompt → Success → Generate Passkey (if supported)
Implementation details
Step | iOS (Swift) | Android (Kotlin) |
---|---|---|
1. Check availability | LAContext().canEvaluatePolicy |
PackageManager.FEATURE_FINGERPRINT ... |
2. Present sheet | evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics) |
BiometricPrompt(promptInfo) |
3. On success | store kSecUseAuthenticationUIFail Passkey credential |
store Cipher key and call backend |
4. On error | LAError mapping to UI strings |
BiometricPrompt.ERROR_LOCKOUT etc. |
For Flutter we prefer the local_auth plugin plus WebAuthn via flutter_web_auth_2
.
5. Passkeys on Web + Hybrid
Passkeys shine in React Native WebViews—one tap and the OS picker appears. Code snippet:
const cred = await navigator.credentials.get({
publicKey: {
challenge: buf,
allowCredentials: [{ id, type: "public-key" }],
timeout: 60000,
},
});
Store the credential ID in Supabase / Firebase and your user is password-less. Combine with Face ID for device unlock and you have biometric + public-key auth—no database of secrets to leak.
6. Edge Cases & Accessibility
Scenario | UX Treatment |
---|---|
Face mask / gloves | Surface Touch ID option first |
Front camera taped | Detect biometryType == none ; auto-fallback |
Vision impairment | Enable VoiceOver labels: "Double-tap to use Face ID." |
Multiple Passkeys | Show account picker; highlight last used label from iOS keychain |
Remember WCAG 2.2: don't force biometrics—always provide an alternative method within the same flow.
7. Security and Compliance Checklist
- Keychain / Keystore only—no custom storage.
- DeviceCheck / SafetyNet attestation for high-risk transactions.
- App Transport Security (iOS) and Network Security Config (Android).
- GDPR / OAIC: explain biometric usage in the Privacy Policy.
- Pen-test at least annually; we partner with Cybit for external audits.
8. Real-World Results From Our Clients
App | Change | Impact |
---|---|---|
Skip (coffee preorder) | Added Face ID log-in | 7 % higher 7-day retention |
RouteMate | Switched to Passkeys | 22 % drop in password-reset tickets |
PCSO eLotto | Touch ID fallback for masked users | 18 % fewer abandoned sessions |
These wins pair nicely with the 99 % crash-free workflow discussed in Keeping Crash-Free Sessions Above 99 %.
9. Next Steps & Further Reading
-
Internal:
- Explore our Maintenance Plans that include biometric integration.
- Read App Store Compliance Made Simple (coming soon).
-
External:
- Apple Developer: Implementing Face ID & Touch ID ◆
- Google Developers: BiometricPrompt Guide ◆
- FIDO Alliance: Passkeys Implementation Whitepaper
Need help rolling out Passkeys or biometric login? Contact us and our team will map out the integration and make sure your next release is every bit as secure as it is seamless.