代码之家  ›  专栏  ›  技术社区  ›  Blazej SLEBODA

如何使用TouchIDAuthenticationAllowableReuseducation

  •  1
  • Blazej SLEBODA  · 技术社区  · 6 年前

    我做错什么了?


    import LocalAuthentication
    
    class AccessControl {
    
        internal var context = LAContext()
        private var policy: LAPolicy = .deviceOwnerAuthentication
        private var reason: String = NSLocalizedString("auhenticationLocalizedFallbackTitle", comment: "")
    
        init() {
            context.touchIDAuthenticationAllowableReuseDuration = 240
        }
    
        func evaluateUserWithBiometricsOrPasscode(success: @escaping () -> Void, error: @escaping () -> Void) {
    
            guard context.canEvaluatePolicy(policy, error: nil) else {
                error()
                return
            }
            context.evaluatePolicy(policy, localizedReason: reason) { eStatus, eError in
                DispatchQueue.main.async {
                    if eStatus {
                        success()
                    } else {
                        error()
                    }
                }
            }
        }
    
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   rushisangani    6 年前

    你需要用同样的 LAContext 每次都反对这种行为。

    class AccessControl {
    
        // MARK: - Singleton
        public static let shared = AccessControl()
    
        // Policy
        private var policy: LAPolicy = .deviceOwnerAuthentication
    
        // Reason
        private var reason: String = NSLocalizedString("auhenticationLocalizedFallbackTitle", comment: "")
    
        // Context
        lazy var context: LAContext = {
            let mainContext = LAContext()
            if #available(iOS 9.0, *) {
                // specify your interval
                mainContext.touchIDAuthenticationAllowableReuseDuration = 60
            }
            return mainContext
        }()
    
    
        // Evaluate
        func evaluateUserWithBiometricsOrPasscode(success: @escaping () -> Void, error: @escaping () -> Void) {
    
            guard context.canEvaluatePolicy(policy, error: nil) else {
                error()
                return
            }
            context.evaluatePolicy(policy, localizedReason: reason) { eStatus, eError in
                DispatchQueue.main.async {
                    if eStatus {
                        success()
                    } else {
                        error()
                    }
                }
            }
        }
    }
    

    这对 FaceID身份验证 也。

    AccessControl.shared.evaluateUserWithBiometricsOrPasscode(success: {
    
    }) {
    
    }