{"id":13794784,"url":"https://github.com/aparajita/capacitor-biometric-auth","last_synced_at":"2026-01-17T11:54:16.267Z","repository":{"id":41068630,"uuid":"299821291","full_name":"aparajita/capacitor-biometric-auth","owner":"aparajita","description":"Easy access to native biometric auth APIs on iOS and Android","archived":false,"fork":false,"pushed_at":"2025-11-05T16:41:37.000Z","size":1286,"stargazers_count":212,"open_issues_count":2,"forks_count":35,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-11-05T18:26:04.772Z","etag":null,"topics":["biometric-authentication","biometry","capacitor","capacitor-android","capacitor-ios","capacitor-plugin","capacitor-plugins","capacitorjs"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aparajita.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-09-30T05:51:00.000Z","updated_at":"2025-11-05T16:41:40.000Z","dependencies_parsed_at":"2024-01-08T09:02:46.136Z","dependency_job_id":"c78857ba-bffa-4489-b0c5-d96cb2deff28","html_url":"https://github.com/aparajita/capacitor-biometric-auth","commit_stats":{"total_commits":206,"total_committers":3,"mean_commits":68.66666666666667,"dds":0.009708737864077666,"last_synced_commit":"0a3135218355680153b47214b8e9b2a4bdf7fcf3"},"previous_names":[],"tags_count":48,"template":false,"template_full_name":null,"purl":"pkg:github/aparajita/capacitor-biometric-auth","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aparajita%2Fcapacitor-biometric-auth","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aparajita%2Fcapacitor-biometric-auth/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aparajita%2Fcapacitor-biometric-auth/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aparajita%2Fcapacitor-biometric-auth/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aparajita","download_url":"https://codeload.github.com/aparajita/capacitor-biometric-auth/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aparajita%2Fcapacitor-biometric-auth/sbom","scorecard":{"id":201977,"data":{"date":"2025-08-11","repo":{"name":"github.com/aparajita/capacitor-biometric-auth","commit":"8bc1389e46b35bb6aa5daa0fccbd2eaf2db5ff53"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.8,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 1/28 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: android/gradle/wrapper/gradle-wrapper.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":1,"reason":"1 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'develop'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 3 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":8,"reason":"2 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-16T22:58:33.100Z","repository_id":41068630,"created_at":"2025-08-16T22:58:33.101Z","updated_at":"2025-08-16T22:58:33.101Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28508462,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T11:50:55.898Z","status":"ssl_error","status_checked_at":"2026-01-17T11:50:55.569Z","response_time":85,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["biometric-authentication","biometry","capacitor","capacitor-android","capacitor-ios","capacitor-plugin","capacitor-plugins","capacitorjs"],"created_at":"2024-08-03T23:00:47.852Z","updated_at":"2026-01-17T11:54:16.250Z","avatar_url":"https://github.com/aparajita.png","language":"JavaScript","funding_links":[],"categories":["Plugins","Aparajita plugins"],"sub_categories":["Community Plugins","Specialized Hardware"],"readme":"\u003cdiv class=\"markdown-body\"\u003e\n\n# capacitor-biometric-auth\u0026nbsp;\u0026nbsp;[![npm version](https://badge.fury.io/js/@aparajita%2Fcapacitor-biometric-auth.svg)](https://badge.fury.io/js/@aparajita%2Fcapacitor-biometric-auth)\n\nThis plugin for [Capacitor 7](https://capacitorjs.com) provides access to native biometry and device credentials on iOS and Android. It supports every type of biometry and every configuration option on both platforms. In addition, biometry and device credentials are simulated on the web so you can test your logic without making any changes to your code.\n\n🛑 **BREAKING CHANGES:**\n\n- If you are upgrading from a version prior to 6.0.0, please note that [`authenticate()`](#authenticate) now throws an instance of `BiometryError`, and `BiometryError.code` is now typed as [`BiometryErrorType`](#biometryerrortype).\n\n- If you are upgrading from a version prior to 7.0.0, please note that [`authenticate()`](#authenticate) will _immediately_ present a prompt for device credentials if `deviceIsSecure` is true, `allowDeviceCredentials` is true, and no biometry of the requested strength is available.\n\n- If you are upgrading from a version prior to 8.0.0, please note that this plugin now requires Capacitor 7+.\n\n- If you are upgrading from a version prior to 8.0.0, please note that [`addResumeListener`](#addresumelistener) now always returns a Promise and must be awaited.\n\n## Installation\n\n```sh\npnpm add @aparajita/capacitor-biometric-auth\nnpm install @aparajita/capacitor-biometric-auth\nyarn add @aparajita/capacitor-biometric-auth\n```\n\nNot using [pnpm](https://pnpm.js.org/)? You owe it to yourself to give it a try. It’s faster, better with monorepos, and uses _way, way_ less disk space than the alternatives.\n\n### iOS\n\n👉 **IMPORTANT!!** In order to use Face ID, you must add the `NSFaceIDUsageDescription` key to your `Info.plist` file. This is a string that describes why your app needs access to Face ID. If you don’t add this key, the system won’t allow your app to use Face ID.\n\n1. In Xcode, open your app’s `Info.plist` file.\n2. Hover your mouse over one of the existing keys, and click the `+` button that appears.\n3. In the popup that appears, type `Privacy - Face ID Usage Description` and press Enter.\n4. In the Value column, enter a string that describes why your app needs access to Face ID.\n5. Save your changes.\n\n## Usage\n\nThe API is extensively documented in the [TypeScript definitions file](src/definitions.ts). There is also (somewhat incomplete auto-generated) documentation [below](#api). For a complete example of how to use this plugin in practice, see the [demo app](https://github.com/aparajita/capacitor-biometric-auth/blob/main/demo/README.md).\n\n### Checking availability\n\nAlthough not strictly necessary, before giving the user the option to use biometry (such as displaying a biometry icon), you will probably want to call [`checkBiometry()`](#checkbiometry) and inspect the [`CheckBiometryResult`](#checkbiometryresult) to see what (if any) biometry and/or device credentials are available on the device. Note the following:\n\n- `isAvailable` may be `false` but `biometryType` may indicate the presence of biometry on the device. This occurs if:\n  - The current user is not enrolled in biometry.\n  - Biometry has been disabled for the current app.\n  - On Android, biometric hardware is present but can only be used for _device_ unlock, _not_ by apps. see the [Android note](#android-note) below for more information.\n\n  In such cases the `reason` and `code` will tell you why.\n\n- On iOS, `isAvailable` and `strongBiometryIsAvailable` will always have the same value, because traditionally that’s the whole point of biometry — it’s supposed to be strong authentication.\n- Android unfortunately supports “strong” biometry (usually fingerprint) and “weak” biometry (usually face/iris). `isAvailable` will be `true` if _any_ type of biometry is actually available for use by the app, but `strongBiometryIsAvailable` will be `true` only if strong biometry is available. For example, on a typical device, if it has hardware support for both fingerprint and face unlock, and both are available for use by apps, `isAvailable` will be `true` if either is enrolled, but `strongBiometryIsAvailable` will be `true` only if fingerprint authentication is enrolled.\n\n#### ❗Android note\n\nWhen it comes to biometry, Android is frankly a bit of a mess. Some devices may support “weak” biometry (e.g. face unlock) only for device unlock, and not by apps. But the system reports to this plugin _all_ types of biometric hardware, even if they are not available for use by apps.\n\n👉 Therefore on Android the only thing you can rely on are the `isAvailable` and `strongBiometryAvailable` properties as simple on/off switches. Do NOT rely on `biometryType` and `biometryTypes` as an indication of what biometry you can actually use.\n\n#### Handling app resume\n\nBecause the availability of biometry can change while your app is in the background, it’s important to check availability when your app resumes. By calling [`addResumeListener()`](#addresumelistener) you can register a callback that is passed a [`CheckBiometryResult`](#checkbiometryresult) when your app resumes.\n\n#### Example\n\n```typescript\nimport { CheckBiometryResult } from './definitions'\n\nlet appListener: PluginListenerHandle\n\nfunction updateBiometryInfo(info: CheckBiometryResult): void {\n  if (info.isAvailable) {\n    // Biometry is available, info.biometryType will tell you the primary type.\n  } else {\n    // Biometry is not available, info.reason and info.code will tell you why.\n  }\n}\n\nasync function onComponentMounted(): Promise\u003cvoid\u003e {\n  updateBiometryInfo(await BiometricAuth.checkBiometry())\n\n  try {\n    appListener = await BiometricAuth.addResumeListener(updateBiometryInfo)\n  } catch (error) {\n    if (error instanceof Error) {\n      console.error(error.message)\n    }\n  }\n}\n\nasync function onComponentUnmounted(): Promise\u003cvoid\u003e {\n  await appListener?.remove()\n}\n```\n\n### Authenticating\n\nTo initiate biometric authentication call [`authenticate()`](#authenticate). `authenticate` takes an [`AuthenticateOptions`](#authenticateoptions) object which you will want to use in order to control the behavior and appearance of the biometric prompt.\n\nIf authentication succeeds, the Promise resolves. If authentication fails, the Promise is rejected with an instance of [`BiometryError`](#biometryerror), which has two properties:\n\n| Property | Type                                                                                                    | Description                                       |\n| :------- | :------------------------------------------------------------------------------------------------------ | :------------------------------------------------ |\n| message  | string                                                                                                  | A description of the error suitable for debugging |\n| code     | [BiometryErrorType](https://github.com/aparajita/capacitor-biometric-auth/blob/main/src/definitions.ts) | What caused the error                             |\n\n#### Example\n\n```typescript\nimport {\n  AndroidBiometryStrength,\n  BiometryError,\n  BiometryErrorType,\n} from './definitions'\n\nasync function authenticate(): Promise\u003cvoid\u003e {\n  try {\n    await BiometricAuth.authenticate({\n      reason: 'Please authenticate',\n      cancelTitle: 'Cancel',\n      allowDeviceCredential: true,\n      iosFallbackTitle: 'Use passcode',\n      androidTitle: 'Biometric login',\n      androidSubtitle: 'Log in using biometric authentication',\n      androidConfirmationRequired: false,\n      androidBiometryStrength: AndroidBiometryStrength.weak,\n    })\n  } catch (error) {\n    // error is always an instance of BiometryError.\n    if (error instanceof BiometryError) {\n      if (error.code !== BiometryErrorType.userCancel) {\n        // Display the error.\n        await showAlert(error.message)\n      }\n    }\n  }\n}\n```\n\n## Biometry support\n\n### web\n\nOn the web, you can fake any of the supported biometry types by calling [`setBiometryType()`](#setbiometrytype).\n\n### iOS\n\nOn iOS, Touch ID and Face ID are supported.\n\n### Android\n\nOn Android, fingerprint, face, and iris authentication are supported. Note that if a device supports more than one type of biometry, the plugin will initially present the primary (most secure) available type, which is determined by the system and cannot be determined programmatically.\n\n❗ As discussed above, Android may support multiple types of biometry, but not all of them may be available for use by apps. For example, a device may support both fingerprint and face authentication, but only fingerprint authentication may be available for use by apps. In such cases, if the user has enrolled in face authentication only, `checkBiometry()` will indicate that biometry is not available.\n\n## API\n\n\u003cdocgen-index\u003e\n\n- [`checkBiometry()`](#checkbiometry)\n- [`setBiometryType(...)`](#setbiometrytype)\n- [`setBiometryIsEnrolled(...)`](#setbiometryisenrolled)\n- [`setDeviceIsSecure(...)`](#setdeviceissecure)\n- [`authenticate(...)`](#authenticate)\n- [`addResumeListener(...)`](#addresumelistener)\n- [Interfaces](#interfaces)\n- [Type Aliases](#type-aliases)\n- [Enums](#enums)\n\n\u003c/docgen-index\u003e\n\u003cdocgen-api\u003e\n\u003c!--Update the source file JSDoc comments and rerun docgen to update the docs below--\u003e\n\nThis is the public interface of the plugin.\n\n### checkBiometry()\n\n```typescript\ncheckBiometry() =\u003e Promise\u003cCheckBiometryResult\u003e\n```\n\nCheck to see what biometry type (if any) is available.\n\n**Returns:** Promise\u0026lt;\u003ca href=\"#checkbiometryresult\"\u003eCheckBiometryResult\u003c/a\u003e\u0026gt;\n\n---\n\n### setBiometryType(...)\n\n```typescript\nsetBiometryType(type: BiometryType | string | Array\u003cBiometryType | string\u003e | undefined) =\u003e Promise\u003cvoid\u003e\n```\n\nweb only\u003cbr\u003e\u003cbr\u003eOn the web, this method allows you to dynamically simulate different types of biometry. You may either pass \u003ca href=\"#biometrytype\"\u003e`BiometryType`\u003c/a\u003e enums or the string names of the \u003ca href=\"#biometrytype\"\u003e`BiometryType`\u003c/a\u003e enums. If undefined or a string is passed and it isn't a valid value, nothing happens.\n\n| Param | Type                                                                                                         |\n| :---- | :----------------------------------------------------------------------------------------------------------- |\n| type  | string \\| \u003ca href=\"#biometrytype\"\u003eBiometryType\u003c/a\u003e \\| (string \\| \u003ca href=\"#biometrytype\"\u003eBiometryType\u003c/a\u003e)[] |\n\n---\n\n### setBiometryIsEnrolled(...)\n\n```typescript\nsetBiometryIsEnrolled(isSecure: boolean) =\u003e Promise\u003cvoid\u003e\n```\n\nweb only\u003cbr\u003e\u003cbr\u003eOn the web, this method allows you to dynamically simulate whether or not the user has enrolled in biometry.\n\n| Param    | Type    |\n| :------- | :------ |\n| isSecure | boolean |\n\n---\n\n### setDeviceIsSecure(...)\n\n```typescript\nsetDeviceIsSecure(isSecure: boolean) =\u003e Promise\u003cvoid\u003e\n```\n\nweb only\u003cbr\u003e\u003cbr\u003eOn the web, this method allows you to dynamically simulate whether or not the user has secured the device with a PIN, pattern or passcode.\n\n| Param    | Type    |\n| :------- | :------ |\n| isSecure | boolean |\n\n---\n\n### authenticate(...)\n\n```typescript\nauthenticate(options?: AuthenticateOptions) =\u003e Promise\u003cvoid\u003e\n```\n\nPrompt the user for authentication. If authorization fails for any reason, the promise is rejected with a `BiometryError`.\u003cbr\u003e\u003cbr\u003eFor detailed information about the behavior on iOS, see:\u003cbr\u003e\u003cbr\u003ehttps://developer.apple.com/documentation/localauthentication/lapolicy/deviceownerauthenticationwithbiometrics\u003cbr\u003e\u003cbr\u003eSome versions of Android impose a limit on the number of failed attempts. If `allowDeviceCredential` is `true`, when the limit is reached the user will then be presented with a device credential prompt. If `allowDeviceCredential` is `false`, when the limit is reached `authenticate()` will reject with a \u003ca href=\"#biometryerrortype\"\u003e`BiometryErrorType`\u003c/a\u003e of `biometryLockout`, after which the user will have to wait the system-defined length of time before being allowed to authenticate again.\n\n| Param   | Type                                                   |\n| :------ | :----------------------------------------------------- |\n| options | \u003ca href=\"#authenticateoptions\"\u003eAuthenticateOptions\u003c/a\u003e |\n\n---\n\n### addResumeListener(...)\n\n```typescript\naddResumeListener(listener: ResumeListener) =\u003e Promise\u003cPluginListenerHandle\u003e\n```\n\nRegister a function that will be called when the app resumes. The function will be passed the result of `checkBiometry()`.\u003cbr\u003e\u003cbr\u003e👉 **NOTE:** checkBiometry() must be called at least once before calling this method.\n\n| Param    | Type                                         |\n| :------- | :------------------------------------------- |\n| listener | \u003ca href=\"#resumelistener\"\u003eResumeListener\u003c/a\u003e |\n\n**Returns:** Promise\u0026lt;\u003ca href=\"#pluginlistenerhandle\"\u003ePluginListenerHandle\u003c/a\u003e\u0026gt;\n\n---\n\n### Interfaces\n\n#### CheckBiometryResult\n\n| Property                  | Type                                               | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |\n| :------------------------ | :------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| isAvailable               | boolean                                            | True if the device supports _at least_ weak biometric authentication _by apps_ and the current user has enrolled in some form of biometry. Note that if `strongBiometryIsAvailable` is true, this will also be true.                                                                                                                                                                                                                                                                                                                         |\n| strongBiometryIsAvailable | boolean                                            | True if the device has strong biometric authentication capability and the current user has enrolled in that strong biometry.\u003cbr\u003e\u003cbr\u003eOn iOS this value and `isAvailable` will always be the same, since iOS only supports strong biometry.\u003cbr\u003e\u003cbr\u003eOn Android, for example, if the device supports both fingerprint and face authentication by apps, and the user has enrolled only in face authentication, and Android considers face authentication on that device to be weak, then `isAvailable` will be true but this value will be false. |\n| biometryType              | \u003ca href=\"#biometrytype\"\u003eBiometryType\u003c/a\u003e           | The primary (most secure) type of biometry supported by the device. Note that _supported_ is not the same as _available_, which requires the biometry to be enrolled.                                                                                                                                                                                                                                                                                                                                                                        |\n| biometryTypes             | BiometryType[]                                     | All of the biometry types supported by the hardware on the device, _whether or not it is actually available for use by apps_. If no biometry is supported, i.e. `biometryType === \u003ca href=\"#biometrytype\"\u003eBiometryType.none`\u003c/a\u003e, this will be an empty array.\u003cbr\u003e\u003cbr\u003eNote that _supported_ is not the same as _available_, which requires the biometry to be enrolled.                                                                                                                                                                      |\n| deviceIsSecure            | boolean                                            | Returns true if the device is secure. On iOS, this means that the device has a passcode set. On Android, this means that the device has a PIN, pattern, or password set.                                                                                                                                                                                                                                                                                                                                                                     |\n| reason                    | string                                             | If weak or better biometry is not available and the system gives a reason why, it will be returned here. Otherwise it's an empty string.                                                                                                                                                                                                                                                                                                                                                                                                     |\n| code                      | \u003ca href=\"#biometryerrortype\"\u003eBiometryErrorType\u003c/a\u003e | If weak or better biometry is not available, the error code will be returned here. Otherwise it's an empty string. The error code will be one of the \u003ca href=\"#biometryerrortype\"\u003e`BiometryErrorType`\u003c/a\u003e enum values, and is consistent across platforms.                                                                                                                                                                                                                                                                                   |\n| strongReason              | string                                             | If strong biometry is not available and the system gives a reason why, it will be returned here. Otherwise it's an empty string.\u003cbr\u003e\u003cbr\u003eOn iOS, this will always be the same as `reason`, since all biometry on iOS is strong.                                                                                                                                                                                                                                                                                                               |\n| strongCode                | \u003ca href=\"#biometryerrortype\"\u003eBiometryErrorType\u003c/a\u003e | If strong biometry is not available, the error code will be returned here. Otherwise it's an empty string. The error code will be one of the \u003ca href=\"#biometryerrortype\"\u003e`BiometryErrorType`\u003c/a\u003e enum values, and is consistent across platforms.\u003cbr\u003e\u003cbr\u003eOn iOS, this will always be the same as `code`, since all biometry on iOS is strong.                                                                                                                                                                                               |\n\n#### AuthenticateOptions\n\n| Prop                        | Type                                                           | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |\n| :-------------------------- | :------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| reason                      | string                                                         | Displays the reason for requesting authentication in the authentication dialog presented to the user.\u003cbr\u003e\u003cbr\u003eDefault: System default                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |\n| cancelTitle                 | string                                                         | iOS: The system presents a cancel button during biometric authentication to let the user abort the authentication attempt. The button appears every time the system asks the user to present a finger registered with Touch ID. For Face ID, the button only appears if authentication fails and the user is prompted to try again. Either way, the user can stop trying to authenticate by tapping the button.\u003cbr\u003e\u003cbr\u003eAndroid: The text for the negative button. This would typically be used as a \"Cancel\" button, but may be also used to show an alternative method for authentication, such as a screen that asks for a backup password.\u003cbr\u003e\u003cbr\u003eDefault: \"Cancel\"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |\n| allowDeviceCredential       | boolean                                                        | If true, allows for authentication using device unlock credentials.\u003cbr\u003e\u003cbr\u003eDefault: false.\u003cbr\u003e\u003cbr\u003eiOS: If biometry is available, enrolled, and not disabled, the system uses that first. After the first Touch ID failure or second Face ID failure, if `iosFallbackTitle` is not an empty string, a fallback button appears in the authentication dialog. If the user taps the fallback button, the system prompts the user for the device passcode or the user’s password. If `iosFallbackTitle` is an empty string, no fallback button will appear.\u003cbr\u003e\u003cbr\u003eIf no biometry is enrolled and enabled, and a passcode is set, the system immediately prompts the user for the device passcode or user’s password. Authentication fails with the error code `passcodeNotSet` if the device passcode isn’t enabled.\u003cbr\u003e\u003cbr\u003eIf a passcode is not set on the device, a `passcodeNotSet` error is returned.\u003cbr\u003e\u003cbr\u003eThe system disables passcode authentication after 6 unsuccessful attempts, with progressively increasing delays between attempts.\u003cbr\u003e\u003cbr\u003eThe title of the fallback button may be customized by setting `iosFallbackTitle` to a non-empty string.\u003cbr\u003e\u003cbr\u003eAndroid: The user will first be prompted to authenticate with biometrics, but also given the option to authenticate with their device PIN, pattern, or password by tapping a button in the authentication dialog. The title of the button is supplied by the system. |\n| iosFallbackTitle            | string                                                         | The system presents a fallback button when biometric authentication fails — for example, because the system doesn’t recognize the presented finger, or after several failed attempts to recognize the user’s face.\u003cbr\u003e\u003cbr\u003eIf `allowDeviceCredential` is false, tapping this button dismisses the authentication dialog and returns the error code userFallback. If undefined, the localized system default title is used. Passing an empty string hides the fallback button completely.\u003cbr\u003e\u003cbr\u003eIf `allowDeviceCredential` is true and this is undefined, the localized system default title is used.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |\n| androidTitle                | string                                                         | Title for the Android dialog. If not supplied, the system default is used.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |\n| androidSubtitle             | string                                                         | Subtitle for the Android dialog. If not supplied, the system default is used.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |\n| androidConfirmationRequired | boolean                                                        | Determines if successful weak biometric authentication must be confirmed.\u003cbr\u003e\u003cbr\u003eFor information on this setting, see https://developer.android.com/reference/android/hardware/biometrics/BiometricPrompt.Builder#setConfirmationRequired(boolean).\u003cbr\u003e\u003cbr\u003eDefault: `true`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |\n| androidBiometryStrength     | \u003ca href=\"#androidbiometrystrength\"\u003eAndroidBiometryStrength\u003c/a\u003e | Set the strength of Android biometric authentication that will be accepted.\u003cbr\u003e\u003cbr\u003e👉 **NOTE:** On Android 9 \u0026 10 (API 28-29), this will effectively always be `.weak` if `allowDeviceCredential` is true. This is a known limitation of the Android API. 🤯\u003cbr\u003e\u003cbr\u003eDefault: \u003ca href=\"#androidbiometrystrength\"\u003e`AndroidBiometryStrength.weak`\u003c/a\u003e                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |\n\n#### PluginListenerHandle\n\n| Method     | Signature                    |\n| :--------- | :--------------------------- |\n| **remove** | () =\u0026gt; Promise\u0026lt;void\u0026gt; |\n\n### Type Aliases\n\n#### ResumeListener\n\nThe signature of the callback passed to `addResumeListener()`.\n\n\u003ccode\u003e(info: \u003ca href=\"#checkbiometryresult\"\u003eCheckBiometryResult\u003c/a\u003e): void\u003c/code\u003e\n\n### Enums\n\n#### BiometryType\n\n| Members                   | Description                        |\n| :------------------------ | :--------------------------------- |\n| none                      |                                    |\n| touchId                   | iOS Touch ID                       |\n| faceId                    | iOS Face ID                        |\n| fingerprintAuthentication | Android fingerprint authentication |\n| faceAuthentication        | Android face authentication        |\n| irisAuthentication        | Android iris authentication        |\n\n#### BiometryErrorType\n\n| Members              | Value                  |\n| :------------------- | :--------------------- |\n| none                 | ''                     |\n| appCancel            | 'appCancel'            |\n| authenticationFailed | 'authenticationFailed' |\n| invalidContext       | 'invalidContext'       |\n| notInteractive       | 'notInteractive'       |\n| passcodeNotSet       | 'passcodeNotSet'       |\n| systemCancel         | 'systemCancel'         |\n| userCancel           | 'userCancel'           |\n| userFallback         | 'userFallback'         |\n| biometryLockout      | 'biometryLockout'      |\n| biometryNotAvailable | 'biometryNotAvailable' |\n| biometryNotEnrolled  | 'biometryNotEnrolled'  |\n| noDeviceCredential   | 'noDeviceCredential'   |\n\n#### AndroidBiometryStrength\n\n| Members | Description                                           |\n| :------ | :---------------------------------------------------- |\n| weak    | `authenticate()` will present any available biometry. |\n| strong  | `authenticate()` will only present strong biometry.   |\n\n\u003c/docgen-api\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faparajita%2Fcapacitor-biometric-auth","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faparajita%2Fcapacitor-biometric-auth","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faparajita%2Fcapacitor-biometric-auth/lists"}