Я хочу интегрировать TouchID в свое приложение. Основываясь на истинном отпечатке пальца, я позволю пользователю аутентифицироваться/не аутентифицироваться. Для этого, в viewWillAppear моего ViewController, я написал следующий код:Как подождать TouchID, пока он не закончится?
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
if ([AppConfig getSettingWithKey:APP_TOKEN_KEY] != nil){
if ([AppConfig getIsTouchIDPreferred] == PREFERRED){
BOOL shouldAuthenticate: [MyTouchIDClass authenticateWithFingerPrint];
if (shouldAuthenticate == YES){
//normal flow
}
}
}
}
Здесь authenticateWithFingerPrint делает основную работу и его код:
LAContext *context = [[LAContext alloc] init];
NSError *error = nil;
__block BOOL toBeReturned = NO;
if([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]){
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
localizedReason:@"Are you the device owner?"
reply:^(BOOL success, NSError *error) {
if(error){
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
message:@"There was a problem verifying your identity."
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alert show];
return;
}
if(success){
toBeReturned = YES;
return;
} else {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
message:@"You are not the device owner."
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alert show];
return;
}
}];
} else {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
message:@"Your device cannot authenticate using TouchID."
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alert show];
}
return toBeReturned;
Однако, проблема заключается в том, что если блок метода viewWillAppear не ждет метода authenticateWithFingerPrint и возвращает false, это означает, что даже если пользователь входит в систему, она не будет аутентифицирована.
Итак, как сделать, если блок ожидает аутентификацииWithFingerPrint?
Спасибо :)