iOS 开发之Touch ID功能实现

摘要

由于新项目马上启动,看了下需求文档,其中,可能会用到Touch ID或Face ID技术实现支付功能,于是,现做一些技术准备,把学习Touch ID方面的知识做个总结,待真正开发时,应用上去。


开发步骤
首先,touchId功能,用到了苹果自带的LocalAuthentication框架。具体开发步骤如下:

  • 判断手机是否支持TouchID功能。
    LAContext.init().canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error)
  • 判断验证指纹密码是否成功等
    LAContext.init().evaluatePolicy(policy: ***, localizedReason: ***, reply: ***)
    它有多个结果 ,如下:
let code = ((eror as NSError?)?.code as? Int32 ) ?? 0
      switch code {
            case kLAErrorSystemCancel:
                 print("系统取消授权,如其他APP切入")
            case kLAErrorUserCancel:
                 print("用户取消验证Touch ID")
            case kLAErrorAuthenticationFailed:
                 print("授权失败")
            case kLAErrorPasscodeNotSet:
                 print("系统未设置密码")
            case kLAErrorTouchIDNotAvailable:
                 print("设备Touch ID不可用,例如未打开")
            case kLAErrorTouchIDNotEnrolled:
                 print("设备Touch ID不可用,用户未录入")
            case kLAErrorUserFallback:
                 DispatchQueue.main.async {
                      print("用户选择输入密码,切换主线程处理")
                 }
           default:
                 DispatchQueue.main.async {
                     print("其他情况,切换主线程处理")
        }
   }

测试写的demo如下:
封封装成一个工具类

/// 指纹识别技术
import UIKit
import LocalAuthentication

class XYJTouchIDTool: NSObject {
    
    static let shareTool = LAContext.init()
    
    override init() {
        super.init()
    }
    
    ///
    func openTouchIdFunction() {
        var error: NSError?
        let version = UIDevice.current.systemVersion as NSString
        // iOS 8及以上版本执行-(void)authenticateUser方法,方法自动判断设备是否支持和开启Touch ID
        if version.doubleValue > 8.0 {
            // Evaluate: 评估,评价
            // policy: 政策,方法
            // 判断是否可以使用TouchID
            let canUseTouchID = XYJTouchIDTool.shareTool.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error)
            if canUseTouchID {
                print("你的设备开启了指纹验证功能");
                XYJTouchIDTool.shareTool.evaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, localizedReason: "这个一般用来描述请求用户提供指纹进行验证的文本提示内容,该内容提示用户为什么需要使用指纹验证的内容---如:利用他解锁(支付)", reply: { (result, eror) in
                    if result == true { // 判断验证是否成功
                        print("验证成功")
                    } else {
                        let code = ((eror as NSError?)?.code as? Int32 ) ?? 0
                        switch code {
                            case kLAErrorSystemCancel:
                                print("系统取消授权,如其他APP切入")
                            case kLAErrorUserCancel:
                                print("用户取消验证Touch ID")
                            case kLAErrorAuthenticationFailed:
                                print("授权失败")
                            case kLAErrorPasscodeNotSet:
                                print("系统未设置密码")
                            case kLAErrorTouchIDNotAvailable:
                                print("设备Touch ID不可用,例如未打开")
                            case kLAErrorTouchIDNotEnrolled:
                                print("设备Touch ID不可用,用户未录入")
                            case kLAErrorUserFallback:
                                DispatchQueue.main.async {
                                    print("用户选择输入密码,切换主线程处理")
                                }
                            default:
                                DispatchQueue.main.async {
                                    print("其他情况,切换主线程处理")
                                }
                        }
                    }
                })
                
            } else {
                print("不支持指纹识别")
            }
        }
        
    }
    
    
}

你可能感兴趣的:(iOS 开发之Touch ID功能实现)