I had written the following code snippet
if ([contextNew canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error])
{
[contextNew evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:NSLocalizedString(@"",nil) reply:^(BOOL success, NSError *error)
{
if(success)
{
}
else
{
}
}
}
it comes in sucess block after verification of face.I want to handle face id permission alert. I want to get the Yes or permission granted method for face id . As we get something like AVAuthorizationStatus for camera
Make sure that your face isn't blocked Make sure that your eyes, nose, and mouth are fully visible to the TrueDepth camera. By default, Face ID doesn't work if anything is covering your mouth and nose. If you're wearing a face mask and have already set up Face ID with a mask,* make sure that your eyes aren't blocked.
To reset Face ID on your iPhone: Go to Settings > Face ID & Passcode > Reset Face ID. Restart your iPhone. Go to Settings > Face ID & Passcode and complete the setup process again.
Not sure, will this solve your problem or not, but I've following options to detect LAAuthentication
Error type (in Swift, you need to convert it into Objective-C)
laContext.evaluatePolicy(biometricsPolicy, localizedReason: localizedReason, reply: { (isSuccess, error) in
if let laError = error {
// handle error
self.showLAError(laError: laError)
} else if isSuccess {
// handle success
}
})
// function to detect an error type
func showLAError(laError: Error) -> Void {
var message = ""
switch laError {
case LAError.appCancel:
message = "Authentication was cancelled by application"
case LAError.authenticationFailed:
message = "The user failed to provide valid credentials"
case LAError.invalidContext:
message = "The context is invalid"
case LAError.passcodeNotSet:
message = "Passcode is not set on the device"
case LAError.systemCancel:
message = "Authentication was cancelled by the system"
case LAError.touchIDLockout:
message = "Too many failed attempts."
case LAError.touchIDNotAvailable:
message = "TouchID is not available on the device"
case LAError.userCancel:
message = "The user did cancel"
case LAError.userFallback:
message = "The user chose to use the fallback"
default:
if #available(iOS 11.0, *) {
switch laError {
case LAError.biometryNotAvailable:
message = "Biometry is not available"
case LAError.biometryNotEnrolled:
message = "Authentication could not start, because biometry has no enrolled identities"
case LAError.biometryLockout:
message = "Biometry is locked. Use passcode."
default:
message = "Did not find error code on LAError object"
}
}
message = "Did not find error code on LAError object"
}
//return message
print("LAError message - \(message)")
}
Here is list of all types of LAError for Objective-C
Here is working Objective-C code. Try this and see:
LAContext *laContext = [[LAContext alloc] init];
NSError *error;
if ([laContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
if (error != NULL) {
// handle error
//[self showError:error];
} else {
if (@available(iOS 11.0.1, *)) {
if (laContext.biometryType == LABiometryTypeFaceID) {
//localizedReason = "Unlock using Face ID"
NSLog(@"FaceId support");
} else if (laContext.biometryType == LABiometryTypeTouchID) {
//localizedReason = "Unlock using Touch ID"
NSLog(@"TouchId support");
} else {
//localizedReason = "Unlock using Application Passcode"
NSLog(@"No Biometric support");
}
} else {
// Fallback on earlier versions
}
[laContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"Test Reason" reply:^(BOOL success, NSError * _Nullable error) {
if (error != NULL) {
// handle error
} else if (success) {
// handle success response
} else {
// handle false response
}
}];
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With