The context is needed to access the check for availability
public class Auth0Fingerprint implements FingerprintManager.AuthenticationCallback {
private final FingerprintManagerCompat manager;
public Auth0Fingerprint (Context context){
//Use the support version as it handles the missing APIs case
manager = new FingerprintManagerCompat(context);
}
//See below for the other methods
}
public static boolean checkPermission(Context context) {
int permissionCheck = ContextCompat.checkSelfPermission(context, Manifest.permission.USE_FINGERPRINT);
return permissionCheck == PackageManager.PERMISSION_GRANTED;
}
public static void requestPermission(Activity activity, int requestCode) {
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.USE_FINGERPRINT)) {
//Show explanation and retry.
//AlertDialog ...
} else {
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.USE_FINGERPRINT}, requestCode);
}
}
public boolean isAvailable() {
if (!manager.isHardwareDetected()){
throw new IllegalStateException("Fingerprint scanner not available.");
}
if (!manager.hasEnrolledFingerprints()){
throw new IllegalStateException("No fingerprints enrolled.");
}
return manager.isHardwareDetected() && manager.hasEnrolledFingerprints();
}
public boolean authenticate() {
return manager.authenticate(createCryptoObject(), new CancellationSignal(), this, null);
}
hay mucha implementación acá :)
que significa
boolean authenticate()
? que pasa si el usuario registra un nuevo dedo? sirve para realmente validar que el usuario es el que originalmente quiso proteger algo?para mi todo esto debería usarse para "guardar algo secreto" (si despues no lo queres usar esta bien, no pasa nada).
entonces authenticate, si todo esta bien, te devuelve "ese secreto que guardaste".
y puede ser cancelado o directamente fallar cuando no esta disponible.
hace falta un método
registerForAuthentication()
o algo asi que es que inicializa. es como que el usuario dice: