Class Biometrics
Entry point for biometric authentication (Touch ID, Face ID, fingerprint,
Android BiometricPrompt). Obtain the platform implementation via
getInstance(); the returned subclass is owned by the active port.
A typical unlock flow:
Biometrics b = Biometrics.getInstance();
if (!b.canAuthenticate()) {
// Fall back to password
return;
}
b.authenticate("Unlock your account").onResult((success, err) -> {
if (err != null) {
BiometricError code = ((BiometricException) err).getError();
// branch on code
} else {
// success
}
});
authenticate(AuthenticationOptions) returns an AsyncResource whose
failure path completes with a BiometricException so callers can branch
on the typed BiometricError.
Platform support
- iOS -- uses
LocalAuthentication.framework(LAContext). Touch ID and Face ID on supported devices. Add theios.NSFaceIDUsageDescriptionbuild hint when targeting Face ID hardware. - Android -- uses
BiometricPrompton API 29+ (Android 10) and the legacyFingerprintManageron API 23-28. Fingerprint, face, and iris modalities are reported perPackageManagerfeatures. - JavaSE simulator -- behaves as a real device with no enrolled
biometrics by default. The
Simulate -> Biometric Simulationsubmenu in the simulator lets you toggle hardware availability, enrolled modalities, and the outcome of the nextauthenticate(String)call. - All other platforms (desktop deploy, JavaScript, ...) -- this base
class is returned as-is and acts as a non-supporting fallback:
isSupported()/canAuthenticate()returnfalseandauthenticate(String)completes withBiometricError.NOT_AVAILABLE. Application code does not need platformifstatements -- always gate biometrics oncanAuthenticate()before invoking the prompt.
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionPrompts the user to authenticate.authenticate(String reason) Convenience forauthenticate(new AuthenticationOptions().setReason(reason)).booleanReturnstruewhen the device is ready to authenticate right now: hardware present, at least one biometric enrolled, and not in a locked-out state.Lists the biometric modalities currently enrolled.static BiometricsReturns the platform-specific singleton owned by the current port.booleanReturnstruewhen biometric hardware exists on the device, regardless of whether the user has enrolled biometrics.booleanCancels an in-flightauthenticate(AuthenticationOptions)call if one is running.
-
Constructor Details
-
Biometrics
protected Biometrics()Subclasses are constructed by the port. Application code obtains the active instance viagetInstance().
-
-
Method Details
-
getInstance
Returns the platform-specific singleton owned by the current port. On ports that do not implement biometrics this returns a baseBiometricsinstance whose methods report the device as unsupported, so calling code never needs anullcheck or a platform-specificif. -
isSupported
public boolean isSupported()Returnstruewhen biometric hardware exists on the device, regardless of whether the user has enrolled biometrics. Combine withcanAuthenticate()to gate UI affordances: show the "Use biometrics" toggle whenisSupported()is true, but only invokeauthenticate(AuthenticationOptions)whencanAuthenticate()is also true. Returnsfalseon the fallback base class. -
canAuthenticate
public boolean canAuthenticate()Returnstruewhen the device is ready to authenticate right now: hardware present, at least one biometric enrolled, and not in a locked-out state. Returnsfalseon the fallback base class. -
getAvailableBiometrics
Lists the biometric modalities currently enrolled. On iOS this is
BiometricType.FINGERPRINTorBiometricType.FACE; on Android the list may containBiometricType.IRISas well, and Android API 30+ addsBiometricType.STRONG/BiometricType.WEAKauthenticator class tags.Returns
an empty list when nothing is enrolled or the device is unsupported
-
authenticate
Prompts the user to authenticate. The returned
AsyncResourcecompletes withtrueon success, or with aBiometricExceptionon failure (consultBiometricException.getError()for the typed code). On the fallback base class this completes immediately withBiometricError.NOT_AVAILABLEso callers don't need to platform- check before invoking.Parameters
opts: non-null configuration;AuthenticationOptions.setReason(String)should be set
-
authenticate
Convenience forauthenticate(new AuthenticationOptions().setReason(reason)). -
stopAuthentication
public boolean stopAuthentication()Cancels an in-flight
authenticate(AuthenticationOptions)call if one is running. The pendingAsyncResourcecompletes withBiometricError.USER_CANCELED.Returns
truewhen a call was cancelled;falsewhen no authentication was pending. Alwaysfalseon the fallback base class.
-