Ios 如何在我的应用程序中使用密码锁场景?

Ios 如何在我的应用程序中使用密码锁场景?,ios,swift,xcode,authentication,passcode,Ios,Swift,Xcode,Authentication,Passcode,实际上,我正在构建一个包含本地身份验证的应用程序 到目前为止,我的代码是: func authenticateUser() { let authenticationContext = LAContext() var error: NSError? let reasonString = "Touch the Touch ID sensor to unlock." // Check if the device can evaluate

实际上,我正在构建一个包含本地身份验证的应用程序

到目前为止,我的代码是:

func authenticateUser() {
        let authenticationContext = LAContext()
        var error: NSError?
        let reasonString = "Touch the Touch ID sensor to unlock."

        // Check if the device can evaluate the policy.
        if authenticationContext.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error) {

            authenticationContext.evaluatePolicy( .deviceOwnerAuthenticationWithBiometrics, localizedReason: reasonString, reply: { (success, evalPolicyError) in

                if success {
                    print("success")
                } else {
                    if let evaluateError = error as NSError? {
                        // enter password using system UI 
                    }

                }
            })

        } else {
            print("toch id not available")
           // enter password using system UI
        }
    }
我的问题是,当应用程序没有触摸ID或无效指纹时,我想使用密码锁场景

如下图所示:


我该怎么做?

此时,恐怕您无法在应用程序中访问此密码锁屏幕,它与iOS本身有关。您可能需要构建自己的自定义视图控制器,使其看起来/表现为密码锁场景(使用触摸ID)。我建议使用一个库来实现这一点,就我个人而言,我已经尝试过了,而且对我来说效果很好。

您应该使用
.deviceOwnerAuthentication
而不是
.deviceOwnerAuthentication with biometrics
来评估策略。使用此参数,系统将使用生物特征认证(如果可用),否则将显示密码屏幕。如果生物特征认证可用但失败,则返回按钮将重定向到密码屏幕。见:

如果Touch ID或Face ID可用、已注册且未禁用,则会首先要求用户提供该ID。否则,将要求他们输入设备密码

点击回退按钮可切换身份验证方法,以询问用户设备密码

因此,您的代码将是:

func authenticateUser(){
让authenticationContext=LAContext()
var错误:N错误?
让reasonString=“触摸触摸ID传感器以解锁。”
//检查设备是否可以评估策略。
如果authenticationContext.CaneValuePolicy(LAPolicy.deviceOwnerAuthentication,错误:&错误){
authenticationContext.evaluatePolicy(.deviceOwnerAuthentication,localizedReason:reasonString,答复:{(成功,evalPolicyError)在中
如果成功{
打印(“成功”)
}否则{
//处理评估失败或取消
}
})
}否则{
打印(“未设置密码”)
}
}

我相信您应该可以通过使用钥匙链来实现这一点。可定制密码屏幕是否已被苹果接受@Shaqirsaied是的,我在多个应用程序中使用过它,这是可以接受的。希望有人能回答:我尝试过PasscodeLock,当我尝试自定义它时,似乎你必须从头开始。这是正确的,还是占位符视图应在所有按钮和标签就位的情况下加载?现在我使用的是SwiftPasscodeLock版本。所以密码将出现在//Handle evaluation failure或cancel place,对吗?这非常有效。对于使用此方法的任何人,请记住导入LocalAuthentication。