100个设备id取消 ios_ios最多3个测试设备id - CSDN
  • iOS8后苹果开放了Touch ID的API给开发者,这也给我们的app带来了新的体验。开发者们可使用向第三方应用开放了Touch ID权限的API,以便他们在应用中使用指纹认证来完成用户认证或支付购买。本文主要介绍如何在应用中...

    iOS8后苹果开放了Touch ID的API给开发者,这也给我们的app带来了新的体验。开发者们可使用向第三方应用开放了Touch ID权限的API,以便他们在应用中使用指纹认证来完成用户认证或支付购买。本文主要介绍如何在应用中集成Touch ID来校验用户的身份和注意事项。

    支持系统和机型

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

    依赖框架

    在使用前我们需要导入 LocalAuthentication.framework 这个库


    这个库必须要Xcode6并且连接的是真机,才不会提示找不到的错误。 如果是模拟器会提示找不到这个库。

    注意事项

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

    使用类

    LAContext 指纹验证操作对象

    代码

    //验证是否支持TouchID
    - (void)judgeCanTouchId
    {
        LAContext *context = [LAContext new];
        
        NSError *error;
        context.localizedFallbackTitle = @"输入密码";
        
        if ([context canEvaluatePolicy:(LAPolicyDeviceOwnerAuthenticationWithBiometrics) error:&error])
        {
            NSLog(@"支持使用");
            [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:NSLocalizedString(@"通过验证指纹解锁",nil) reply:^(BOOL success, NSError * _Nullable error) {
                if (success) {
                    NSLog(@"验证成功");
                }
                else
                {
                    /*
                     // 用户未提供有效证书,(3次机会失败 --身份验证失败)。
                     LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,
                     
                     // 认证被取消,(用户点击取消按钮)。
                     LAErrorUserCancel           = kLAErrorUserCancel,
                     
                     // 认证被取消,用户点击回退按钮(输入密码)。
                     LAErrorUserFallback         = kLAErrorUserFallback,
                     
                     // 身份验证被系统取消,(比如另一个应用程序去前台,切换到其他 APP)。
                     LAErrorSystemCancel         = kLAErrorSystemCancel,
                     
                     // 身份验证无法启动,因为密码在设备上没有设置。
                     LAErrorPasscodeNotSet       = kLAErrorPasscodeNotSet,
                     
                     // 身份验证无法启动,因为触摸ID在设备上不可用。
                     LAErrorTouchIDNotAvailable  = kLAErrorTouchIDNotAvailable,
                     
                     // 身份验证无法启动,因为没有登记的手指触摸ID。 没有设置指纹密码时。
                     LAErrorTouchIDNotEnrolled   = kLAErrorTouchIDNotEnrolled,
                     **/
    
                    if (error.code == kLAErrorUserFallback) {
                        NSLog(@"用户选择了另一种方式");
                    }
                    else if (error.code == kLAErrorUserCancel)
                    {
                        NSLog(@"用户取消");
                    }
                    else if (error.code == kLAErrorSystemCancel)
                    {
                        NSLog(@"切换前台被取消");
                    }
                    else if (error.code == kLAErrorPasscodeNotSet)
                    {
                        NSLog(@"身份验证没有设置");
                    }
                    else
                    {
                        NSLog(@"验证失败");
                    }
                }
            }];
        }
        else
        {
            NSLog(@"不支持使用");
        }
    }
    
    
    运行一下ok了




    PS:调用手机密码就把上段代码中LAPolicyDeviceOwnerAuthenticationWithBiometrics置换成LAPolicyDeviceOwnerAuthentication即可。


    展开全文
  • iOS TouchId

    2018-03-26 15:41:23
    ios8.0 后开发了功能实现的API,我们可以运用这功能在第三方app进行验证登录,提高用户体验。 废话不多说,直接进入正题。 假设你要在第三方APP 做指纹验证登录,那么你或怎么做? 我想应该是类似第三方登录...

    IPhone 指纹识别 是在IPhone 5s 设备出现的新功能,用于数据加密和安全。用户开启设备可通过输入密码或者验证指纹的方式解锁手机,以达到个人隐私得到安全保护的手段。在ios8.0 后开发了功能实现的API,我们可以运用这个功能在第三方app进行验证登录,提高用户体验

    废话不多说,直接进入正题。

    假设你要在第三方APP 做指纹验证登录,那么你或怎么做? 我想应该是类似第三方登录(微信、QQ、微博等)同样的流程。首先,你必须注册一个账号,然后验证TouchId,验证通过后,生成一个token保存要keychain,并提交后台进行账号绑定。当二次登陆的时候,touchid校验通过的话,发送token到后台进行校验,校验成功后即登陆成功。

    下面是详细的实验过程

    第一步:导入touchid的API 接口库,声明工具方法

    #import <LocalAuthentication/LocalAuthentication.h>
    
    //方法的具体实现步骤,如下
    + (void)touchIdIdentify;
    

    第二步: 判断系统版本是否支持touchId

    if (!([[UIDevice currentDevice]systemVersion].doubleValue >= 8.0)) 
    {
         NSLog(@"系统不支持");
         return;
    }

    第三步 : 判断设备是否支持touchId。如果不支持,判断touchId是否打开。这里需要注意一个问题。如果是ios8.0后,touchid被锁定后,需要重启手机来重新开启。如果是ios9.0后,可通过输入密码来重新开启touchid来校验。

    LAContext *context = [[LAContext alloc]init];
    
    NSError *error;
    
    [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];
    
    if (error.code == LAErrorTouchIDLockout && [UIDevice currentDevice]systemVersion].doubleValue >= 9.0) 
    {
    
         [context evaluatePolicy:LAPolicyDeviceOwnerAuthentication localizedReason:@"重新开启TouchID功能" reply:^(BOOL success, NSError * _Nullable error) 
         {
                if (success) 
                {
                    //递归调用下
                    [self touchIdIdentify];
                }
            }]; 
       return;
    }

    注意 : kLAPolicyDeviceOwnerAuthentication 这个(枚举)值只有在iOS9.0以后才可以使用,利用这个值可以调出输入密码来解锁TouchID的界面。故以上要做9.0的版本判断。

    .

    第四步 : 在第三步的基础上,如果支持,那么进行校验。
    注意 :由于校验的结果回调是在子线程,所以,涉及到一个操作必须回到主线程。

     [authenticationContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"通过Home键验证已有手机指纹" reply:^(BOOL success, NSError * _Nullable error) {
    
           //回主线程
            dispatch_async(dispatch_get_main_queue(), ^{
    
                if (error) 
                {
                    switch (error.code) 
                    {
                        case LAErrorAuthenticationFailed:
    
                            NSLog(@"LAErrorAuthenticationFailed");
                            break;
    
                        case LAErrorUserCancel:
    
                             NSLog(@"点击取消按钮");
                            break;
    
                        case LAErrorUserFallback:
    
                             NSLog(@"用户点击输入密码按钮");
                             break;
    
                        case LAErrorPasscodeNotSet:
    
                            NSLog(@"没有在设备上设置密码");
                            break;
    
                        case LAErrorTouchIDNotAvailable:
    
                           NSLog(@"设备不支持TouchID");
                           break;
    
                        case LAErrorTouchIDNotEnrolled:
    
                           NSLog(@"身份验证无法启动,因为Touch ID没有注册手指");
                           break;
    
                        case LAErrorTouchIDLockout:
    
                          NSLog(@"touchid 被锁定"); 
                            if ([[UIDevice currentDevice]systemVersion].doubleValue >= 9.0) 
                            {
                                [self touchIdIdentify];
                            }
                            break;
                        default:
                            break;
                    }
                    return ;
                }
    
                // 说明验证成功,如果要刷新UI必须在这里回到主线程
                NSLog(@"校验成功");
        }];
    

    大概就是这么写步骤吧。仅供参考。demo下载地址戳这里,真机运行。

    展开全文
  • iOS FaceID & TouchID

    2018-06-06 14:25:41
    iOS FaceID &amp; TouchID API文档 System/LocalAuthentication FaceID和TouchID本身基本逻辑很简单(当然需要置入一些安全相关的第三方SDK的情况下除外),先来介绍几关键参数值和一些主意事项,然后...

    iOS FaceID & TouchID

    API文档 System/LocalAuthentication

    FaceID和TouchID本身基本逻辑很简单(当然需要置入一些安全相关的第三方SDK的情况下除外),先来介绍几个关键参数值和一些主意事项,然后直接贴代码就OK

    LAPolicyDeviceOwnerAuthenticationWithBiometrics 和 LAPolicyDeviceOwnerAuthentication
    • LAPolicyDeviceOwnerAuthenticationWithBiometrics
      • iOS 8.0+
    // 设备所有者使用生物识别方法进行认证。TouchID验证是必须的,如果TouchID不可用或者没有注册,则策略评估将会失败。如果TouchID是锁被锁定,则需要输入密码作为解锁TouchID的第一步。
    // TouchID对话框包括一个取消按钮,默认标题为“取消”,可以使用“localizedCancelTitle”属性去修改。有一个fallback按钮默认标题为“输入密码”,可以通过“localizedFallbackTitle”属性去修改。
    // fallback按钮最初是隐藏的,并且在首次touchID尝试失败之后显示。
    // 点击取消按钮或者输入密码按钮后会导致 evaluatePolicy: 方法调用失败,返回一个不同的错误代码。
    // 5次验证失败,生物识别将被锁定。之后,用户必须输入密码才可以解锁验证。
    • LAPolicyDeviceOwnerAuthentication
      • iOS 9.0+
    // 设备所有者使用生物识别后者设备密码进行验证。
    // TouchID或者密码验证是必须的,如果TouchID可用,注册并且未被锁定,首先使用TouchID验证。否则直接要求输入设备密码。
    // 如果密码未被启用,则策略评估失败。
    // Touch ID身份验证对话框的行为与LAPolicyDeviceOwnerAuthenticationWithBiometrics使用的行为相似。当点击输入密码按钮的时候,切换验证方法,并允许用户输入设备密码。
    // 密码锁定会在6次失败尝试之后被锁定,并且逐步增加退避延迟。
    iOS11新增属性 LABiometryType biometryType
    • iOS 11.0+
    • 这里需要注意的是请仔细阅读 biometryType 属性的注释。中文意思为只有当canEvaluatePolicy:生物识别策略成功之后才会去设置这个属性的值。简单来说意思就是 biometryType 这个属性的值只有在你调用canEvaluatePolicy:方法之后并且返回是YES没有错误的情况下才会设置,才会有值。在调用 canEvaluatePolicy: 方法前,或者调用后但是有Error的情况下,该属性均无任何有意义的值,验证之后实际为空。
    typedef NS_ENUM(NSInteger, LABiometryType)
    {
        /// The device does not support biometry.
        LABiometryNone,
    
        /// The device supports Touch ID.
        LABiometryTypeTouchID,
    
        /// The device supports Face ID.
        LABiometryTypeFaceID,
    } NS_ENUM_AVAILABLE(NA, 11_0) __WATCHOS_UNAVAILABLE __TVOS_UNAVAILABLE;
    
    /// Indicates the type of the biometry supported by the device.
    ///
    /// @discussion  This property is set only when canEvaluatePolicy succeeds for a biometric policy.
    ///              The default value is LABiometryNone.
    @property (nonatomic, readonly) LABiometryType biometryType NS_AVAILABLE(NA, 11_0) __WATCHOS_UNAVAILABLE __TVOS_UNAVAILABLE;

    代码附上

    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
    
        // 检测设备是否支持TouchID或者FaceID
        if (@available(iOS 8.0, *)) {
            self.LAContent = [[LAContext alloc] init];
    
            NSError *authError = nil;
            BOOL isCanEvaluatePolicy = [self.LAContent canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError];
    
            if (authError) {
                NSLog(@"检测设备是否支持TouchID或者FaceID失败!\n error : == %@",authError.localizedDescription);
                [self showAlertView:[NSString stringWithFormat:@"检测设备是否支持TouchID或者FaceID失败。\n errorCode : %ld\n errorMsg : %@",(long)authError.code, authError.localizedDescription]];
            } else {
                if (isCanEvaluatePolicy) {
                    // 判断设备支持TouchID还是FaceID
                    if (@available(iOS 11.0, *)) {
                        switch (self.LAContent.biometryType) {
                            case LABiometryNone:
                            {
                                [self justSupportBiometricsType:0];
                            }
                                break;
                            case LABiometryTypeTouchID:
                            {
                                [self justSupportBiometricsType:1];
                            }
                                break;
                            case LABiometryTypeFaceID:
                            {
                                [self justSupportBiometricsType:2];
                            }
                                break;
                            default:
                                break;
                        }
                    } else {
                        // Fallback on earlier versions
                        NSLog(@"iOS 11之前不需要判断 biometryType");
                        // 因为iPhoneX起始系统版本都已经是iOS11.0,所以iOS11.0系统版本下不需要再去判断是否支持faceID,直接走支持TouchID逻辑即可。
                        [self justSupportBiometricsType:1];
                    }
    
                } else {
                    [self justSupportBiometricsType:0];
                }
            }
    
        } else {
            // Fallback on earlier versions
            [self justSupportBiometricsType:0];
        }
    }
    
    #pragma mark -
    #pragma mark -------------------- private actions --------------------
    // 开始验证按钮点击事件
    - (IBAction)didClickBtnCheck:(id)sender {
        NSString *myLocalizedReasonString = @"验证";
    
        [self.LAContent evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:myLocalizedReasonString reply:^(BOOL success, NSError * _Nullable error) {
            if (success) {
                NSLog(@"身份验证成功!");
                [self showAlertView:@"验证成功"];
            } else {
                // 做特定的错误判断处理逻辑。
                NSLog(@"身份验证失败! \nerrorCode : %ld, errorMsg : %@",(long)error.code, error.localizedDescription);
                // error 参考 LAError.h
                [self showAlertView:[NSString stringWithFormat:@"身份验证失败!\nerrCode : %ld\nerrorMsg : %@",(long)error.code, error.localizedDescription]];
            }
        }];
    }
    
    #pragma mark -
    #pragma mark -------------------- common methods --------------------
    // 判断生物识别类型,更新UI
    - (void)justSupportBiometricsType:(NSInteger)biometryType
    {
        switch (biometryType) {
            case 0:
            {
                NSLog(@"该设备支持不支持FaceID和TouchID");
                self.lblMsg.text = @"该设备支持不支持FaceID和TouchID";
                self.lblMsg.textColor = [UIColor redColor];
                self.btnCheck.enabled = NO;
            }
                break;
            case 1:
            {
                NSLog(@"该设备支持TouchID");
                self.lblMsg.text = @"该设备支持Touch ID";
                [self.btnCheck setTitle:@"点击开始验证Touch ID" forState:UIControlStateNormal];
                self.btnCheck.enabled = YES;
            }
                break;
            case 2:
            {
                NSLog(@"该设备支持Face ID");
                self.lblMsg.text = @"该设备支持Face ID";
                [self.btnCheck setTitle:@"点击开始验证Face ID" forState:UIControlStateNormal];
                self.btnCheck.enabled = YES;
            }
                break;
            default:
                break;
        }
    }
    
    // 弹框
    - (void)showAlertView:(NSString *)msg
    {
        NSLog(@"%@",msg);
        if (@available(iOS 8.0, *)) {
            UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleCancel handler:nil];
            UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil message:msg preferredStyle:UIAlertControllerStyleAlert];
            [alertController addAction:okAction];
            [self presentViewController:alertController animated:YES completion:nil];
        } else {
            // Fallback on earlier versions
            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:msg delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            [alertView show];
        }
    }
    LAError
    typedef NS_ENUM(NSInteger, LAError)
    {
        //身份验证不成功,因为用户无法提供有效的凭据。
        LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,
    
        //认证被用户取消(例如了取消按钮)。
        LAErrorUserCancel = kLAErrorUserCancel,
    
        //认证被取消了,因为用户利用回退按钮(输入密码)。
        LAErrorUserFallback = kLAErrorUserFallback,
    
        //身份验证被系统取消了(如另一个应用程序去前台)。
        LAErrorSystemCancel = kLAErrorSystemCancel,
    
        //身份验证无法启动,因为设备没有设置密码。
        LAErrorPasscodeNotSet = kLAErrorPasscodeNotSet,
    
        //身份验证无法启动,因为触摸ID不可用在设备上。
        LAErrorTouchIDNotAvailable NS_ENUM_DEPRECATED(10_10, 10_13, 8_0, 11_0, "use LAErrorBiometryNotAvailable") = kLAErrorTouchIDNotAvailable,
    
        //身份验证无法启动,因为没有登记的手指触摸ID。
        LAErrorTouchIDNotEnrolled NS_ENUM_DEPRECATED(10_10, 10_13, 8_0, 11_0, "use LAErrorBiometryNotEnrolled") = kLAErrorTouchIDNotEnrolled,
    
        //验证不成功,因为有太多的失败的触摸ID尝试和触///摸现在ID是锁着的。
        //解锁TouchID必须要使用密码,例如调用LAPolicyDeviceOwnerAuthenti//cationWithBiometrics的时候密码是必要条件。
        //身份验证不成功,因为有太多失败的触摸ID尝试和触摸ID现在被锁定。
        LAErrorTouchIDLockout NS_ENUM_DEPRECATED(10_11, 10_13, 9_0, 11_0, "use LAErrorBiometryLockout")
        __WATCHOS_DEPRECATED(3.0, 4.0, "use LAErrorBiometryLockout") __TVOS_DEPRECATED(10.0, 11.0, "use LAErrorBiometryLockout") = kLAErrorTouchIDLockout,
    
        //应用程序取消了身份验证(例如在进行身份验证时调用了无效)。
        LAErrorAppCancel NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorAppCancel,
    
        //LAContext传递给这个调用之前已经失效。
        LAErrorInvalidContext NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorInvalidContext,
    
        //身份验证无法启动,因为生物识别验证在当前这个设备上不可用。
        LAErrorBiometryNotAvailable NS_ENUM_AVAILABLE(10_13, 11_0) __WATCHOS_AVAILABLE(4.0) __TVOS_AVAILABLE(11.0) = kLAErrorBiometryNotAvailable,
    
        //身份验证无法启动,因为生物识别没有录入信息。
        LAErrorBiometryNotEnrolled NS_ENUM_AVAILABLE(10_13, 11_0) __WATCHOS_AVAILABLE(4.0) __TVOS_AVAILABLE(11.0) = kLAErrorBiometryNotEnrolled,
    
        //身份验证不成功,因为太多次的验证失败并且生物识别验证是锁定状态。此时,必须输入密码才能解锁。例如LAPolicyDeviceOwnerAuthenticationWithBiometrics时候将密码作为先决条件。
        LAErrorBiometryLockout NS_ENUM_AVAILABLE(10_13, 11_0) __WATCHOS_AVAILABLE(4.0) __TVOS_AVAILABLE(11.0) = kLAErrorBiometryLockout,
    
        //身份验证失败。因为这需要显示UI已禁止使用interactionNotAllowed属性。  据说是beta版本
        LAErrorNotInteractive API_AVAILABLE(macos(10.10), ios(8.0), watchos(3.0), tvos(10.0)) = kLAErrorNotInteractive,
    } NS_ENUM_AVAILABLE(10_10, 8_0) __WATCHOS_AVAILABLE(3.0) __TVOS_AVAILABLE(10.0);
    

    展开全文
  • IOS FaceID & TouchID识别

    2018-08-01 10:14:11
    需要最低系统支持8.0以上,如果是FaceID至少IOS11以上. 导入头文件#import &lt;LocalAuthentication/LocalAuthentication.h&gt; 逻辑部分处理如下: - (void)fingerVerification { if ([UIDevice ...

      需要最低系统支持8.0以上,如果是FaceID至少IOS11以上.

    导入头文件#import <LocalAuthentication/LocalAuthentication.h>

    逻辑部分处理如下:

    - (void)fingerVerification
    {
        if ([UIDevice currentDevice].systemVersion.floatValue<8.0) {
            NSLog(@"ios8.0以后才支持指纹识别");
            return;
        }
        //IOS11之后如果支持faceId也是走同样的逻辑,faceId和TouchId只能选一个
        LAContext *context = [[LAContext alloc] init];
        NSError *error = nil;
        if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
            //支持 localizedReason为alert弹框的message内容
            [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"请验证已有指纹" reply:^(BOOL success, NSError * _Nullable error) {
                if (success) {
                    NSLog(@"验证通过");
                } else {
                    NSLog(@"验证失败:%@",error.description);
                    switch (error.code) {
                        case LAErrorSystemCancel:
                        {
                            NSLog(@"系统取消授权,如其他APP切入");
                            //系统取消授权,如其他APP切入
                            break;
                        }
                        case LAErrorUserCancel:
                        {
                            //用户取消验证Touch ID
                            NSLog(@"用户取消验证Touch ID");
                            break;
                        }
                        case LAErrorAuthenticationFailed:
                        {
                            //授权失败
                            NSLog(@"授权失败");
                            break;
                        }
                        case LAErrorPasscodeNotSet:
                        {
                            //系统未设置密码
                            NSLog(@"系统未设置密码");
                            break;
                        }
                        case LAErrorBiometryNotAvailable:
                        {
                            //设备Touch ID不可用,例如未打开
                            NSLog(@"设备Touch ID不可用,例如未打开");
                            break;
                        }
                        case LAErrorBiometryNotEnrolled:
                        {
                            //设备Touch ID不可用,用户未录入
                            NSLog(@"设备Touch ID不可用,用户未录入");
                            break;
                        }
                        case LAErrorUserFallback:
                        {
                            [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                                //用户选择输入密码,切换主线程处理
                                NSLog(@"用户选择输入密码,切换主线程处理");
                                
                            }];
                            break;
                        }
                        default:
                        {
                            [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                                //其他情况,切换主线程处理
                                NSLog(@"其他情况,切换主线程处理");
                            }];
                            break;
                        }
                    }
                }
            }];
        } else {
            NSLog(@"不支持指纹识别");
            NSLog(@"error : %@",error.localizedDescription);
        }
    }

     

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

    基础知识

    支持系统和机型

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

    依赖框架

    LocalAuthentication.framework

    #import <LocalAuthentication/LocalAuthentication.h>

    注意事项

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

    使用类

    LAContext 指纹验证操作对象

    代码

    - (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);
        }
    }
    
    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);

    操作流程

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

    iOS 9

    感谢秋儿指出iOS 9加入了三种新的错误类型。

     /// Authentication was not successful, because there were too many failed Touch ID attempts and
        /// Touch ID is now locked. Passcode is required to unlock Touch ID, e.g. evaluating
        /// LAPolicyDeviceOwnerAuthenticationWithBiometrics will ask for passcode as a prerequisite.
        LAErrorTouchIDLockout   NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorTouchIDLockout,
    
        /// Authentication was canceled by application (e.g. invalidate was called while
        /// authentication was in progress).
        LAErrorAppCancel        NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorAppCancel,
    
        /// LAContext passed to this call has been previously invalidated.
        LAErrorInvalidContext   NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorInvalidContext

    其中,LAErrorTouchIDLockout是在8.0中也会出现的情况,但并未归为单独的错误类型,这个错误出现,源自用户多次连续使用Touch ID失败,Touch ID被锁,需要用户输入密码解锁,这个错误的交互LocalAuthentication.framework已经封装好了,不需要开发者关心。

    LAErrorAppCancelLAErrorSystemCancel相似,都是当前软件被挂起取消了授权,但是前者是用户不能控制的挂起,例如突然来了电话,电话应用进入前台,APP被挂起。后者是用户自己切到了别的应用,例如按home键挂起。

    LAErrorInvalidContext很好理解,就是授权过程中,LAContext对象被释放掉了,造成的授权失败。

    展开全文
  • 新入职公司 还是接受了之前的项目 提出新的需求 用...指纹识别和面部识别公用一个库即可,系统会自动判断当前设备支持指纹识别还是面部识别 1.导入框架 #import <LocalAuthentication/LocalAuthentication.h...
  • //判断版本 if (NSFoundationVersionNumber ... NSFoundationVersionNumber_iOS_8_0) { NSLog(@"系统不支持TouchID"); } LAContext *context = [[LAContext alloc]init]; // 这属性是设置指纹输入失败之...
  • iOS 7中苹果再次无情的封杀mac地址,现在已经不能获取ios7设备的物理地址。那么在开发中如何才能标识设备的唯一性呢?apple公司提供的方法是通过keychain来存一些标志信息,然后通过存的标志信息来让应用程序来...
  • 唯一的设备ID

    2020-04-22 11:54:08
    苹果对用户隐私方面的权限管理非常严格,不允许调用私有API获取用户硬件的相关的ID,其中包括手机号、UDID、IMIE、序列号、MAC地址等,这些能解析...1. UDID与设备ID UDID的全称是Unique Device Identifier,它是iOS...
  • 坑到底有多大呢,请往下面看(如果你的解决办法是更换一个BundleID,请略过本文!)。 此图片来自网络 问题描述:Bundle Identifier重复(Bundle Identifier以下简称BID) Bundle Identifier重复 详细...
  • iOS 集成FaceId和TouchID

    2019-06-12 14:50:43
    现在的iPhone手机一共有三种解锁方式 ... 我们都知道现在的支持FaceId的手机一共有四种,X、XR、XS、XSMax。...所以在使用FaceId的时候我们需要判断是否...首先、我们先导入一个官方库 #import <SystemConfiguration...
  • iOS开发中如遇到频繁的Http请求,如何取消之前已经发送的Http请求?...我有一个TextField,无论什么时候当我输入字符的时候,我appending这字符到我的url,然后发送次请求,我现在 需要取消之前的请求。
  • iOS TouchID & FaceID

    2019-08-06 07:06:58
    import UIKit ...//指纹识别必须用真机测试,并且在iOS8以上系统,如果是FaceID至少IOS11以上. class AuthenticationTool: NSObject { let lc = LAContext() func hasTouchID() -> Bool{ ...
  • 错误原因:1、com.apple.LocalAuthentication Code=-6 Biometry is not available on this device.(不支持在iPhone 4s,5设备上运行)2、com.apple.LocalAuthentication Code=-1000Simulator is not ...
  • iOS开发之TouchId

    2016-12-16 13:06:59
    // 需求: 通过touchId进行登录,我把账号与密码使用keychain存储了...// 这里只是登录请求的例子 - (void)requestLoginStart { // 这里进行网络请求,登录成功,返回结果 if(succ) { ... [PassWordTool savePass
  • iOS8:TouchID

    2015-03-04 10:26:47
    引言  在2013年9月,苹果推出了最新的iPhone与系列硬件的改进。... iOS 8引入了一个新的框架(Local Authentication),使开发人员能够使用TouchID。  Local Authentication framework 提供了一些方
  • // 创建指纹验证对象 LAContext *context = [[LAContext alloc] init]; // 创建error NSError *... // 验证设备是否支持touchID if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiomet...
  • 使用YZAuthID仅需一个回调方法即可轻松实现指纹/面容ID的验证识别功能,该项目支持Pods便于项目构建,可前往https://github.com/micyo202/YZAuthID下载源码运行查看效果。 认证原理这里我就不多做阐述了,...
  • 今天就由本菜鸟给大家做一个简单的IOSApp消息推送教程吧!一切从0开始,包括XCode6, IOS8, 以及苹果开发者中心最新如何注册应用,申请证书以及下载配置概要文件,相信很多刚开始接触ios的人会很想了解一下。(ps:...
  • iOS TouchID

    2016-10-31 10:28:02
    iOS指纹解锁这需求在一些软件上可能会有需要,比如支付宝的指纹解锁之类的。前几天有人问这,正好看了一下。很简单的一个framework的应用:LocalAuthentication. 判断指纹解锁各种状态的一个枚举:失败授权(3次...
1 2 3 4 5 ... 20
收藏数 11,111
精华内容 4,444
关键字:

100个设备id取消 ios