Когда я нажимаю «Отмена» в подсказке TouchID, подсказка исчезает и мгновенно появляется снова ... Мой метод биометрии вызывается из ViewDidLoad, я добавляю NSLog внутри ViewDidLoad, и он вызывается, когда я закрываю диалоговое окно TouchID. Я посмотрел и попробовал несколько примеров реализации TouchID, но все они приводят к одному и тому же результату.
- (void)useBiometrics{
LAContext* context = [[LAContext alloc] init];
NSError* error = nil;
NSString* result = @"Use Touch ID to login";
if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:result reply:^(BOOL success, NSError *error) {
if (success) {
dispatch_async(dispatch_get_main_queue(), ^{
UIStoryboard *storyboard=[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
LoginViewController *loginController = [storyboard instantiateViewControllerWithIdentifier:@"ViewControllerROOTIdentifier"];
[self.navigationController pushViewController:loginController animated:NO];
FROM_LOGIN = YES;
NEEDS_LOGIN = FALSE;
});
}
else
{
switch (error.code) {
case LAErrorSystemCancel:
{
break;
}
case LAErrorUserCancel:
{
NSLog(@"TouchID canceled");
break;
}
case LAErrorAuthenticationFailed:
{
break;
}
case LAErrorPasscodeNotSet:
{
break;
}
case LAErrorBiometryNotAvailable:
{
break;
}
case LAErrorBiometryNotEnrolled:
{
break;
}
case LAErrorUserFallback:
{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
}];
break;
}
default:
{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
}];
break;
}
}
}
}];
}
else
{
switch (error.code) {
case LAErrorBiometryNotEnrolled:
{
break;
}
case LAErrorPasscodeNotSet:
{
NSLog(@"A passcode has not been set");
break;
}
default:
{
NSLog(@"TouchID not available");
break;
}
}
}
}