Я работаю над интеграцией поддержки Touch ID в приложение, над которым работаю. Однако действует очень непоследовательно. Одна из распространенных проблем, с которыми я сталкиваюсь, заключается в том, что при новом запуске приложения оно работает, как и ожидалось, но затем при фоновом запуске приложения и выводе его на передний план я получаю сообщение об ошибке от
evaluatePolicy:localizedReason:reply:
Это даже не имеет большого смысла (я никогда не вижу оповещения о касании)
Error Domain=com.apple.LocalAuthentication Code=-1004 "User interaction is required." UserInfo=0x171470a00 {NSLocalizedDescription=User interaction is required.}
Я пытался представить предупреждение touchid, когда приложение уже запущено, когда оно только что выведено на передний план, похоже, это не имеет значения. Он ломается каждый раз после первоначального запуска приложения.
Кто-нибудь еще сталкивается с этим?
Для справки, вот код, который я использую:
if (_useTouchId && [LAContext class]) {
LAContext *myContext = [[LAContext alloc] init];
NSError *authError = nil;
if ([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError]) {
_didPresentTouchId = YES;
[myContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"Use your Touch ID to open *****" reply:^(BOOL success, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^ {
if (success) {
_isClosing = YES;
[self hide];
if (_successBlock) {
_successBlock();
}
}
else if (error && error.code != -2 && error.code != -3 && error.code != -1004) {
[[[UIAlertView alloc] initWithTitle:@"Error" message:@"Authentication failed, please enter your Pin" delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:nil] show];
}
else {
if (error) {
DDLogError(@"TouchID error: %@", error.description);
}
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, .6 * NSEC_PER_SEC), dispatch_get_main_queue(), ^ {
[self keyboardButtonTouched];
});
}
});
}];
}
}