使用Swift实现Touch ID(指纹解锁)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
查看查看253 回复回复2 收藏收藏 分享淘帖 转播转播 分享分享 微信
查看: 253|回复: 2
收起左侧

使用Swift实现Touch ID(指纹解锁)

[复制链接]
swifter 发表于 2016-10-3 15:14:58 | 显示全部楼层 |阅读模式
快来登录
获取优质的苹果资讯内容
收藏热门的iOS等技术干货
拷贝下载Swift Demo源代码
订阅梳理好了的知识点专辑
在 iPhone 5s 之后,Home 键有了指纹解锁功能。这给我们提供了了一种既安全又方便的的解锁方式。




1、载入 LocalAuthentication Framework

若要使用这个功能,我们必须让 app 加载 iOS 的本地认证框架。

使用Swift实现Touch ID(指纹解锁) 1

使用Swift实现Touch ID(指纹解锁) - 敏捷大拇指 - 使用Swift实现Touch ID(指纹解锁) 1

使用Swift实现Touch ID(指纹解锁) 2

使用Swift实现Touch ID(指纹解锁) - 敏捷大拇指 - 使用Swift实现Touch ID(指纹解锁) 2





2、在类文件中导入 LocalAuthentication

[Swift] 纯文本查看 复制代码
import LocalAuthentication





3、建立 Context

在使用 Touch ID 之前,需要先获得一个上下文对象,来管理操作指纹解锁的过程。在整个过程中可能会因为设备条件以及用户操作等原因出现很多异常,我们建立一个 NSError 对象来获取异常。

[Swift] 纯文本查看 复制代码
func touchID (){
  let context = LAContext()
  var error: NSError?
}





4、判断设备是否支持指纹识别

[Swift] 纯文本查看 复制代码
func touchID (){
  let context = LAContext()
  var error: NSError?

if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) {
  // 下面是开始指纹解锁的代码
}


这里 context 对象执行 canEvaluatePolicy 方法来判断设备是否支持。第二个参数是 NSError 类的指针类型。




5、捕获错误

我们在这里写一个函数来捕获错误原因并且记录错误信息,虽然这不是必须的,但是一个好的交互设计通常会考虑这些:

[Swift] 纯文本查看 复制代码
func errorMessageForLAErrorCode(errorCode: Int) -> String {
    var message = ""

    switch errorCode {
    case LAError.appCancel.rawValue:
        message = "Authentication was cancelled by application"

    case LAError.authenticationFailed.rawValue:
        message = "The user failed to provide valid credentials"

    case LAError.invalidContext.rawValue:
        message = "The context is invalid"

    case LAError.passcodeNotSet.rawValue:
        message = "Passcode is not set on the device"

    case LAError.systemCancel.rawValue:
        message = "Authentication was cancelled by the system"

    case LAError.touchIDLockout.rawValue:
        message = "Too many failed attempts."

    case LAError.touchIDNotAvailable.rawValue:
        message = "TouchID is not available on the device"
        showPassWordInput()

    case LAError.userCancel.rawValue:
        message = "The user did cancel"

    case LAError.userFallback.rawValue:
        message = "The user chose to use the fallback"

    default:
        message = "Did not find error code on LAError object"
    }
    return message
}


这个函数接受错误代码,并且返回错误信息,这样我们便可以清晰的了解各个异常状况的发生时机。




6、开始指纹解锁

[Swift] 纯文本查看 复制代码
func touchID (){
  let context = LAContext()
  var error: NSError?

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

  // 开始进入识别状态,以闭包形式返回结果。闭包的 success 是布尔值,代表识别成功与否。error 为错误信息。
  context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "请用指纹解锁", reply: {success, error in

    if success {
    // 成功之后的逻辑, 通常使用多线程来实现跳转逻辑。
    }else {
      if let error = error as? NSError {
        // 获取错误信息
        let message = self.errorMessageForLAErrorCode(errorCode: error.code)
        print(message)
      }
    }

  })
}


运行起来,就可以体验指纹解锁功能啦。不过有个小瑕疵,当指纹录入失败之后,点击输入密码,什么都不会发生。我们解锁iPhone的时候可以调用系统的密码输入视图,但是在应用里调用系统的密码输入视图是不允许的。我们需要借助第三方框架或者自己写一个吧……




作者:CyrusCao


都看到这里了,就把这篇资料推荐给您的好朋友吧,让他们也感受一下。

回帖是一种美德,也是对楼主发帖的尊重和支持。

*声明:敏捷大拇指是全球最大的Swift开发者社区、苹果粉丝家园、智能移动门户,所载内容仅限于传递更多最新信息,并不意味赞同其观点或证实其描述;内容仅供参考,并非绝对正确的建议。本站不对上述信息的真实性、合法性、完整性做出保证;转载请注明来源并加上本站链接,敏捷大拇指将保留所有法律权益。如有疑问或建议,邮件至marketing@swifthumb.com

*联系:微信公众平台:“swifthumb” / 腾讯微博:@swifthumb / 新浪微博:@swifthumb / 官方QQ一群:343549891(满) / 官方QQ二群:245285613 ,需要报上用户名才会被同意进群,请先注册敏捷大拇指

嗯,不错!期待更多好内容,支持一把:
支持敏捷大拇指,用支付宝支付10.24元 支持敏捷大拇指,用微信支付10.24元

评分

参与人数 1金钱 +10 收起 理由
Anewczs + 10 多谢贡献内容,内容太详实啦!.

查看全部评分

女汉子 发表于 2016-10-4 17:16:19 | 显示全部楼层
十一放假还这么多人
 楼主| swifter 发表于 2016-10-11 09:37:53 | 显示全部楼层
女汉子 发表于 2016-10-4 17:16
十一放假还这么多人

大拇指人气越来越旺盛了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

做任务,领红包。
我要发帖

分享扩散

都看到这里了,就把这资料推荐给您的好朋友吧,让他们也感受一下。
您的每一位朋友访问此永久链接后,您都将获得相应的金钱积分奖励
热门推荐