iOS Touch ID 开发教程

一、Touch ID 简介

iOS系统的指纹识别功能最低支持的机型为iPhone 5s,最低支持系统为iOS 8,虽然安装iOS 7系统的5s机型可以使用系统提供的指纹解锁功能,但由于API并未开放,所以理论上第三方软件不可使用。

二、依赖框架

LocalAuthentication.framework

三、注意事项

做iOS 8以下版本适配时,务必进行API验证,避免调用相关API引起崩溃。

if (iOS8) { xxx } // 系统版本验证
if ([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError])

四、使用类

LAContext指纹验证操作对象

五、操作流程

判断系统版本,iOS 8及以上版本执行-(void)authenticateUser方法,自动判断设备是否支持和开启Touch ID。

六、代码示例

傻瓜式使用,不需要看懂代码,可直接复制粘贴,然后在注释处加入自己的代码即可,并且OC、Swift两个版本都有。
Objective-C:

- (IBAction)showTouchIDAlert:(id)sender { 
    // 1.判断是否是iOS8之后
    if (!iOS8later) {
        NSLog(@"版本不对不能使用TouchID"); 
        return;
    } 
    // 2.调用touchID的相关方法
    [self authenticateUser];
}
// 鉴定用户
- (void)authenticateUser{  
    // 创建指纹验证对象 
    LAContext *context = [[LAContext alloc] init]; 
    NSError *yfError = nil; 
    // 验证设备是否支持touchID 
    // LAPolicyDeviceOwnerAuthenticationWithBiometrics  iOS8 
    // LAPolicyDeviceOwnerAuthentication  iOS9 
    if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&yfError]) { 
        // 支持TouchID 
        [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"验证你的Touch ID" reply:^(BOOL success, NSError * _Nullable error) { 
            if (success) { 
                // touchID验证成功 
                // 继续处理相关业务(注意线程)
            }  else { 
                NSLog(@"%@",error.localizedDescription); 
                switch (error.code) { 
                    case LAErrorSystemCancel: { 
                        NSLog(@"Authentication was cancelled by the system"); 
                        //切换到其他APP,系统取消验证Touch ID 
                        break; 
                    } 
                    case LAErrorUserCancel: { 
                        NSLog(@"Authentication was cancelled by the user"); 
                        //用户取消验证Touch ID 
                        break; 
                    } 
                    case LAErrorUserFallback: { 
                        NSLog(@"User selected to enter custom password"); 
                        [[NSOperationQueue mainQueue] addOperationWithBlock:^{ 
                            //用户选择输入密码,切换主线程处理 
                        }]; 
                        break; 
                    } 
                    default: { 
                        [[NSOperationQueue mainQueue] addOperationWithBlock:^{ 
                            //其他情况,切换主线程处理 
                        }]; 
                        break; 
                    } 
                } 
            } 
        }]; 
    } else { 
        // 不支持TouchID 
        switch (yfError.code) { 
            case LAErrorTouchIDNotEnrolled: 
                NSLog(@"LAErrorTouchIDNotEnrolled"); 
                break; 
            case LAErrorPasscodeNotSet: 
                NSLog(@"LAErrorPasscodeNotSet"); 
                // 此处触发showPasscodeResetAlert方法 
                break; 
            default: 
                NSLog(@"Touch ID is unaviliable"); 
                break; 
        } 
        NSLog(@"%@", yfError.localizedDescription); 
    }
}

Swift:

let context = LAContext()
var err: NSError?
if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &err) {
    context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "验证你的Touch ID", reply: { (isSuccess, error) in
        if isSuccess { // TouchID验证成功
            // 继续处理相关业务(注意线程)
            print("验证成功!", Thread.current)
        } else {
            print("验证失败!", error?.localizedDescription)
            let e = (error as! NSError)
            switch (Int32(e.code)) {
            case kLAErrorSystemCancel:
                print("切换到其他APP,系统取消验证Touch ID")
            case kLAErrorUserCancel:
                 print("用户取消验证Touch ID ")
            case kLAErrorUserFallback:
                  print("用户选择输入密码,切换主线程处理", Thread.current)
                  OperationQueue.main.addOperation {
                      print("主线程处理", Thread.current)
                  }
             default:
                 print("其他情况,切换主线程处理")
                 DispatchQueue.main.async {
                     print("主线程处理", Thread.current)
                 }
             }
        }
    })
}

注意:模拟器调试方法

  1. 如果想在模拟器上调试Touch ID,则需要进行以下模拟器设置


    开启Touch ID

    只有把这个选项选中,才能进行Touch ID验证。

  2. 匹配OR不匹配Touch ID


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

推荐阅读更多精彩内容

  • 稀疏的梅枝艳丽的红花, 好象春天装饰的少女竞比豪华。 清净的庭院里曲折的栏杆旁看不到白梅的花朵, 淙淙流水边空旷山...
    梦双眸阅读 236评论 1 7
  • 中国商艺策划第一人,原创歌手:柴俊,中国情歌王子:饶天亮,亚洲赌王:尧建云,新生代肚皮舞大师:杜浩,中国行云太极大...
    oh大鹏阅读 144评论 0 0
  • 今天戴老师教了我们一种新的做笔记的方法―思维导图法。 就是用画画的形式在旁边写上所有物品的东西来表示。我首先画了个...
    李明翰妈妈阅读 2,260评论 0 0