swift指纹解锁_swift 指纹登录 - CSDN
精华内容
参与话题
  • swift3.0 指纹解锁实现

    千次阅读 2017-03-27 18:02:35
    最近学习swift3.0, 不忙的时候开始用 swift 重写现有的项目,有些地方的写法变得让人不知道怎么写了,今天就分享一下我在重写 指纹解锁工具类的时候遇到的一些问题吧。

    最近学习swift3.0, 不忙的时候开始用 swift 重写现有的项目,有些地方的写法变得让人不知道怎么写了,今天就分享一下我在重写 指纹解锁工具类的时候遇到的一些问题吧。

    先展示一下成果

    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            TouchIdManager.touchIdWithHand(fallBackTitle: "", succeed: { 
                print("解锁成功")
            }) { (error) in
                print(error.localizedDescription) 
            }
    
            print(TouchIdManager.IsSupportTouchID)
    
        }
    }

    import LocalAuthentication
    class TouchIdManager {
    
        /// 指纹解锁
        ///
        /// - Parameters:
        ///   - fallBackTitle: Allows fallback button title customization. A default title "Enter Password" is used when
        ///             this property is left nil. If set to empty string, the button will be hidden
        ///   - succeed: 解锁成功的回调
        ///   - failed: 解锁失败的回调
        class func touchIdWithHand(fallBackTitle: String?, succeed: @escaping () -> (), failed: @escaping (_ error: LAError) -> ()) {
    
            guard self.IsSupportTouchID  else {
                print("设备不支持TouchID 或未开启TouchID ")
                return
            }
    
            let context = LAContext()
            context.localizedFallbackTitle = fallBackTitle
            let reason = "验证指纹,完成支付"
            context.evaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, localizedReason: reason, reply: { (isSuccess, err) in
    
                OperationQueue.main.addOperation({ 
    
                    guard isSuccess == true, err == nil else {
                        let laerror = err as! LAError
                        failed(laerror)
    //                    switch laerror.code {
    //                    case LAError.authenticationFailed: 
    //                        print("连续三次输入错误,身份验证失败。")
    //                    case LAError.userCancel: 
    //                        print("用户点击取消按钮。")
    //                    case LAError.userFallback: 
    //                        print("用户点击输入密码。")
    //                    case LAError.systemCancel: 
    //                        print("系统取消")
    //                    case LAError.passcodeNotSet: 
    //                        print("用户未设置密码")
    //                    case LAError.touchIDNotAvailable: 
    //                        print("touchID不可用")
    //                    case LAError.touchIDNotEnrolled: 
    //                        print("touchID未设置指纹")
    //                    default: break
    //                    }
    
                        return
                    }
                    succeed()
                })
            })
        }
    
        /// 检查手机 TouchID 功能是否开启或可以使用
        class var IsSupportTouchID: Bool {
            get {
                let context = LAContext()
                var error :NSError?
                let isSupport = context.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error)
                return isSupport
            }
        }    
    }
    

    在实现的时候主要遇到的问题是, 对 evaluatePolicy 方法中回调的 Error 值的处理;
    方法定义:
    func evaluatePolicy(_ policy: LAPolicy, localizedReason: String, reply: @escaping (Bool, Error?) -> Swift.Void)

    由于swift对参数类型严格校验,而 Error 是一个协议,它并没有 Error.code 的值来跟各种错误类型来对应;
    swift 2 中,我在这一块是这么写的

    switch LAError(rawValue: error!.code) {
    
                        case .Some(LAError.AuthenticationFailed):
                            print("连续三次输入错误,身份验证失败。")
                        case .Some(LAError.UserCancel):
                            print("用户点击取消按钮。")
                        case .Some(LAError.UserFallback):
                            print("用户点击输入密码。")
                        case .Some(LAError.SystemCancel):
                            print("系统取消")
                        case .Some(LAError.PasscodeNotSet):
                            print("用户未设置密码")
                        case .Some(LAError.TouchIDNotAvailable):
                            print("touchID不可用")
                        case .Some(LAError.TouchIDNotEnrolled):
                            print("touchID未设置指纹")
                        default:
                            break
                        }
    

    swift3 中取消了这种语法, 但是处理起来更简单了,可以将 Error 直接强转成 LAError 就行了

    let laerror = err as! LAError

    但是,有个疑问,我要怎么才能最快的知道 需要强转成什么类型呢? 有知道的 谢谢告知!

    如有疑问,欢迎评论交流!

    展开全文
  • 在一些APP中经常可以看到开启指纹免密支付,就自己弄了下, 代码如下 import UIKit import LocalAuthentication class ViewController: UIViewController {  override func ...

    在一些APP中经常可以看到开启指纹免密支付,就自己弄了下, 代码如下

    import UIKit

    import LocalAuthentication


    class ViewController: UIViewController {


        override func viewDidLoad() {

            super.viewDidLoad()

        }

        

        override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

            testTouchID()

        }

        

        fileprivate func testTouchID() {

            

            let context = LAContext()

            if #available(iOS 10.0, *) {

                context.localizedCancelTitle = "取消"

            } else {

                // Fallback on earlier versions

            }

            context.localizedFallbackTitle = "输入密码"

            

            var error: NSError?

            if context.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error) {

                print("支持使用")

                context.evaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, localizedReason: "通过指纹验证解锁", reply: { (success, error) in

                    if success {

                        print("验证成功")

                    } else {

                        /*

                         #define kLAErrorAuthenticationFailed           -1  授权失败

                         #define kLAErrorUserCancel                     -2  取消授权

                         #define kLAErrorUserFallback                   -3  用户选择了另一种方式,输入密码方式验证

                         #define kLAErrorSystemCancel                   -4  系统取消授权(例如其他APP切入)

                         #define kLAErrorPasscodeNotSet                 -5  系统未设置密码

                         #define kLAErrorTouchIDNotAvailable            -6  指纹不正确

                         #define kLAErrorTouchIDNotEnrolled             -7  设备Touch ID不可用,例如未打开

                         #define kLAErrorTouchIDLockout                 -8  TouchID被锁定

                         #define kLAErrorAppCancel                      -9  App取消验证

                         #define kLAErrorInvalidContext                     无效的上下文环境

                         */

                        let error: NSError = error! as NSError

                        if error.code == Int(kLAErrorAuthenticationFailed) {

                            print("授权失败,三次输入错误")

                        } else if (error.code == Int(kLAErrorUserCancel)) {

                            print("用户取消")

                        } else if (error.code == Int(kLAErrorUserFallback)) {

                            print("用户选择了另一种方式,输入密码方式验证")

                        } else if (error.code == Int(kLAErrorTouchIDNotAvailable)) {

                            print("指纹不正确")

                        } else if (error.code == Int(kLAErrorTouchIDLockout)) {

                            print("Touch ID被锁定,重新锁屏再开启即可")

                        } else {

                            print("支持~出错:" + "\(error)")

                        }

                    }

                })

            } else {

                print("不支持" + "\(String(describing: error))")

            }

        }

    }



    展开全文
  • iOS指纹解锁Swift

    千次阅读 2017-06-14 15:53:45
    iOS指纹解锁 Swift,几行代码就搞定

    几行代码,很简单
    上代码

    //新建一个NSObject
    import Foundation
    import LocalAuthentication
    
    class MyFinger: NSObject {
        @objc
        enum XWCheckResult: NSInteger {
            case success             //成功
            case failed              //失败
            case passwordNotSet      //未设置手机密码
            case touchidNotSet       //未设置指纹
            case touchidNotAvailable //不支持指纹
            case cancleSys           //系统取消
            case canclePer           //用户取消
            case inputNUm            //输入密码
        }
    
    
        static func userFigerprintAuthenticationTipStr(withtips tips:String, block : @escaping (_ result :XWCheckResult) -> Void){
               if #available(iOS 8.0, OSX 10.12, *) { //IOS 版本判断 低于版本无需调用
                let context = LAContext()//创建一个上下文对象
                var error: NSError? = nil//捕获异常
                if(context.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error)){//判断当前设备是否支持指纹解锁
                    //指纹解锁开始啦
                    context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason:tips, reply: { (success, error) in
                        if(success){
                            //进行UI操作
                            print("操作吧");
                        }else{
                            let laerror = error as! LAError
                            switch laerror.code {
                            case LAError.authenticationFailed:
                                print("连续三次输入错误,身份验证失败。")
                                block(XWCheckResult.failed)
                                break
                            case LAError.userCancel:
                                print("用户点击取消按钮。")
                                block(XWCheckResult.canclePer)
                                break
                            case LAError.userFallback:
                                print("用户点击输入密码。")
                                block(XWCheckResult.inputNUm)
                                break
                            case LAError.systemCancel:
                                print("系统取消")
                                block(XWCheckResult.cancleSys)
                                break
                            case LAError.passcodeNotSet:
                                print("用户未设置密码")
                                block(XWCheckResult.passwordNotSet)
                                break
                            case LAError.touchIDNotAvailable:
                                print("touchID不可用")
                                block(XWCheckResult.touchidNotAvailable)
                                break
                            case LAError.touchIDNotEnrolled:
                                print("touchID未设置指纹")
                                block(XWCheckResult.touchidNotSet)
                                break
                            default: break
                            }
                        }
                    })
    
                }else{
    
                    print("不支持");
                }
            }
        }
    }

    在你需要的地方调用就可以了

     func verify(){
    
            MyFinger.userFigerprintAuthenticationTipStr(withtips:"验证指纹") { (result:MyFinger.XWCheckResult) in
                switch result{
                case .success://情况没写全,需要的自己去看,我都列出来了
                    print("用户解锁成功")
                    break
                case .failed:
                    print("用户解锁失败")
                    break
                case .passwordNotSet:
                    print("未设置密码")
                    break
                case .touchidNotSet:
                    print("未设置指纹")
                    break
                case .touchidNotAvailable:
                    print("系统不支持")
                    break
                default:
                    break
    
                }
    
            }
    
        }
    
    展开全文
  • 主要为大家详细介绍了swift3.0指纹解锁的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • swift-集成touch id功能 指纹验证

    千次阅读 2016-11-09 13:54:02
    在这里写了一个指纹验证的类,公开了一个类方法来自定义输入提醒用户的内容,随时调用即可完成touch id验证功能 1 新建一个类文件: fingerUnlock继承于NSObject就可以 2 在这个文件中导入需要的系统框架  ...

    在这里写了一个指纹验证的类,公开了一个类方法来自定义输入提醒用户的内容,随时调用即可完成touch id验证功能

    1 新建一个类文件:

    fingerUnlock继承于NSObject就可以

    2 在这个文件中导入需要的系统框架 

    import LocalAuthentication

    3 直接粘代码就OK,下面这个方法是自己随便写的一个类方法  主要是为了输入提醒文字并验证

    class func userFigerprintAuthenticationTipStr(tipsStr: String) {

            let context = LAContext()

            var error: NSError?

            

            // 判断设备是否支持指纹解锁

            if context.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, error: &error) {

                context.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: tipsStr, reply: { (success, error) in

                    if success {

                        print("验证成功")

                    } else {

                        switch Int32(error!.code) {

                            // 身份验证失败

                            case kLAErrorAuthenticationFailed:

                                print("LAErrorAuthenticationFailed")

                            // 用户取消

                            case kLAErrorUserCancel :

                                print("kLAErrorUserCancel")

                                break

                            //验证失败

                            case kLAErrorUserFallback:

                                print("LAErrorUserFallback")

                                break;

                            // 被系统取消,例如按下电源键

                            case kLAErrorSystemCancel:

                                print("kLAErrorSystemCancel")

                                break;

                            // 设备上并不具备密码设置信息,也就是说Touch ID功能处于被禁用状态

                            case kLAErrorPasscodeNotSet:

                                print("kLAErrorPasscodeNotSet")

                                break;

                            // 设备本身并不具备指纹传感装置

                            case kLAErrorTouchIDNotAvailable:

                                print("kLAErrorTouchIDNotAvailable")

                                break;

                            // 已经设定有密码机制,但设备配置当中还没有保存过任何指纹内容

                            case kLAErrorTouchIDNotEnrolled:

                                print("kLAErrorTouchIDNotEnrolled")

                                break;

                            // 输入次数过多验证被锁

                            case kLAErrorTouchIDLockout:

                                print("kLAErrorTouchIDLockout")

                                break;

                            // app取消验证

                            case kLAErrorAppCancel:

                                print("LAErrorAppCancel")

                                break;

                            // 无效的上下文

                            case kLAErrorInvalidContext:

                                print("LAErrorAppCancel")

                                break;

                            default:

                            break

                        }

                    }

                })

            } else {

                print("您的设备不支持touch id")

            }

        }

    4 在需要用到touch id功能的地方调用就可以 例如:

    fingerUnlock.userFigerprintAuthenticationTipStr("请把输入指纹的手指放在Home键上")


    展开全文
  • Swift下调用Touch ID实现指纹识别

    千次阅读 2016-09-14 09:06:57
    如下代码是实现调用5S以上设备指纹识别的代码,按照官网给出的代码,会出现识别成功后很久才执行成功后调用的代码,逛了很久的,才知道要将其放入主线程实现才可以。具体代码如下。 1、引入类 import ...
  • 先附上demo地址https://github.com/Liuyubao/LYBTouchID,支持swift3.0+。 1、手势密码效果: 2、指纹密码效果: 3、faceID效果: 一、导包 本项目主要使用的是LocalAuthentication这个包。 二、...
  • 最近APP中需要加指纹解锁的功能,就是类似支付宝的指纹解锁,具体可以到支付宝操作一下,在此就不贴图了。首先,如果之前没做过指纹识别解锁的同学可以先看一下这篇文章,文章写得挺全面的: 点击打开链接直接贴...
  • TouchId指纹识别,FaceId面部解锁,统称为生物识别。 实现 引入Local Authentication Framework,如果是iOS 13,默认就有,不用重新引入。 引入头文件 import LocalAuthentication 检查生物识别是否可用 let ...
  • 我们在开发app指纹解锁和手势解锁时有需求:只要app启动时从后台进入前台就要弹出手势解锁界面或者指纹解锁界面。 在开发过程中我第一反应是使用applicationDidBecomeActive这个方法来判断app进入前台以及写入弹出...
  • iOS 指纹识别登录功能实现

    千次阅读 2020-08-03 10:06:49
    Touch ID是苹果公司的一种指纹识别技术,从iPhone 5s开始,早已为人们所熟知。 Touch ID不存储用户的任何指纹图像,只保存代表指纹的数字字符。苹果公司提供Touch ID给第三方应用程序使用,程序只会收到认证是否成功...
  • iOS 指纹解锁 检测指纹信息变更

    千次阅读 2018-05-12 22:33:48
    通过LAContext evaluatedPolicyDomainState属性可以获取到当前data类型的指纹信息数据,当指纹增加或者删除,该data就会发生变化,通过记录这个TouchIdData 做对比就能判断指纹信息是否变更,从而定制app功能。 ...
  • 在梳理支付宝指纹流程之前,先熟悉一下关于指纹解锁的知识。 指纹解锁的相关类位于 LocalAuthentication.framework 。这个库内容比较少,所以不是很复杂。主要方法如下 判断 TouchID 或者手机密码是否可用 - ...
  • Swift 语言指南

    千次阅读 2015-07-03 10:09:06
    这份指南汇集了 Swift 语言主流学习资源,并以开发者的视角整理编排。 GitHub:ipader/SwiftGuide | 网站:http://dev.swiftguide.cn | 欢迎开发者一起维护,或反馈/投稿 想了解关于该指南及 Swift 更多信息...
  • 在ios10指纹验证错误过多会报错,然后不会弹出系统密码输入界面: 打印error.code,是:-8 打印error.localizedDescription,是:Biometry is locked out 上网查到ios9以前会弹出系统密码输入界面。ios10及以后呢?...
  • 仿ios支付宝解锁功能(一)

    千次阅读 2017-03-08 19:25:14
    指纹解锁 创建项目,Fingerlock,使用xcode7.3,开发语言swift。 创建一个运行如下的项目,运行如下: 在thirditem的界面添加安全设置按钮,点击进入安全设置列表,如图:   现在分析指纹解锁指纹...
  • swift中的指纹识别

    千次阅读 2015-05-17 15:59:34
    ios8 SDK向开发者公开了指纹识别功能,允许app对用户身份进行本地验证。使用Touch ID非常简单 1 检查Touch ID 是否可用 2 获得指纹验证结果 使用Touch ID 需要引入 LocalAuthentication框架 import ...
  • iOS开发实现TouchID指纹解锁

    千次阅读 2016-09-02 14:11:00
    iOS开发实现TouchID指纹解锁 一直想实现一下指纹解锁,苦于一直没时间,最近终于闲了下来所以翻了翻文档看了看demo,完成了这篇教程。本功能实现起来是很简单的,因为苹果都已经帮我们封装好了,只需要实现几个...
  • 最近公司的 app 要使用指纹支付了;总体来说还是蛮顺利的;但是中间有遇到一些坑;下面就对坑进行汇总; 一.基本知识 点开这个LocalAuthentication.framework,发现里面主要有这么几个东西 LocalAuthentication....
  • 指纹密码swift

    2016-12-02 16:53:33
    指纹密码验证处理 还有用户主动点击取消是在子线程,这时候去突出一个界面,会崩溃,因为一个新的界面...开启指纹登录  func fingerprintLogin(on:Bool) {  //1.初始化TouchID句柄  let authentication =
1 2 3 4 5 ... 8
收藏数 160
精华内容 64
关键字:

swift指纹解锁