关于指纹解锁那些事


作者:秋儿 lvruifei@foxmail.com


iOS8 指纹解锁的API,这篇文章解释的非常清楚。

本文主要针对在实际使用中遇到的问题及解决方法,假定已经了解指纹解锁API,如不了解API,请先移步指纹解锁的API说明

项目之前一直使用的是手势密码,近来要增加 iOS8 新出的指纹解锁功能。需求是在设置中添加指纹解锁开关

问题1:在个人设置里面,添加指纹解锁开关项,此项仅在支持TouchID 的设备中出现
很好,百度了下,得到了如下解决方案

解决方案:

LAContext *context = [LAContext new];
NSError *error = [NSError new];
BOOL isAvailable = [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];

这是api给出的判断TouchID是否可用的方法,isAvailable == Yes 说明 TouchID 可用,反之,则不可用。
但是,当我满心欢喜的使用的时候,问题来了

问题2:在6 Plus,未设置手机解锁密码或没有可用的指纹时,用上面的方法判断 isAvailable == No,瞬间心都碎了。
这里依然有解决方案

解决方案:

if (!isAvailable) {
    NSString *str = nil;
    switch (error.code) {
        case LAErrorTouchIDNotEnrolled://无可用指纹

        case LAErrorPasscodeNotSet://设备未开启密码
        {
            isAvailable = YES;
            break;
        }
        case LAErrorTouchIDNotAvailable:
        default:
        {
            isAvailable = NO;
            break;
        }

    }
}

虽然依然把这个问题解决了。but,又产生了新的问题。

问题3:使用上述方法,在 iPod Touch 等不支持 TouchID 的设备,未设置手机解锁密码情况下运行时,设置中的指纹解锁开关项居然出现了。

单步调试之,在 error.code 的 switch 中,进入的是 case LAErrorPasscodeNotSet://设备未开启密码,执行了isAvailable = YES;。然,大胆猜测之,api 居然先判断的是有没有开启密码而不是设备类型和或系统是否支持,这使我彻底无语~~~~

此时,我再也不相信API了,果断自己写判断吧。

解决方案:

// 硬件设备不支持,或系统版本不支持 指纹解锁
if (![Utils isSystemModelSupportTouchID] || ![Utils isSystemVersionMoreThanVersion:7.0]) {
    return NO;
}

LAContext *context = [LAContext new];
NSError *error = [NSError new];
BOOL isDeviceSupportTouchId = [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];

if (!isDeviceSupportTouchId) {

    //不支持指纹识别

    switch (error.code) {

        case LAErrorTouchIDNotEnrolled:

        case LAErrorPasscodeNotSet:
        {
            isDeviceSupportTouchId = YES;
            break;
        }
        case LAErrorTouchIDNotAvailable:
        default:
        {
            isDeviceSupportTouchId = NO;
            break;
        }
    }
}


return isDeviceSupportTouchId;

硬件设备判断上花了一小点功夫,版本判断显然很简单。

硬件设备判断思路:

1.获取设备类型字符串,如iPhone 5c,iPhone 6;
2.判断设备类型字符串是包含iPhone ,iPod , iPad,是iPhone 则截取设备类型字符串中的第一位数字,iPad 有分mini 和Air, 截取设备类型字符串中的第一位数字,然后数字对比判断是否支持TouchID。

至此,TouchID 告一段落!在此,附上本文中的 Demo 地址:LRFFingerPrintManager,欢迎各位读者朋友提出建议。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值