На iOS 13 предупреждение о биометрической аутентификации не отображается на старых телефонах - PullRequest
3 голосов
/ 02 октября 2019

На старых iPhone, таких как 6, 6 и т. Д. Диалог / оповещение о биометрической аутентификации скрыто. Если вы нажмете кнопку «Домой» на iPhone, чтобы подтвердить подлинность с помощью отпечатка пальца, он все равно будет работать, но диалог / предупреждение скрыто, что является источником путаницы для пользователей.

Различные источники ( 1 ) ( 2 ) сообщили об этом как об ошибке iOS 13.

Это работало правильно на iOS 12, проблема началась на iOS 13.

Мой биометрический код авторизациивыглядит так и запускается в методе viewDidAppear контроллера представления:

    let localAuthContext = LAContext()
    var error: NSError?
    if localAuthContext.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error) {
        localAuthContext.evaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, localizedReason: "SIGNIN.TITLE.Login".localized) { [weak self] (success, error) in
            if success {
                // success
            } else {
                // failure
            }
        }
    } else {
        // can't evaluate policy
    }

Итак, мне нужно что-то изменить в моем коде для iOS 13, или это проблема Apple?

Ответы [ 3 ]

2 голосов
/ 10 октября 2019

Кажется, проблема в обработке. Я исправил эту проблему, показав ее из основной очереди, поэтому она наверняка покажет задержку, но не останется скрытой.

DispatchQueue.main.async {

  if localAuthContext.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error) {
    localAuthContext.evaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, localizedReason: "SIGNIN.TITLE.Login".localized) { [weak self] (success, error) in
        if success {
            // success
        } else {
            // failure
        }
    }
  } else {
     // can't evaluate policy
  }

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

Кажется, это проблема Apple на старых версиях iOS 13. Я не могу воспроизвести эту проблему с iOS 13.1.2 и более поздних версий.

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

Это просто происходит с iOS 13 и выше. Решение пытается вызвать функцию оценки дважды, как показано ниже:

let systemVersion = UIDevice.current.systemVersion
// Trick here: Try to do an pre-evaluate
if systemVersion.compare("13.0", options: .numeric) != .orderedAscending {
    context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: "Authenticate to open the app", reply: { (_, _) in
         //Ignore callback here
     })
}

context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: "Authenticate to open the app", reply: { (success, error) in
    // Handle callback here
})

Протестировано и хорошо работает на всех версиях iOS 13.xx.

...