ios指纹解锁 - CSDN
精华内容
参与话题
  • iOS开发--指纹解锁

    2018-08-28 10:14:35
    指纹解锁是自苹果公司推出iPhone 5s后推出的,将加密做到官方化,为APP的保密性提供了高度的方便性. 正文 指纹解锁很简单,三步即可搞定 第一步 请求 请求当前设备是不是支持指纹解锁 LAContext *context = ...

    前言

    指纹解锁是自苹果公司推出iPhone 5s后推出的,将加密做到官方化,为APP的保密性提供了高度的方便性.

    正文

    指纹解锁很简单,三步即可搞定

    第一步 请求

    请求当前设备是不是支持指纹解锁

    LAContext *context = [LAContext new];
    NSError *error = NULL;
    __weak typeof(self) WS = self;
    if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
        // 进行第二步骤
    } else {
        if (resultBlock) {
            resultBlock(NO, @"不支持指纹");
        }
    }

    第二步 验证

    这里需要知道的是,
    iOS 9之前,指纹解锁只支持纯指纹解锁,
    iOS 9之后,指纹解锁支持纯指纹解锁和指纹密码混合解锁两种方式

    LAPolicy policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics;
    
    if (@available(iOS 9.0, *)) {
        switch (fingerprintType) {
            case FingerprintTool_OnlyFinger:
                policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics;
                break;
            case FingerprintTool_FingerAndPassword:
                policy = LAPolicyDeviceOwnerAuthentication;
                break;
        }
    } else {
        NSLog(@"指纹和密码的解锁模式,只支持系统版本大于或者等于9.0");
    }
    
    [context evaluatePolicy:policy
            localizedReason:localizedReason
                      reply:^(BOOL success, NSError * _Nullable error) {
                                  // 第三步骤
                      }];

    第三步 结果处理

    结果处理,主要是处理成功和失败的情况,失败需要处理失败的原因(在你需要的话),失败基本上分为客观原因和人为原因(这里指的是人为取消)

    if (resultBlock) {
        NSString *resultString = [WS referenceError:error 
                                     fallbackString:fallbackString];
        resultBlock(success, resultString);  
    }
    #pragma mark 返回错误参考信息
    + (NSString *)referenceError:(NSError *)error fallbackString:(NSString *)fallbackString {
        switch (error.code) {
            case LAErrorAuthenticationFailed:
                return @"授权失败";
                break;
            case LAErrorUserCancel:
                return @"用户取消验证Touch ID";
                break;
            case LAErrorUserFallback:
                return fallbackString;
                break;
            case LAErrorSystemCancel:
                return @"系统取消授权,如其他APP切入";
                break;
            case LAErrorPasscodeNotSet:
                return @"系统未设置密码";
                break;
            case LAErrorTouchIDNotAvailable:
                return @"设备Touch ID不可用,例如未打开";
                break;
            case LAErrorTouchIDNotEnrolled:
                return @"设备Touch ID不可用,用户未录入";
                break;
            case LAErrorTouchIDLockout:
                return @"身份验证未成功,多次使用Touch ID失败";
                break;
            case LAErrorAppCancel:
                return @"认证被取消的应用";
                break;
            case LAErrorInvalidContext:
                return @"授权对象失效";
                break;
            case LAErrorNotInteractive:
                return @"APP未完全启动,调用失败";
                break;
    
            default:
                return @"验证成功";
                break;
        }
    }

    结语

    最后附上demo,如果感觉对你有所帮助,小星星走起⭐️⭐️⭐️

    展开全文
  • iOS开发实现TouchID指纹解锁  一直想实现一下指纹解锁,苦于一直没时间,最近终于闲了下来所以翻了翻文档看了看demo,完成了这篇教程。本功能实现起来是很简单的,因为苹果都已经帮我们封装好了,只需要实现几个...

    iOS开发实现TouchID指纹解锁 

    一直想实现一下指纹解锁,苦于一直没时间,最近终于闲了下来所以翻了翻文档看了看demo,完成了这篇教程。本功能实现起来是很简单的,因为苹果都已经帮我们封装好了,只需要实现几个方法就可以了。

    1.jpeg

    实现效果图

    实现过程

    1.首先引入指纹解锁必须的头文件
    1
    LocalAuthentication/LocalAuthentication.h
    2.了解下主要的两个方法

    这个方法是判断设备是否支持TouchID的。

    1
    2
    - (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)
    error __attribute__((swift_error(none)));

    这个是用来验证TouchID的,会有弹出框出来。

    1
    2
    3
    - (void)evaluatePolicy:(LAPolicy)policy
           localizedReason:(NSString *)localizedReason
                     reply:(void(^)(BOOL success, NSError * __nullable error))reply;
    3.新建LAContext对象
    主要的属性设置
    • localizedFallbackTitle:用于设置左边的按钮的名称,默认是Enter Password.

    localizedReason:用于设置提示语,表示为什么要使用Touch ID

    2.jpg

    解锁失败界面
    1
    2
    3
     //创建LAContext
     LAContext *context = [LAContext new]; //这个属性是设置指纹输入失败之后的弹出框的选项
     context.localizedFallbackTitle = @"没有忘记密码";
    4.主要回调方法,包括成功以及失败的
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    NSError *error = nil;
        if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics 
        error:&error]) {
            NSLog(@"支持指纹识别");
            [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics 
            localizedReason:@"指纹解锁" reply:^(BOOL success, NSError * _Nullable error) {
                if (success) {
                    NSLog(@"验证成功 刷新主界面");
                }else{
                    NSLog(@"%@",error.localizedDescription);
                    switch (error.code) {
                        case LAErrorSystemCancel:
                        {
                            NSLog(@"系统取消授权,如其他APP切入");
                            break;
                        }
                        case LAErrorUserCancel:
                        {
                            NSLog(@"用户取消验证Touch ID");
                            break;
                        }
                        case LAErrorAuthenticationFailed:
                        {
                            NSLog(@"授权失败");
                            break;
                        }
                        case LAErrorPasscodeNotSet:
                        {
                            NSLog(@"系统未设置密码");
                            break;
                        }
                        case LAErrorTouchIDNotAvailable:
                        {
                            NSLog(@"设备Touch ID不可用,例如未打开");
                            break;
                        }
                        case LAErrorTouchIDNotEnrolled:
                        {
                            NSLog(@"设备Touch ID不可用,用户未录入");
                            break;
                        }
                        case LAErrorUserFallback:
                        {
                            [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                                NSLog(@"用户选择输入密码,切换主线程处理");
                            }];
                            break;
                        }
                        default:
                        {
                            [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                                NSLog(@"其他情况,切换主线程处理");
                            }];
                            break;
                        }
                    }
                }
            }];
        }else{
            NSLog(@"不支持指纹识别");
            switch (error.code) {
                case LAErrorTouchIDNotEnrolled:
                {
                    NSLog(@"TouchID is not enrolled");
                    break;
                }
                case LAErrorPasscodeNotSet:
                {
                    NSLog(@"A passcode has not been set");
                    break;
                }
                default:
                {
                    NSLog(@"TouchID not available");
                    break;
                }
            }
     
            NSLog(@"%@",error.localizedDescription);
        }

    小结

    做到这里几乎就算完成,使用确实很简单,因为苹果都已经给我们做好一切,对我们开发者来说就很轻松了。教程写的很简陋,希望大家多多包涵,代码我已经传到GitHub了,还有我的个人博客
    最后希望可以帮到大家。

    展开全文
  • 前言一直想写博客来着,一来可以记录一些自己学习和研究的东西,二来也可以将自己写的一些东西分享出去,给他人参考,还可能收到他人的一些建议,从而完善自己的项目和提升自己的技术,这也是一种很好的技术交流方式...

    前言

    一直想写博客来着,一来可以记录一些自己学习和研究的东西,二来也可以将自己写的一些东西分享出去,给他人参考,还可能收到他人的一些建议,从而完善自己的项目和提升自己的技术,这也是一种很好的技术交流方式。但是之前一直不知道怎么去写?怎么去总结?在经过一些观摩和学习后,终于决定先来试试水了

    展开全文
  • iOS开发之指纹解锁

    千次阅读 2015-11-16 16:43:52
    iOS8.0之后,API开放了指纹验证的功能。开放的API虽然只能用来作为验证使用,比较局限,但是对于有类似“手势密码”功能的app来说,已经足够用了。有了这个新api,就可以在app中再多一种高大上的解锁方式了。 ...

    前一阵子一直在赶项目进度,没有太多时间写博客,现在终于空闲了,将以前欠下的博客补上来。
    在iOS8.0之后,API开放了指纹验证的功能。开放的API虽然只能用来作为验证使用,比较局限,但是对于有类似“手势密码”功能的app来说,已经足够用了。有了这个新api,就可以在app中再多一种高大上的解锁方式了。
    指纹验证功能的最低硬件支持为iPhone5s,iPad 6,iPad mini 3这些有touch ID硬件支持的设备,并且操作系统最低为iOS8.0,因为touch ID是在iOS8.0之后才开放的一类api。
    下面放代码。
    做iOS8.0下版本适配时,务必进行API验证,避免调用相关API引起崩溃。
    引入依赖框架:

    #import <LocalAuthentication/LocalAuthentication.h>

    指纹验证的实现

    - (void)authenticateUser
    {
        //初始化上下文对象
        LAContext* context = [[LAContext alloc] init];
        //错误对象
        NSError* error = nil;
        NSString* result = @"Authentication is needed to access your notes.";
    
        //首先使用canEvaluatePolicy 判断设备支持状态
        if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
            //支持指纹验证
            [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:result reply:^(BOOL success, NSError *error) {
                if (success) {
                    //验证成功,主线程处理UI
                }
                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
        {
            //不支持指纹识别,LOG出错误详情
    
            switch (error.code) {
                case LAErrorTouchIDNotEnrolled:
                {
                    NSLog(@"TouchID is not enrolled");
                    break;
                }
                case LAErrorPasscodeNotSet:
                {
                    NSLog(@"A passcode has not been set");
                    break;
                }
                default:
                {
                    NSLog(@"TouchID not available");
                    break;
                }
            }
    
            NSLog(@"%@",error.localizedDescription);
            [self showPasswordAlert];
        }
    }
    

    对几种情况的说明

    typedef NS_ENUM(NSInteger, LAError)
    {
        //授权失败
        LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,
    
        //用户取消Touch ID授权
        LAErrorUserCancel           = kLAErrorUserCancel,
    
        //用户选择输入密码
        LAErrorUserFallback         = kLAErrorUserFallback,
    
        //系统取消授权(例如其他APP切入)
        LAErrorSystemCancel         = kLAErrorSystemCancel,
    
        //系统未设置密码
        LAErrorPasscodeNotSet       = kLAErrorPasscodeNotSet,
    
        //设备Touch ID不可用,例如未打开
        LAErrorTouchIDNotAvailable  = kLAErrorTouchIDNotAvailable,
    
        //设备Touch ID不可用,用户未录入
        LAErrorTouchIDNotEnrolled   = kLAErrorTouchIDNotEnrolled,
    } NS_ENUM_AVAILABLE(10_10, 8_0);
    展开全文
  • 先判断一下系统版本,在判断一下当前设备是否支持指纹解锁 LocalAuthentication.framework 有一整套的交互,指纹不行输入密码之类的,都封装好了,不用开发者去操心 引入依赖框架 LocalAuthentication.framework #...
  • iOS开发 实现指纹识别及验证

    千次阅读 2017-04-20 21:48:01
    最近在写一个demo,打算实现指纹验证以及人脸识别(手势解锁网上demo很多所以不打算集成,很抱歉并没有嘲讽大神们的技术结晶的意思,只是解锁方式择其二就行了),本篇只是记录一下初次学习指纹识别的过程以及心得。...
  • iOS指纹解锁Swift

    千次阅读 2017-06-14 15:53:45
    iOS指纹解锁 Swift,几行代码就搞定
  • 最近APP中需要加指纹解锁的功能,就是类似支付宝的指纹解锁,具体可以到支付宝操作一下,在此就不贴图了。首先,如果之前没做过指纹识别解锁的同学可以先看一下这篇文章,文章写得挺全面的: 点击打开链接直接贴...
  • iOS 指纹识别登录功能实现

    千次阅读 2020-08-03 10:06:49
    Touch ID是苹果公司的一种指纹识别技术,从iPhone 5s开始,早已为人们所熟知。 Touch ID不存储用户的任何指纹图像,只保存代表指纹的数字字符。苹果公司提供Touch ID给第三方应用程序使用,程序只会收到认证是否成功...
  • 跟想象的一样,iOS 8中的指纹识别使用起来还是很方便的,只需要一个接口就能搞定,屏幕上弹出一个模态的框,跟app store上的一样。 直接上代码吧,下面代码拷贝自Apple的官方文档。 需要添加LocalAuthentication....
  • iOS 指纹识别

    千次阅读 2016-11-23 09:12:39
    苹果从iPhone5S开始,具有指纹识别技术,从iOS8.0之后苹果允许第三方 App 使用 Touch ID进行身份验证。指纹识别Touch ID提供3+2共5次指纹识别机会(3次识别失败后,弹出的指纹验证框会消失,同时会报错code = -1,...
  • ios10指纹验证错误过多会报错,然后不会弹出系统密码输入界面: 打印error.code,是:-8 打印error....ios10及以后呢?ios9以前这样写://是否支持touchid [_context canEvaluatePolicy:LAPolicyDev
  • 我们在开发app指纹解锁和手势解锁时有需求:只要app启动时从后台进入前台就要弹出手势解锁界面或者指纹解锁界面。 在开发过程中我第一反应是使用applicationDidBecomeActive这个方法来判断app进入前台以及写入弹出...
  • IOS指纹/面容识别,TouchID/FaceID验证

    千次阅读 2019-01-15 18:21:07
    使用YZAuthID仅需一个回调方法即可轻松实现指纹/面容ID的验证识别功能,该项目支持Pods便于项目构建,可前往https://github.com/micyo202/YZAuthID下载源码运行查看效果。 认证原理这里我就不多做阐述了,...
  • 越来越多的app都是用指纹解锁(下面都用TouchID表示),现在略微来讲解一下TouchID(文末的demo里TouchID和手势解锁都有,这里只介绍TouchID)
  • iOS TouchID和FaceID登录验证 简单使用

    千次阅读 2019-08-30 16:21:07
    新入职公司 还是接受了之前的项目 提出新的需求 用指纹和面部进行安全验证和登录 涉及到TouchID和FaceID相关技术知识点 查找资料后简单了解并实现功能 先来点直观的图 指纹识别和面部识别公用一个库即可,系统会...
  • 微信支付/支付宝指纹支付原理

    万次阅读 2018-11-16 00:16:26
    随着各大厂商手机相继加入了指纹解锁功能,指纹支付因为免除了密码输入,简单快捷的特点,迅速受到了广大用户的青睐。今天我们简单来探究一下指纹支付的原理。   首先,我们先看看微信的指纹支付设置页面:点击...
  • iOS 指纹解锁 检测指纹信息变更

    千次阅读 2018-05-12 22:33:48
    通过LAContext evaluatedPolicyDomainState属性可以获取到当前data类型的指纹信息数据,当指纹增加或者删除,该data就会发生变化,通过记录这个TouchIdData 做对比就能判断指纹信息是否变更,从而定制app功能。 ...
  • iOS 调用TouchID 身份验证

    千次阅读 2018-06-27 14:52:48
    iOS8后苹果开放了Touch ID的API给开发者,这也给我们的app带来了新的体验。开发者们可使用向第三方应用开放了Touch ID权限的API,以便他们在应用中使用指纹认证来完成用户认证或支付购买。本文主要介绍如何在应用中...
  • iOS8指纹识别TouchID

    千次阅读 2014-06-27 17:32:03
    苹果在2014年6月3日的WWDC2014开幕式上推出了新版iOS8系统,界面上iOS8与iOS7相比变化不大,不过在功能方面进行了完善。iOS8通知中心更加强大,支持消息直接回复操作,并支持QuickType和第三方输入法。短信功能改进...
1 2 3 4 5 ... 20
收藏数 1,164
精华内容 465
热门标签
关键字:

ios指纹解锁