Touch ID身份认证

TouchID是苹果公司在iOS 7中引入并在iPhone 5s上使用的新特性,是允许用户解锁设备和在App Store购物的生物识别技术。

现在好多app以及利用此特性进行登录,例如QQ登录、支付宝登录等.另外支付宝支付时,也可以代替输入支付密码。


在新手机激活的过程中会让用户录入指纹。另外可以在 “设置”-> "Touch ID 与密码" 中添加指纹。


应用程序使用TouchID作为验证机制是很容易的,下面就简单介绍一下在app启动后登录验证。

1.用到的库是 LocalAuthentication framework

2.用到的函数也只有两个:

  // 用来判断设备是否支持Touch ID

/// @return YES if the policy can be evaluated, NO otherwise.

    public func canEvaluatePolicy(policy: LAPolicy, error: NSErrorPointer) -> Bool

    返回true表示设备支持指纹识别;false表示不支持。

  // 真正验证身份的函数

    /// Typical error codes returned by this call are:

    /// @li          LAErrorUserFallback if user tapped the fallback button

    /// @li          LAErrorUserCancel if user has tapped the Cancel button

    /// @li          LAErrorSystemCancel if some system event interrupted the evaluation (e.g. Home button pressed).

    public func evaluatePolicy(policy: LAPolicy, localizedReason: String, reply: (Bool, NSError?) -> Void)

调起验证界面,如下图


3.

它支持一系列的错误类型,这些错误都能给出错误的原因,并能给出选项供开发者在每一种情况下做出处理。错误类型是用枚举实现的:

@available(iOS 8.0, *)
public enum LAError : Int { 
    /// 在用户没有提供正确验证的情况下返回该错误类型,例如使用一个错误的手指。
    case AuthenticationFailed    
    /// 在用户有意终止验证的时候返回该类型。
    case UserCancel    
    /// 在用户有意不使用TouchID验证并且回到自定义的输入验证方式时返回。
    case UserFallback   
    /// 在这种情况下,系统终止验证处理,因为另一个应用被激活了。
    case SystemCancel   
    /// 当用户没有在设备Settings中设定密码时返回。
    case PasscodeNotSet  
    /// 设备不支持TouchID。
    case TouchIDNotAvailable   
    /// 在设备支持TouchID但没有录入指纹的时候返回。
    case TouchIDNotEnrolled   
    /// 太多次的错误使Touch ID锁住。
    @available(iOS 9.0, *)
    case TouchIDLockout   
    /// app取消认证
    @available(iOS 9.0, *)
    case AppCancel   
    /// LAContext 失效
    @available(iOS 9.0, *)
    case InvalidContext
}
下面是调用方法

    func authenticateUser(){
        //获取认证上下文环境
        let content:LAContext = LAContext()
        var error:NSError?
        var reasonString = "通过验证指纹解锁TouchIdDemo."
        
        //检测设备是否支持touch id
        if content.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, error: &error){//支持Touch ID
            //调用验证
            [content .evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: reasonString, reply: {( success:Bool, evalPolicyError:NSError?) -> Void in
                if success{
                    //验证成功
                    
                }else{
                    //如果认证失败弹出提示
                    print(evalPolicyError?.localizedDescription)
                    switch evalPolicyError!.code{
                    case LAError.SystemCancel.rawValue :
                        print("系统取消认证。")
                    case LAError.UserCancel.rawValue:
                        print("用户取消认证。")
                    case LAError.UserFallback.rawValue:
                        print("用户选择输入密码。")
                        NSOperationQueue.mainQueue().addOperationWithBlock({() -> Void in                           
                        })
                    default:
                        print("认证失败。")
                    }
                }
            })]
        }
        else{//不支持Touch ID
            switch error!.code{
                case  LAError.TouchIDNotEnrolled.rawValue:
                print("TouchID is not enrolled")
            case  LAError.PasscodeNotSet.rawValue:
                print("A passcode has not been set")
            default:
                print("TouchID not available")               
            }
            print(error?.localizedDescription)
        }
    }
弹出界面如下图



其中

该alert可定制的只有两处:
1.”通过验证指纹解锁TouchIdDemo.”提示文字是由localizedReason参数指定的,用来向用户说明使用Touch ID的目的.
2.”Enter Password”可由LAContext的localizedFallbackTitle属性设置(LAContext目前只有这一个属性),如果不设置的话,默认是”Enter Password”.值得注意的是,如果该属性设置为@“”(空字符串),该按钮会被隐藏。


最后,在viewDidLoad()中调用

override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        authenticateUser()
}

参考资料:

在iOS 8 SDK中使用Touch ID API(上)

在iOS 8 SDK中使用Touch ID API(下)

iOS 8使用Touch ID进行身份认证

      




已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页