NativeScript Fingerprint Authentication
Also works with Face ID on iPhone X(s) 🚀
From the command prompt go to your app's root folder and execute:
tns plugin add nativescript-fingerprint-auth
App_Resources/Android/AndroidManifest.xml and look for
If that's set to a version less than 23, add this
If you want a quickstart, check out the demo app. Run it locally using these commands:
git clone https://github.com/EddyVerbruggen/nativescript-fingerprint-authcd nativescript-fingerprint-auth/srcnpm run demo.android # or demo.ios
Want a nicer guide than these raw code samples? Read Nic Raboy's blog post about this plugin.
var fingerprintAuthPlugin = ;var fingerprintAuth = ;fingerprintAuth
Note that on the iOS simulator this will just
fingerprintAuth.verifyFingerprint.then.catchconsole.log`Biometric ID NOT OK: `;
A nicer UX/UI on Android (
The default authentication screen on Android is a standalone screen that (depending on the exact Android version) looks kinda 'uninteresting'.
So with version 6.0.0 this plugin added the ability to override the default screen and offer an iOS popover style which you can activate by passing in
useCustomAndroidUI: true in the function above.
One important thing to realize is that the 'use password' option in this dialog doesn't verify the entered password against the system password. It must be used to compare the entered password with an app-specific password the user previously configured.
If you want to override the default texts of this popover screen, then drop a file
strings.xml in your project and override the properties you like. See the demo app for an example.
⚠️ Important note when using NativeScript < 5.4.0
Use plugin version < 7.0.0 to be able to use this feature with NativeScript < 5.4.0
Skip this section if you're on NativeScript 5.4.0 or newer because it's all handled automatically!
To be able to use this screen, a change to
App_Resources/Android/AndroidManifest.xml is required as our NativeScript activity needs to extend AppCompatActivity (note that in the future this may become the default for NativeScript apps).
To do so, open the file and replace
<activity android:name="com.tns.NativeScriptActivity" by
Note that if you forget this and set
useCustomAndroidUI: true the plugin will
reject the Promise with a relevant error message.
Mandatory changes for webpack and snapshot builds (again, for NativeScript < 5.4.0 only)
If you are using Webpack with or without snapshot there are couple more changes required in order to make the custom UI work in your production builds.
First you need to edit your
vendor-platform.android.ts file and add
require("nativescript-fingerprint-auth/appcompat-activity");. You can see the changed file in the demo app here.
The second change should be made in your
webpack.config.js file. Find the place where the
NativeScriptSnapshotPlugin is pushed to the webpack plugins and add
"nativescript-fingerprint-auth" in the
tnsJavaClassesOptions.packages array. The result should look something like:
// ...if snapshotconfigplugins;// ...
verifyFingerprintWithCustomFallback (iOS only, falls back to
verifyFingerprint on Android)
Instead of falling back to the default Passcode UI of iOS you can roll your own. Just show that when the error callback is invoked.
Face ID (iOS)
iOS 11 added support for Face ID and was first supported by the iPhone X.
The developer needs to provide a value for
NSFaceIDUsageDescription, otherwise your app may crash.
You can provide this value (the reason for using Face ID) by adding something like this to
NSFaceIDUsageDescriptionFor easy authentication with our app.
Since iOS9 it's possible to check whether or not the list of enrolled fingerprints changed since the last time you checked it. It's recommended you add this check so you can counter hacker attacks to your app. See this article for more details.
So instead of checking the fingerprint after
available add another check.
true you probably want to re-authenticate your user
before accepting valid fingerprints again.
- 6.2.0 Fixed a potential bypass on iOS.
- 6.1.0 Fixed potentioal bypasses on Android.
- 6.0.3 Android interfered with other plugins' Intents.
- 6.0.2 Plugin not working correctly on iOS production builds / TestFlight.
- 6.0.1 Fixed a compatibility issues with NativeScript 3.4.
- 6.0.0 Allow custom UI on Android.
- 5.0.0 Better
Face IDsupport. Breaking change, see the API for
- 4.0.1 Aligned with the official NativeScript plugin seed. Requires NativeScript 3.0.0+. Thanks, @angeltsvetkov!
- 4.0.0 Converted to TypeScript. Changed the error response type of
- 3.0.0 Android support added. Renamed
nativescript-fingerprint-auth(sorry for any inconvenience!).
- 2.1.1 Xcode 8 compatibility - requires NativeScript 2.3.0+.
- 2.1.0 Added
didFingerprintDatabaseChangefor enhanced security.
- 2.0.0 Added
verifyFingerprintnow falls back to the passcode.
- 1.2.0 You can now use the built-in passcode interface as fallback.
- 1.1.1 Added TypeScript definitions.
- 1.1.0 Added Android platform which will always return false for