This plugin is replaced by @nativescript/biometrics
npm install @nativescript/fingerprint-auth
Then open App_Resources/Android/app.gradle
and look for minSdkVersion
. If that's set to a version less than 23, add this overrideLibrary
line to App_Resources/Android/src/main/AndroidManifest.xml
:
<uses-sdk
android:minSdkVersion="17"
android:targetSdkVersion="__APILEVEL__"
tools:overrideLibrary="com.jesusm.kfingerprintmanager"
/>
Want a nicer guide than these raw code samples? Read Nic Raboy's blog post about this plugin.
available
var fingerprintAuthPlugin = require('@nativescript/fingerprint-auth')
var fingerprintAuth = new fingerprintAuthPlugin.FingerprintAuth()
fingerprintAuth.available().then(function (avail) {
console.log('Available? ' + avail)
})
import { FingerprintAuth, BiometricIDAvailableResult } from "@nativescript/fingerprint-auth";
class MyClass {
private fingerprintAuth: FingerprintAuth;
constructor() {
this.fingerprintAuth = new FingerprintAuth();
}
this.fingerprintAuth.available().then((result: BiometricIDAvailableResult) => {
console.log(`Biometric ID available? ${result.any}`);
console.log(`Touch? ${result.touch}`);
console.log(`Face? ${result.face}`);
});
}
verifyFingerprint
Note that on the iOS simulator this will just resolve()
.
fingerprintAuth
.verifyFingerprint({
title: 'Android title', // optional title (used only on Android)
message: 'Scan yer finger' // optional (used on both platforms) - for FaceID on iOS see the notes about NSFaceIDUsageDescription
})
.then((enteredPassword?: string) => {
if (enteredPassword === undefined) {
console.log('Biometric ID OK')
} else {
// compare enteredPassword to the one the user previously configured for your app (which is not the users system password!)
}
})
.catch(err => console.log(`Biometric ID NOT OK: ${JSON.stringify(err)}`))
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.
fingerprintAuth
.verifyFingerprintWithCustomFallback({
message: 'Scan yer finger', // optional, shown in the fingerprint dialog (default: 'Scan your finger').
fallbackMessage: 'Enter PIN', // optional, the button label when scanning fails (default: 'Enter password').
authenticationValidityDuration: 10 // optional (used on Android, default 5)
})
.then(
() => {
console.log('Fingerprint was OK')
},
error => {
// when error.code === -3, the user pressed the button labeled with your fallbackMessage
console.log(
'Fingerprint NOT OK. Error code: ' +
error.code +
'. Error message: ' +
error.message
)
}
)
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 app/App_Resources/ios/Info.plist
:
<key>NSFaceIDUsageDescription</key>
<string>For easy authentication with our app.</string>
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. In case didFingerprintDatabaseChange
returns true
you probably want to re-authenticate your user before accepting valid fingerprints again.
fingerprintAuth.available().then(avail => {
if (!avail) {
return
}
fingerprintAuth.didFingerprintDatabaseChange().then(changed => {
if (changed) {
// re-auth the user by asking for his credentials before allowing a fingerprint scan again
} else {
// call the fingerprint scanner
}
})
})
Face ID
support. Breaking change, see the API for available
.verifyFingerprintWithCustomFallback
.nativescript-touchid
to nativescript-fingerprint-auth
(sorry for any inconvenience!).didFingerprintDatabaseChange
for enhanced security.verifyFingerprintWithCustomFallback
, verifyFingerprint
now falls back to the passcode.touchid.available
.Apache License Version 2.0