---
description: Practical guide to the Capacitor Biometrics plugin: Face ID, Touch ID, fingerprint, and passcode auth in Ionic and Capacitor apps.
title: Exploring the Capacitor Biometrics API - Capawesome
image: https://capawesome.io/docs/assets/images/social/blog/exploring-the-capacitor-biometrics-api.png
---

<!doctype html> 

[Skip to content ](#exploring-the-capacitor-biometrics-api) 

[🖥️ Introducing the **Capacitor Electron Platform** — build desktop apps for macOS, Windows, and Linux. Free & open source. ](/blog/announcing-the-capacitor-electron-platform/) 

* [ SDKs ](/docs/sdks/)
* [ Formbricks ](/docs/sdks/capacitor/formbricks/)
* [ Geocoder ](/docs/sdks/capacitor/geocoder/)
* [ Google Sign-In ](/docs/sdks/capacitor/google-sign-in/)
* [ Grafana Faro ](/docs/sdks/capacitor/grafana-faro/)
* [ Gyroscope ](/docs/sdks/capacitor/gyroscope/)
* [ Haptics ](/docs/sdks/capacitor/haptics/)
* [ Home Indicator ](/docs/sdks/capacitor/home-indicator/)
* [ In-App Browser ](/docs/sdks/capacitor/in-app-browser/)
* [ Install Referrer ](/docs/sdks/capacitor/install-referrer/)
* [ Intercom ](/docs/sdks/capacitor/intercom/)
* [ Intune ](/docs/sdks/capacitor/intune/)
* [ Keep Awake ](/docs/sdks/capacitor/keep-awake/)
* [ libSQL ](/docs/sdks/capacitor/libsql/)
* [ Light Sensor ](/docs/sdks/capacitor/light-sensor/)
* [ Live Update ](/docs/sdks/capacitor/live-update/)
* [ Localization ](/docs/sdks/capacitor/localization/)
* [ Mail Composer ](/docs/sdks/capacitor/mail-composer/)
* [ Managed Configurations ](/docs/sdks/capacitor/managed-configurations/)
* [ Maps Launcher ](/docs/sdks/capacitor/maps-launcher/)
* [ Media Session ](/docs/sdks/capacitor/media-session/)
* [ ML Kit ](/docs/sdks/capacitor/mlkit/)
* [ Navigation Bar ](/docs/sdks/capacitor/navigation-bar/)
* [ Network ](/docs/sdks/capacitor/network/)
* [ NFC ](/docs/sdks/capacitor/nfc/)
* [ Node.js ](/docs/sdks/capacitor/nodejs/)
* [ OAuth ](/docs/sdks/capacitor/oauth/)
* [ Passkeys ](/docs/sdks/capacitor/passkeys/)
* [ Password Autofill ](/docs/sdks/capacitor/password-autofill/)
* [ PDF Generator ](/docs/sdks/capacitor/pdf-generator/)
* [ PDF Viewer ](/docs/sdks/capacitor/pdf-viewer/)
* [ Pedometer ](/docs/sdks/capacitor/pedometer/)
* [ Permissions ](/docs/sdks/capacitor/permissions/)
* [ Phone Dialer ](/docs/sdks/capacitor/phone-dialer/)
* [ Photo Editor ](/docs/sdks/capacitor/photo-editor/)
* [ Photo Manipulator ](/docs/sdks/capacitor/photo-manipulator/)
* [ PixLive ](/docs/sdks/capacitor/pixlive/)
* [ PostHog ](/docs/sdks/capacitor/posthog/)
* [ Printer ](/docs/sdks/capacitor/printer/)
* [ Privacy Screen ](/docs/sdks/capacitor/privacy-screen/)
* [ Proximity Sensor ](/docs/sdks/capacitor/proximity-sensor/)
* [ Purchases ](/docs/sdks/capacitor/purchases/)
* [ RealtimeKit ](/docs/sdks/capacitor/realtimekit/)
* [ Root Detection ](/docs/sdks/capacitor/root-detection/)
* [ Screen Brightness ](/docs/sdks/capacitor/screen-brightness/)
* [ Screen Orientation ](/docs/sdks/capacitor/screen-orientation/)
* [ Screen Reader ](/docs/sdks/capacitor/screen-reader/)
* [ Screenshot ](/docs/sdks/capacitor/screenshot/)
* [ Secure Preferences ](/docs/sdks/capacitor/secure-preferences/)
* [ Settings Launcher ](/docs/sdks/capacitor/settings-launcher/)
* [ Shake ](/docs/sdks/capacitor/shake/)
* [ Silent Mode ](/docs/sdks/capacitor/silent-mode/)
* [ SIM ](/docs/sdks/capacitor/sim/)
* [ SMS Composer ](/docs/sdks/capacitor/sms-composer/)
* [ Speech Recognition ](/docs/sdks/capacitor/speech-recognition/)
* [ Speech Synthesis ](/docs/sdks/capacitor/speech-synthesis/)
* [ Share Target ](/docs/sdks/capacitor/share-target/)
* [ Square Mobile Payments ](/docs/sdks/capacitor/square-mobile-payments/)
* [ SQLite ](/docs/sdks/capacitor/sqlite/)
* [ Superwall ](/docs/sdks/capacitor/superwall/)
* [ System WebView ](/docs/sdks/capacitor/system-webview/)
* [ Tauri ](/docs/sdks/capacitor/tauri/)
* [ Text Interaction ](/docs/sdks/capacitor/text-interaction/)
* [ Text Zoom ](/docs/sdks/capacitor/text-zoom/)
* [ Thermal State ](/docs/sdks/capacitor/thermal-state/)
* [ Toast ](/docs/sdks/capacitor/toast/)
* [ Torch ](/docs/sdks/capacitor/torch/)
* [ Vault ](/docs/sdks/capacitor/vault/)
* [ Volume ](/docs/sdks/capacitor/volume/)
* [ Wallet ](/docs/sdks/capacitor/wallet/)
* [ Wifi ](/docs/sdks/capacitor/wifi/)
* [ YouTube Player ](/docs/sdks/capacitor/youtube-player/)
* [ Zip ](/docs/sdks/capacitor/zip/)
* [ Cordova ](/docs/sdks/cordova/)
* [ Cloud ](/docs/cloud/)
* [ Integrations ](/docs/cloud/live-updates/integrations/)
* Concepts
* Reference
* [ Troubleshooting ](/docs/cloud/live-updates/troubleshooting/)
* [ FAQ ](/docs/cloud/live-updates/faq/)
* [ Native Builds ](/docs/cloud/native-builds/)
* [ Set Up Environments ](/docs/cloud/native-builds/environments/)
* [ Overwrite Native Configurations ](/docs/cloud/native-builds/native-configurations/)
* [ Auto-Increment Build Numbers ](/docs/cloud/native-builds/auto-incrementing-build-numbers/)
* [ Configure the Web Build Script ](/docs/cloud/native-builds/web-build-script/)
* [ Build from a Monorepo ](/docs/cloud/native-builds/monorepo/)
* [ Use pnpm, Yarn, or bun ](/docs/cloud/native-builds/package-managers/)
* [ Install Private npm Packages ](/docs/cloud/native-builds/npm-private-registry/)
* [ Override the Java Version ](/docs/cloud/native-builds/override-java-version/)
* [ Custom iOS Provisioning Profiles ](/docs/cloud/native-builds/custom-ios-provisioning-profiles/)
* [ Build without Git ](/docs/cloud/native-builds/build-without-git/)
* [ Access Git Behind a Firewall ](/docs/cloud/native-builds/firewall-access/)
* [ Integrations ](/docs/cloud/native-builds/integrations/)
* Reference
* [ Troubleshooting ](/docs/cloud/native-builds/troubleshooting/)
* [ FAQ ](/docs/cloud/native-builds/faq/)
* [ App Store Publishing ](/docs/cloud/app-store-publishing/)
* [ Submit a Build ](/docs/cloud/app-store-publishing/submit-a-build/)
* [ Submit Automatically After a Build ](/docs/cloud/app-store-publishing/submit-automatically/)
* [ Troubleshooting ](/docs/cloud/app-store-publishing/troubleshooting/)
* [ FAQ ](/docs/cloud/app-store-publishing/faq/)
* [ Automations ](/docs/cloud/automations/)
* [ Reference ](/docs/cloud/automations/reference/)
* [ Troubleshooting ](/docs/cloud/automations/troubleshooting/)
* [ FAQ ](/docs/cloud/automations/faq/)
* [ Assist ](/docs/cloud/assist/)
* [ CLI ](/docs/cloud/cli/)
* APIs and SDKs
* [ Webhooks ](/docs/cloud/webhooks/)
* [ Integrations ](/docs/cloud/integrations/)
* Account
* [ Organization ](/docs/cloud/organizations/)
* [ Two-Factor Enforcement ](/docs/cloud/organizations/two-factor-authentication/)
* [ Audit Logs ](/docs/cloud/organizations/audit-logs/)
* [ Billing ](/docs/cloud/organizations/billing/)
* [ License Keys ](/docs/cloud/license-keys/)
* [ AI ](/docs/ai/)
* [ Insiders ](/docs/insiders/)
* [ Billing & Plans ](/docs/insiders/billing-and-plans/)
* [ FAQ ](/docs/insiders/faq/)
* [ License ](https://capawesome.io/legal/eula/)
* [ Support ](/docs/support/)
* [ Contributing ](/docs/contributing/)
* Contributing code
* [ Code of Conduct ](/docs/contributing/code-of-conduct/)
* [ Questions ](https://docs.github.com/en/discussions/collaborating-with-your-community-using-discussions/participating-in-a-discussion#creating-a-discussion)
* [ Blog ](/blog/)
* Categories

* [ Best Practices ](#best-practices)
* [ FAQ ](#faq)
* [ Conclusion ](#conclusion)

* Related links

# Exploring the Capacitor Biometrics API[¶](#exploring-the-capacitor-biometrics-api "Permanent link")

Modern mobile applications increasingly rely on biometric authentication to provide secure and convenient user experiences. With the [Capacitor Biometrics plugin](/docs/sdks/capacitor/biometrics/) from Capawesome, developers can integrate powerful biometric authentication capabilities into their Ionic and Capacitor applications, enabling fingerprint, face, and iris recognition across Android, iOS, and Web platforms through a unified API that simplifies the complexity of platform-specific biometric implementations.

This guide covers the **Capacitor Biometrics** API with practical examples and best practices. For the full **Capacitor Biometrics plugin documentation**, see the [API Reference](/docs/sdks/capacitor/biometrics/#api).

## Bonus: Video Tutorial and Demo App[¶](#bonus-video-tutorial-and-demo-app "Permanent link")

We created a **step-by-step video tutorial** that walks through installing the plugin, configuring iOS Face ID permissions, organizing your biometrics logic in a small helper module, triggering authentication from the app UI, and handling success and error states.

* **[Capacitor Biometrics Demo App](https://github.com/capawesome-team/capacitor-biometrics-demo)** — A minimal, framework-agnostic demo (vanilla JavaScript and Capacitor) with a complete biometric authentication flow using Face ID or fingerprint.

The tutorial assumes you already have a Capacitor app; it focuses only on the Biometrics integration. For the full API, see the [plugin documentation](/docs/sdks/capacitor/biometrics/).

## Installation[¶](#installation "Permanent link")

To install the Capacitor Biometrics plugin, please refer to the [Installation](/docs/sdks/capacitor/biometrics/#installation) section in the plugin documentation.

## Usage[¶](#usage "Permanent link")

Let's explore the key features of the Capacitor Biometrics API and how to implement them in your Ionic applications.

### Checking Availability[¶](#checking-availability "Permanent link")

Before implementing biometric authentication, it's crucial to verify if biometric features are available on the device. The Capacitor Biometrics API provides the [isAvailable(...)](/docs/sdks/capacitor/biometrics/#isavailable) method for this purpose:

`[](#%5F%5Fcodelineno-0-1)import { Biometrics } from '@capawesome-team/capacitor-biometrics';
[](#%5F%5Fcodelineno-0-2)
[](#%5F%5Fcodelineno-0-3)const isAvailable = async () => {
[](#%5F%5Fcodelineno-0-4)  const result = await Biometrics.isAvailable();
[](#%5F%5Fcodelineno-0-5)
[](#%5F%5Fcodelineno-0-6)  if (!result.isAvailable) {
[](#%5F%5Fcodelineno-0-7)    alert('Biometric authentication is not available on this device.');
[](#%5F%5Fcodelineno-0-8)    return;
[](#%5F%5Fcodelineno-0-9)  }
[](#%5F%5Fcodelineno-0-10)};
`

Make sure to call this method once before attempting any biometric operations. If no biometric features are available, you can gracefully handle the situation by informing the user or providing alternative authentication methods.

### Checking Enrollment[¶](#checking-enrollment "Permanent link")

Biometric authentication should not only but supported by the device, but also configured by the user. The [isEnrolled(...)](/docs/sdks/capacitor/biometrics/#isenrolled) method allows you to check if the user has enrolled biometric data on their device:

`[](#%5F%5Fcodelineno-1-1)const isEnrolled = async () => {
[](#%5F%5Fcodelineno-1-2)  const result = await Biometrics.isEnrolled();
[](#%5F%5Fcodelineno-1-3)
[](#%5F%5Fcodelineno-1-4)  if (!result.isEnrolled) {
[](#%5F%5Fcodelineno-1-5)    alert('Please enroll biometric data in your device settings to use this feature.');
[](#%5F%5Fcodelineno-1-6)  }
[](#%5F%5Fcodelineno-1-7)};
`

If the user has not enrolled any biometric data, you can prompt them to do so through their device settings. On Android, you can even use the [enroll(...)](/docs/sdks/capacitor/biometrics/#enroll) method to guide users through the enrollment process directly from your app:

`[](#%5F%5Fcodelineno-2-1)import { Biometrics } from '@capawesome-team/capacitor-biometrics';
[](#%5F%5Fcodelineno-2-2)
[](#%5F%5Fcodelineno-2-3)const enroll = async () => {
[](#%5F%5Fcodelineno-2-4)  await Biometrics.enroll();
[](#%5F%5Fcodelineno-2-5)};
`

This will open the device's biometric enrollment screen, allowing users to add their biometric data without leaving your application.

### Authenticating with Biometrics[¶](#authenticating-with-biometrics "Permanent link")

The core functionality of the plugin is provided through the [authenticate(...)](/docs/sdks/capacitor/biometrics/#authenticate) method, which triggers the biometric authentication process:

`[](#%5F%5Fcodelineno-3-1)import { Biometrics, ErrorCode } from '@capawesome-team/capacitor-biometrics';
[](#%5F%5Fcodelineno-3-2)
[](#%5F%5Fcodelineno-3-3)const authenticate = async () => {
[](#%5F%5Fcodelineno-3-4)  // If the user successfully authenticates, the promise resolves.
[](#%5F%5Fcodelineno-3-5)  // If the user cancels the authentication or if an error occurs, the promise rejects.
[](#%5F%5Fcodelineno-3-6)  try {
[](#%5F%5Fcodelineno-3-7)    await Biometrics.authenticate({
[](#%5F%5Fcodelineno-3-8)      title: 'Authentication Required',
[](#%5F%5Fcodelineno-3-9)      subtitle: 'Please authenticate to continue',
[](#%5F%5Fcodelineno-3-10)      cancelButtonText: 'Cancel',
[](#%5F%5Fcodelineno-3-11)      iosFallbackButtonText: 'Use Passcode',
[](#%5F%5Fcodelineno-3-12)    });
[](#%5F%5Fcodelineno-3-13)  } catch (error) {
[](#%5F%5Fcodelineno-3-14)    if (error.code === ErrorCode.USER_CANCELED) {
[](#%5F%5Fcodelineno-3-15)      console.log('User canceled the authentication.');
[](#%5F%5Fcodelineno-3-16)    } else if (error.code === ErrorCode.NOT_ENROLLED) {
[](#%5F%5Fcodelineno-3-17)      console.log('No biometric authentication enrolled.');
[](#%5F%5Fcodelineno-3-18)    } else if (error.code === ErrorCode.NOT_AVAILABLE) {
[](#%5F%5Fcodelineno-3-19)      console.log('Biometric authentication not available.');
[](#%5F%5Fcodelineno-3-20)    } else {
[](#%5F%5Fcodelineno-3-21)      console.log('Another error occurred:', error);
[](#%5F%5Fcodelineno-3-22)    }
[](#%5F%5Fcodelineno-3-23)  }
[](#%5F%5Fcodelineno-3-24)};
`

The `authenticate(...)` method accepts various configuration options to customize the authentication prompt, including titles, descriptions, and fallback options. 

Make sure to handle the promise rejection properly to manage different error scenarios, such as user cancellation, biometric not enrolled, or biometric not available.

### Authenticating with Device Credentials[¶](#authenticating-with-device-credentials "Permanent link")

In addition to biometric authentication, the Capacitor Biometrics API supports device credentials (PIN, pattern, or password) as a fallback option. You can enable this feature by setting the `allowDeviceCredential` option to `true` in the `authenticate(...)` method:

`[](#%5F%5Fcodelineno-4-1)import { Biometrics, ErrorCode } from '@capawesome-team/capacitor-biometrics';
[](#%5F%5Fcodelineno-4-2)
[](#%5F%5Fcodelineno-4-3)const authenticate = async () => {
[](#%5F%5Fcodelineno-4-4)  await Biometrics.authenticate({
[](#%5F%5Fcodelineno-4-5)    allowDeviceCredential: true,
[](#%5F%5Fcodelineno-4-6)  });
[](#%5F%5Fcodelineno-4-7)};
`

This allows users to authenticate using their device credentials if biometric recognition fails or is temporarily unavailable. It provides a seamless user experience by ensuring that authentication can still proceed even when biometrics are not an option.

Make sure to check if the device supports device credentials before enabling this option. You can do this using the [hasDeviceCredential(...)](/docs/sdks/capacitor/biometrics/#hasdevicecredential) method:

`[](#%5F%5Fcodelineno-5-1)const checkDeviceCredential = async () => {
[](#%5F%5Fcodelineno-5-2)  const result = await Biometrics.hasDeviceCredential();
[](#%5F%5Fcodelineno-5-3)
[](#%5F%5Fcodelineno-5-4)  if (result.hasDeviceCredential) {
[](#%5F%5Fcodelineno-5-5)    console.log('Device credential is available as fallback');
[](#%5F%5Fcodelineno-5-6)  } else {
[](#%5F%5Fcodelineno-5-7)    console.log('No device credential configured');
[](#%5F%5Fcodelineno-5-8)  }
[](#%5F%5Fcodelineno-5-9)};
`

If biometrics are not available and the user has not set up a device credential, this means that the device is completely unprotected. In this case, you may want to prohibit the use of your app on this device.

### Canceling Authentication[¶](#canceling-authentication "Permanent link")

For scenarios where you need to programmatically cancel an ongoing authentication process, use the [cancelAuthentication(...)](/docs/sdks/capacitor/biometrics/#cancelauthentication) method:

`[](#%5F%5Fcodelineno-6-1)const cancelAuth = async () => {
[](#%5F%5Fcodelineno-6-2)  await Biometrics.cancelAuthentication();
[](#%5F%5Fcodelineno-6-3)};
`

This method is useful when implementing custom UI flows or handling application state changes that require interrupting the authentication process.

### Error Handling[¶](#error-handling "Permanent link")

Proper error handling is essential for a robust implementation. For this purpose, the Capacitor Biometrics API provides a set of error codes that help you identify specific issues during the authentication process. Here are some common error codes:

* `LOCKOUT`: The device is locked out due to too many failed authentication attempts.
* `NOT_ENROLLED`: The user has not enrolled any biometric data on the device.
* `SYSTEM_CANCELED`: The system canceled the authentication process, typically due to a timeout or interruption.
* `TIMEOUT`: The authentication process timed out before completion.
* `UNAVAILABLE`: Biometric authentication is not available on the device.
* `USER_CANCELED`: The user canceled the authentication process.

All error codes are defined in the `ErrorCode` enum, which you can import from the plugin:

`[](#%5F%5Fcodelineno-7-1)import { ErrorCode } from '@capawesome-team/capacitor-biometrics';
`

## Best Practices[¶](#best-practices "Permanent link")

When implementing biometric authentication with the Capacitor Biometrics API, consider these best practices:

1. **Check availability and enrollment**: Always verify that biometrics are available and enrolled before presenting biometric options to users. Use [isAvailable(...)](/docs/sdks/capacitor/biometrics/#isavailable) and [isEnrolled(...)](/docs/sdks/capacitor/biometrics/#isenrolled) to ensure the feature is ready for use.
2. **Provide fallback options**: Enable device credential fallback using `allowDeviceCredential: true` in your authentication calls. This ensures users can still authenticate even if biometric recognition fails or is temporarily unavailable.
3. **Handle errors gracefully**: Implement comprehensive error handling to manage different authentication scenarios. Provide clear feedback to users about authentication failures and guide them on alternative authentication methods.
4. **Customize authentication prompts**: Use descriptive titles, subtitles, and descriptions in your authentication prompts to help users understand why authentication is required and what actions they can take.
5. **Respect user preferences**: Allow users to disable biometric authentication in your app settings and provide alternative authentication methods for users who prefer not to use biometric features.

## FAQ[¶](#faq "Permanent link")

### Can I guide users through biometric enrollment without leaving my app on both Android and iOS?[¶](#can-i-guide-users-through-biometric-enrollment-without-leaving-my-app-on-both-android-and-ios "Permanent link")

Only on Android. The `enroll()` method that opens the device's biometric enrollment screen directly is Android-only — on iOS, there's no equivalent, so you'd need to direct users to the Settings app themselves to add Face ID or Touch ID.

### Does `cancelAuthentication()` work the same way on every Android version?[¶](#does-cancelauthentication-work-the-same-way-on-every-android-version "Permanent link")

No — it requires Android SDK 29+ (in addition to iOS support). On older Android versions, there's no supported way to programmatically dismiss an in-progress authentication prompt from your code; the user has to cancel it manually.

### What's the difference between `isAvailable()` and `isEnrolled()`?[¶](#whats-the-difference-between-isavailable-and-isenrolled "Permanent link")

`isAvailable()` tells you whether the device has the hardware capability for biometric authentication at all. `isEnrolled()` tells you whether the current user has actually set up biometric data (a fingerprint, a face scan) on that hardware. A device can have the sensor but return `isEnrolled: false` if the user never configured it — checking only availability and skipping enrollment leads to authentication calls failing for a reason your UI never explained.

### If biometrics fail, does `allowDeviceCredential` guarantee the user can still get in?[¶](#if-biometrics-fail-does-allowdevicecredential-guarantee-the-user-can-still-get-in "Permanent link")

Only if the device actually has a PIN, pattern, or password configured — check with `hasDeviceCredential()` first. If neither biometrics nor a device credential is set up, the device has no lock screen protection at all, which is the scenario the plugin's own guidance suggests you may want to block entirely rather than let the user proceed unauthenticated.

### Is iris recognition available on iOS devices?[¶](#is-iris-recognition-available-on-ios-devices "Permanent link")

No — iris authentication is Android-only, per the `BiometricStrength` enum's `Iris` value. iOS devices authenticate via Face ID or Touch ID depending on hardware, never iris scanning.

## Conclusion[¶](#conclusion "Permanent link")

The [Capacitor Biometrics plugin](/docs/sdks/capacitor/biometrics/) from Capawesome provides a comprehensive solution for integrating biometric authentication into Ionic applications. By offering a unified API across multiple platforms, it enables developers to create secure and user-friendly authentication experiences without the complexity of platform-specific implementations. For the full plugin documentation, see the [API Reference](/docs/sdks/capacitor/biometrics/#api).

**Related guides:**

* [Announcing the Capacitor Biometrics Plugin](/blog/announcing-the-capacitor-biometrics-plugin/)
* [How to Securely Store Credentials with Capacitor](/blog/how-to-securely-store-credentials-with-capacitor/)
* [Alternative to the Ionic Identity Vault plugin](/blog/alternative-to-ionic-identity-vault-plugin/)

To stay updated with the latest updates, features, and news about the Capawesome, Capacitor, and Ionic ecosystem, subscribe to the [Capawesome newsletter](/newsletter/) and follow us on [X (formerly Twitter)](https://x.com/capawesomeio).

July 17, 2026 

Back to top

```json
{
      "@context": "https://schema.org",
      "@type": "BlogPosting",
      "headline": "Exploring the Capacitor Biometrics API",
      "description": "Practical guide to the Capacitor Biometrics plugin: Face ID, Touch ID, fingerprint, and passcode auth in Ionic and Capacitor apps.",
      "image": "https://capawesome.io/assets/banners/cloud-build-and-deploy-capacitor-apps.png",
      "datePublished": "2025-07-04T00:00:00+00:00",
      "dateModified": "2026-07-17T00:00:00+00:00",
      "author": [
        {
          "@type": "Person",
          "name": "Robin Genz",
          "url": "https://github.com/robingenz"
        }
      ],
      "publisher": {
        "@type": "Organization",
        "name": "Capawesome",
        "url": "https://capawesome.io",
        "logo": {
          "@type": "ImageObject",
          "url": "https://capawesome.io/assets/images/logo.svg"
        }
      },
      "articleSection": "Capacitor",
      "keywords": ["Capacitor", "Guides", "SDKs"],
      "isPartOf": {
        "@type": "Blog",
        "@id": "https://capawesome.io/blog/#blog"
      },
      "mainEntityOfPage": "https://capawesome.io/blog/exploring-the-capacitor-biometrics-api/",
      "url": "https://capawesome.io/blog/exploring-the-capacitor-biometrics-api/"
    }
{
      "@context": "https://schema.org",
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Home",
          "item": "https://capawesome.io/"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Blog",
          "item": "https://capawesome.io/blog/"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Exploring the Capacitor Biometrics API",
          "item": "https://capawesome.io/blog/exploring-the-capacitor-biometrics-api/"
        }
      ]
    }
{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "Can I guide users through biometric enrollment without leaving my app on both Android and iOS?", "acceptedAnswer": {"@type": "Answer", "text": "Only on Android. The enroll() method that opens the device's biometric enrollment screen directly is Android-only — on iOS, there's no equivalent, so you'd need to direct users to the Settings app themselves to add Face ID or Touch ID."}}, {"@type": "Question", "name": "Does cancelAuthentication() work the same way on every Android version?", "acceptedAnswer": {"@type": "Answer", "text": "No — it requires Android SDK 29+ (in addition to iOS support). On older Android versions, there's no supported way to programmatically dismiss an in-progress authentication prompt from your code; the user has to cancel it manually."}}, {"@type": "Question", "name": "What's the difference between isAvailable() and isEnrolled()?", "acceptedAnswer": {"@type": "Answer", "text": "isAvailable() tells you whether the device has the hardware capability for biometric authentication at all. isEnrolled() tells you whether the current user has actually set up biometric data (a fingerprint, a face scan) on that hardware. A device can have the sensor but return isEnrolled: false if the user never configured it — checking only availability and skipping enrollment leads to authentication calls failing for a reason your UI never explained."}}, {"@type": "Question", "name": "If biometrics fail, does allowDeviceCredential guarantee the user can still get in?", "acceptedAnswer": {"@type": "Answer", "text": "Only if the device actually has a PIN, pattern, or password configured — check with hasDeviceCredential() first. If neither biometrics nor a device credential is set up, the device has no lock screen protection at all, which is the scenario the plugin's own guidance suggests you may want to block entirely rather than let the user proceed unauthenticated."}}, {"@type": "Question", "name": "Is iris recognition available on iOS devices?", "acceptedAnswer": {"@type": "Answer", "text": "No — iris authentication is Android-only, per the BiometricStrength enum's Iris value. iOS devices authenticate via Face ID or Touch ID depending on hardware, never iris scanning."}}], "url": "https://capawesome.io/blog/exploring-the-capacitor-biometrics-api/"}
```
