系统指纹登录识别--Touch ID

一、import引入的framework

import LocalAuthentication

二、验证是否支持Touch ID

let deviceType = LAPolicy.deviceOwnerAuthenticationWithBiometrics
        // 单纯指纹或FaceID,LAPolicyDeviceOwnerAuthentication会有密码验证
        let context = LAContext()
        
        var error: NSError?
        let isSupport = context.canEvaluatePolicy(deviceType, error: &error)

三、指纹识别

context.evaluatePolicy(deviceType, localizedReason: desc ?? message) { success, error in
            if success == true {
                DispatchQueue.main.async {
                    block(.success, nil)
                }
            } else {
                let state = authFail(error: error)
                DispatchQueue.main.async {
                    block(state, error)
                }
            }
        }

四、错误状态

private static func authFail(error: Error?) -> GXTouchIDState {
        guard let c = error as? NSError else {
            return .notSupport
        }
        let cc = LocalAuthentication.LAError.Code.init(rawValue: c.code)
        var state: GXTouchIDState = .fail
        switch cc {
        case LocalAuthentication.LAError.authenticationFailed:
            print("授权失败")
            state = .fail
        case LocalAuthentication.LAError.userCancel:
            print("用户取消验证Touch ID")
            state = .userCancel
        case LocalAuthentication.LAError.userFallback:
            print("用户选择输入密码,切换主线程处理")
            state = .inputPassword
            
        case LocalAuthentication.LAError.systemCancel:
            print("系统取消授权,如其他APP切入")
            state = .systemCancel
            
        case LocalAuthentication.LAError.passcodeNotSet:
            print("系统未设置密码")
            state = .passwordNotSet
        case LocalAuthentication.LAError.biometryNotAvailable:
            print("设备Touch ID不可用,例如未打开")
            state = .touchIDNotAvailable
        case LocalAuthentication.LAError.biometryNotEnrolled:
            print("设备Touch ID不可用,用户未录入")
            state = .touchIDNotSet
        
        default:
            print("其他情况,切换主线程处理")
        }
        return state
    }

五、判断是否有面容识别

public static func haveFaceID() -> Bool {
        var haveFaceID = false
        let myContext = LAContext()
        if myContext.biometryType == .touchID {
            
        } else if myContext.biometryType == .faceID {
            haveFaceID = true
        }
        return haveFaceID
    }

猜你喜欢

转载自blog.csdn.net/guoxulieying/article/details/132479156
id
今日推荐