public class Biometrics
- Object
- 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) andFingerprintManagerCompaton API 23-28. Fingerprint, face, and iris modalities are reported perPackageManagerfeatures. The legacy path goes through the support library rather thanandroid.hardware.fingerprintdirectly, which Android removed in API 37, so an app compiled against any platform still authenticates on an API 23-28 device. - 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.
Constructors
protected Biometrics() | Subclasses are constructed by the port. |
Methods
public static Biometrics getInstance() | Returns the platform-specific singleton owned by the current port. |
public boolean isSupported() | Returns true when biometric hardware exists on the device, regardless of whether the user has enrolled biometrics. |
public boolean canAuthenticate() | Returns true when the device is ready to authenticate right now: hardware present, at least one biometric enrolled, and not in a locked-out state. |
public List<BiometricType> getAvailableBiometrics() | Lists the biometric modalities currently enrolled. |
public AsyncResource<Boolean> authenticate(AuthenticationOptions opts) | Prompts the user to authenticate. |
public AsyncResource<Boolean> authenticate(String reason) | Convenience for authenticate(new AuthenticationOptions().setReason(reason)). |
public boolean stopAuthentication() | Cancels an in-flight authenticate(AuthenticationOptions) call if one is running. |
Inherited methods
Constructor details
Biometrics
protected Biometrics()Subclasses are constructed by the port. Application code obtains the
active instance via
getInstance().Method details
getInstance
public static Biometrics getInstance()Returns the platform-specific singleton owned by the current port.
On ports that do not implement biometrics this returns a base
Biometrics instance whose methods report the device as
unsupported, so calling code never needs a null check or a
platform-specific if.isSupported
public boolean isSupported()Returns
true when biometric hardware exists on the device,
regardless of whether the user has enrolled biometrics. Combine with
canAuthenticate() to gate UI affordances: show the “Use
biometrics” toggle when isSupported() is true, but only invoke
authenticate(AuthenticationOptions) when canAuthenticate() is
also true. Returns false on the fallback base class.canAuthenticate
public boolean canAuthenticate()Returns
true when the device is ready to authenticate right now:
hardware present, at least one biometric enrolled, and not in a
locked-out state. Returns false on the fallback base class.getAvailableBiometrics
public List<BiometricType> getAvailableBiometrics()Lists the biometric modalities currently enrolled. On iOS this is
BiometricType.FINGERPRINT or BiometricType.FACE; on Android the
list may contain BiometricType.IRIS as well, and Android API 30+
adds BiometricType.STRONG / BiometricType.WEAK authenticator
class tags.Returns
an empty list when nothing is enrolled or the device is unsupported
authenticate
public AsyncResource<Boolean> authenticate(AuthenticationOptions opts)Prompts the user to authenticate. The returned
AsyncResource
completes with true on success, or with a BiometricException on
failure (consult BiometricException.getError() for the typed code).
On the fallback base class this completes immediately with
BiometricError.NOT_AVAILABLE so callers don’t need to platform-
check before invoking.Parameters
optsAuthenticationOptions- non-null configuration;
AuthenticationOptions.setReason(String)should be set
authenticate
public AsyncResource<Boolean> authenticate(String reason)Convenience for
authenticate(new AuthenticationOptions().setReason(reason)).stopAuthentication
public boolean stopAuthentication()Cancels an in-flight
authenticate(AuthenticationOptions) call if
one is running. The pending AsyncResource completes with
BiometricError.USER_CANCELED.Returns
true when a call was cancelled; false when no authentication was
pending. Always false on the fallback base class.