Почему я не могу отклонить запрос Touch ID? - PullRequest
0 голосов
/ 30 сентября 2019

Я создал экран входа в систему и хочу, чтобы пользователи могли проходить аутентификацию с использованием биометрии. Я могу получить диалоговое окно TouchID / FaceID, но не могу закрыть его, нажав кнопку «Отмена». Он исчезает на мгновение, а затем снова появляется. Есть ли простой способ выяснить, что является причиной этого. Большое спасибо.

ОБНОВЛЕНИЕ: после проверки ошибок я получаю в журнале следующее:

Domain = com.apple.LocalAuthentication Code = -4 "Отменено другой аутентификацией."

Код:

@interface LoginViewController ()
@property (nonatomic, strong) LAContext *context;

@end

@implementation LoginViewController

- (LAContext *)context {
    if (_context == nil) {
        _context = [LAContext new];
    }
    return _context;
}
- (void)viewDidLoad {
    [super viewDidLoad];

    NSError *error;

    BOOL canAuthentication = [self.context canEvaluatePolicy:LAPolicyDeviceOwnerAuthentication error:&error];

    if (canAuthentication) {


        [self.context evaluatePolicy:LAPolicyDeviceOwnerAuthentication localizedReason:@"FaceID" reply:^(BOOL success, NSError * _Nullable error) {
            if (success) {
                UIAlertController *alearC = [UIAlertController alertControllerWithTitle:@"Success" message:nil preferredStyle:UIAlertControllerStyleAlert];
                [alearC addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
                }]];
                [self presentViewController:alearC animated:YES completion:nil];

            } else {
                NSLog(@"error%@",error);
            }
        }];
    }
}

1 Ответ

0 голосов
/ 01 октября 2019

Причина этого часто заключается в том, что сканер отпечатков пальцев все еще занят предыдущей операциейg. Не похоже, что вы использовали cancellationSignal.cancel или если у вас есть, вероятно, не срабатывает. Каждый раз, когда Сканер завершает работу, вы должны отправить сигнал с помощью cancellationSignal.cancel, чтобы сообщить, что сканер выполнил свою работу.

Например, если задача не выполнена, она будет выглядеть так:

text_state.setText(context.getString(R.string.fingerFailure));
cancellationSignal.cancel();

попробуйте добавить cancellationSignal.cancel() выше или ниже этого

[self presentViewController:alearC animated:YES completion:nil];

, а также при необходимости в блоке else.

Дайте мне знать, если это решит вашу проблемуесли нет, я посмотрю на это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...