指纹解锁

title: 指纹解锁
date: 2015-9-16 11:39:45
categories: iOS
tags: 指纹解锁


作者:秋儿(lvruifei@foxmail.com

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

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

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

问题1:

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

<font color=green>解决方案:</font>

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,瞬间心都碎了。
这里依然有解决方案

<font color=green>解决方案:</font>

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了,果断自己写判断吧。

<font color=green>解决方案:</font>

// 硬件设备不支持,或系统版本不支持 指纹解锁
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,欢迎各位读者朋友提出建议。。







时间:2015年12月23日



最近 iOS9.2 系统正式发布,有反应说App中使用指纹解锁在 iOS9.2 上会导致App崩溃。故,开始了查找 bug 之旅。

问题4:

升级手机9.2 版本后,使用指纹解锁,果然是崩溃了。手指放到 home 键上后,App 卡死,无法点击页面上的控件,大概3,4秒后闪退至桌面。

由于测试机都没有升级,故先看了相关的代码,注意到在验证指纹成功后, 使用dispatch_sync(dispatch_get_main_queue(), ^{ })来调用主线程处理一些工作。遂,猜想应该是这里出了问题,一般应使用dispatch_async,而非dispatch_sync。但不敢肯定,因为无法解释这样写就会崩溃,而且之前一直都是可以正常使用的。

<font color=brown>原因:</font>
iOS9.2 做了优化,使体验更流畅。可能在dispatch_async和dispatch_sync下了刀。

<font color=green>解决方案:</font>

待用9.2系统的真机运行时,半信半疑的把其改用了dispatch_async,并没有崩溃。但使用dispatch_sync确实崩溃了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,175评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,674评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,151评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,597评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,505评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,969评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,455评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,118评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,227评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,213评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,214评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,928评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,512评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,616评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,848评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,228评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,772评论 2 339

推荐阅读更多精彩内容