Swift/iOS - Touch ID

作者: 燃烧的大叔 | 来源:发表于2016-11-29 12:48 被阅读51次

指纹技术是苹果2013年在iPhone5s(iOS7)上开始应用的。iOS7是不允许开发人员来使用TouchAPI来验证自己的应用程序。
iOS8开始,苹果陆续开放了Touch ID公共API。TouchID的使用时“本地”的一个验证,框架给我们提供了提示用户进行身份验证的方法。我们可以使用它来认证登录,或授权访问安全敏感信息的应用程序。
我们要使用的是Local Authentication framework。
我们是直接获取TouchID来做的,很多APP都是有开关来控制,是否用TouchID来登录或者打开APP。

    // 进行验证
    func authenticateWithTouchID()
    {
        // 获取context
        let localAuthContext = LAContext.init()
        let reasonText = "使用TouchID登录"
    
        var authError: NSError?
        // 先判断是否之前不允许
        if !localAuthContext.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &authError)
        {
            if let error = authError
            {
                print(error.localizedDescription)
            }
            //  不允许就在这里弹出、推出登录界面等操作
            OperationQueue.main.addOperation({
                let alterViewController = UIAlertController.init(title: "提示",
                                                                 message: "请在这里进行错误提示",
                                                                 preferredStyle: .alert)
                let actionCancel = UIAlertAction.init(title: "取消",
                                                      style: .cancel,
                                                      handler: { (action:UIAlertAction) in})
                alterViewController.addAction(actionCancel)
                self.present(alterViewController, animated: true, completion: nil)
            })
            
            return
        }
        
        localAuthContext.evaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics,
                                        localizedReason: reasonText,
                                        reply: {(success:Bool, error:Error?) -> Void in
            if !success
            {
                if let error = error {
                    switch error {
                    case LAError.authenticationFailed:
                        print("授权失败")
                    case LAError.passcodeNotSet:
                        print("没有设置")
                    case LAError.systemCancel:
                        print("验证被系统取消")
                    case LAError.userCancel:
                        print("验证被用户取消")
                    case LAError.touchIDNotEnrolled:
                        print("验证无法开启,没有登记的手指认证ID")
                    case LAError.touchIDNotAvailable:
                        print("验证无法开启,TouchID不可用")
                    case LAError.userFallback:
                        // 用户点击了取消按钮,要进行登录/输入密码等操作
                        // 在错误列表都应该输入密码来进行操作
                        // 点击输入密码也是进入这里
                        print("用户取消了操作")
                    default:
                        print(error.localizedDescription)
                    }
                }
                // 失败在这里弹出、推出登录界面
                OperationQueue.main.addOperation({
                    let alterViewController = UIAlertController.init(title: "提示",
                                                                     message: "获取失败/错误提示",
                                                                     preferredStyle: .alert)
                    let actionCancel = UIAlertAction.init(title: "取消",
                                                          style: .cancel,
                                                          handler: { (action:UIAlertAction) in})
                    alterViewController.addAction(actionCancel)
                    
                    self.present(alterViewController, animated: true, completion: nil)
                })
            }
            else
            {
                // 允许并且成功就在这里进行操作
                OperationQueue.main.addOperation({
                    let alterViewController = UIAlertController.init(title: "提示",
                                                                     message: "成功就在这里进行操作",
                                                                     preferredStyle: .alert)
                    let actionCancel = UIAlertAction.init(title: "取消",
                                                          style: .cancel,
                                                          handler: { (action:UIAlertAction) in})
                    alterViewController.addAction(actionCancel)
                    
                    self.present(alterViewController, animated: true, completion: nil)
                })
            }
        })
    }
195D45996A3B63E3C4AD4EC0E7D2E1DD.png

这里是苹果的pdf文档:iOS_Security_Guide_Oct_2014

相关文章

  • Swift/iOS - Touch ID

    指纹技术是苹果2013年在iPhone5s(iOS7)上开始应用的。iOS7是不允许开发人员来使用TouchAPI...

  • iOS Touch ID

    附:我的博客地址

  • iOS Touch ID

    iOS Touch ID 支持系统和机型 iOS系统的指纹识别功能最低支持的机型为iPhone 5s,最低支持系统...

  • iOS Touch ID

    iOS 8 SDK向开发者公开了Touch ID指纹识别功能,允许App对用户身份进行本地验证。使用Touch I...

  • iOS Touch ID

    iOS指纹解锁这个需求在一些软件上可能会有需要,比如支付宝的指纹解锁之类的。前几天有个?友问这个,正好看了一下。很...

  • 初级_iOS Touch ID

    iPhone5以上设备不支持Touch ID,iPhone5s并且iOS 8 SDK开始支持Touch ID。 配...

  • iOS Touch ID 开发

    Touch ID Touch ID是iPhone5S后加入的一项新的功能,也就是大家熟知的指纹识别技术。大家用得最...

  • iOS Touch ID及Face ID

    最近项目中需要使用Touch ID以及Face ID来进行登录验证,以前没遇到过,所以在此写篇文章记录了一下。 T...

  • 【iOS】Touch ID 和Face ID

    Touch ID 和Face ID识别

  • iOS TouchID 认证(仅限设备支持指纹识别)

    iOS 8的SDK开放了Touch ID的接口.从WWDC的视频中可以看到Touch ID应用在两个方面:用于Ke...

网友评论

    本文标题:Swift/iOS - Touch ID

    本文链接:https://www.haomeiwen.com/subject/uayapttx.html