如何使用 touchIDAuthenticationAllowableReuseDuration

Posted

技术标签:

【中文标题】如何使用 touchIDAuthenticationAllowableReuseDuration【英文标题】:How to use touchIDAuthenticationAllowableReuseDuration 【发布时间】:2018-12-05 10:52:20 【问题描述】:

当应用程序启动或何时进入前台时,我正在通过 LAContext 对用户进行身份验证。如果设备被锁定,则用户将被要求两次授权。为了避免这种行为,我将 context.touchIDAuthenticationAllowableReuseDuration 值设置为 240,但它没有按预期工作。用户仍然需要授权自己两次。 我做错了什么?


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】:

您需要每次都使用相同的 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: 

) 


【讨论】:

以上是关于如何使用 touchIDAuthenticationAllowableReuseDuration的主要内容,如果未能解决你的问题,请参考以下文章

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?

WSARecv 如何使用 lpOverlapped?如何手动发出事件信号?