iOS接入锁屏密码、指纹、面容ID(FaceID) Swift以及例子代码

App内部需要验证系统的锁屏密码或者指纹和面容ID

1、首先导入本地验证库(LocalAuthentication)

import LocalAuthentication

2、验证是否设备是否支持指纹或FaceID

context.canEvaluatePolicy(.deviceOwnerAuthentication, error: nil)

3、若支持,则开始申请验证

若验证成功,则处理成功逻辑。

验证失败,看失败的原因,进行相应处理。

var error: NSError?
if context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &error) {

    let reason = "Log in to your account"
    context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: reason ) { success, error in

        if success {

            // Move to the main thread because a state update triggers UI changes.
            DispatchQueue.main.async { [unowned self] in
                self.state = .loggedin
            }

        } else {
            print(error?.localizedDescription ?? "Failed to authenticate")

            // Fall back to a asking for username and password.
            // ...
        }
    }
} else {
    print(error?.localizedDescription ?? "Can't evaluate policy")

    // Fall back to a asking for username and password.
    // ...
}

4、验证失败的原因(这个一般基本上都不会出现,所以直接都当错误处理了)

这是我自己写的错误部分,demo上并未体现。

func authFail(err: Error?) {

    if let c = err as NSError?{
        let cc = LocalAuthentication.LAError.Code.init(rawValue: c.code)
        switch(cc) {
            case LocalAuthentication.LAError.systemCancel:
                print("系统取消授权,如其他APP切入");
                break;
            case LocalAuthentication.LAError.userCancel:
                print("用户取消验证Touch ID");
                break;
            case LocalAuthentication.LAError.authenticationFailed:
                print("授权失败");
                break;
            case LocalAuthentication.LAError.passcodeNotSet:
                print("系统未设置密码");
                break;
            case LocalAuthentication.LAError.biometryNotAvailable:
                print("设备Touch ID不可用,例如未打开");
                break;
            case LocalAuthentication.LAError.biometryNotEnrolled:
                print("设备Touch ID不可用,用户未录入");
                break;
            case LocalAuthentication.LAError.userFallback:
                print("用户选择输入密码,切换主线程处理");
                break;
            default:
                print("其他情况,切换主线程处理");
                break;
        }
    }
}

5、苹果官方完整示例代码

https://download.csdn.net/download/wangkunggxx/87391697

猜你喜欢

转载自blog.csdn.net/wangkunggxx/article/details/128729057