Включен Touch ID и Face ID в приложении

Как мы узнаем, что приложение уже включило сенсорный или лицевой идентификатор? Прямо сейчас я использую CocoPod для биометрической аутентификации, чтобы интегрировать это.

Заранее спасибо


person Ammu    schedule 07.08.2018    source источник


Ответы (1)


Вы можете использовать LocalAuthentication с LAContext, он выполнит свою работу и расскажет вам все, что вы хотите знать о состоянии биометрии устройства. Вы можете использовать этот одноэлементный класс в качестве отправной точки:

import LocalAuthentication

final public class BiometryManager {
    public typealias SuccessComplition = () -> Void
    public typealias ErrorComplition = (Error?) -> Void

    public static let shared = BiometryManager()
    private let context = LAContext()

    private init() { }

    public var biometryType: LABiometryType {
        var error: NSError?

        guard context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) else {
            return LABiometryType.LABiometryNone
        }

        return context.biometryType
    }

    public func authenticate(successComplition: @escaping SuccessComplition, errorComplition: @escaping ErrorComplition) {
        var error: NSError?
        let reasonString = "provide reason text"

        guard context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) else {
            errorComplition(error)
            return
        }

        context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: reasonString, reply: { (success, evalPolicyError) in
            DispatchQueue.main.async {
                if success {
                    successComplition()
                } else {
                    errorComplition(evalPolicyError)
                }
            }
        })
    }
}

Этот класс доступен с iOS 11, и он расскажет вам о биометрическом типе устройства, и вы также можете вызвать метод аутентификации. Если он возвращает ошибку, вы можете преобразовать ее в LAError и получить от нее более конкретные коды ошибок. Надеюсь, поможет.

Взгляните на: https://developer.apple.com/documentation/localauthentication/laerror

Вы можете добавить это свойство в класс выше, чтобы проверить доступность биометрии:

public var isAvailable: Bool {
    var error: NSError?

    if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) {return true}

    guard let laError = error as? LAError else {return false}

// Check the laError.code, maybe its locked or something else and make specific decision
}
person shota    schedule 07.08.2018
comment
Хороший, хотя ... Меня больше беспокоит, как узнать, включено ли мое приложение с помощью сенсорного или лицевого идентификатора - person Ammu; 07.08.2018