iOS开发中 Touch ID的使用



背景:有个朋友说有没有办法把iPhone上的相册、备忘录加密(现在的备忘录是苹果已经加入了加密功能),于是想了下要怎么实现保存的数据实现访问加密、解密功能。


要提高逼格肯定是使用指纹识别,于是在苹果提供的文档里面搜索了“Touch ID”(没看之前以为会很难的)。、

苹果没有过多的介绍这个功能,提供了一个关于钥匙串存储密码和Touch ID 验证的Demo,然后就是一段怎么使用Local Authentication框架的代码。

先看效果图:



Touch ID验证代码:

 LAContext *myContext = [[LAContext alloc] init];

 NSError *authError = nil;

 //授权原因

 NSString *myLocalizedReasonString = @"我需要授权";

 //if条件判断设备是否支持Touch ID 是否开启Touch id等这个一定要写上(曾经3D Touch使用的时候没判断导致iOS9以后的系统启动app就崩溃)

 if ([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError]) {

     //弹出指纹识别界面

    [myContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:myLocalizedReasonString reply:^(BOOL success, NSError *authenticationError) { 

if (success) {

   /*如果验证成功了,如果你只需要使用指纹验证功能的话(注意这个验证的密码是你设置里面设置的那个密码,也就是一般人都会用来解锁iphone的那个密码) 在这里面可实现你设计的功能了,如果你的应用需要独立密码的话,需要让Touch ID 和 那个独立密码绑定 ,支付宝是在验证成功之后 跳转到设置支付密码的页面 让这个Touch和支付密码绑定,实现指纹支付,每次指纹识别通过间接性的使用了支付密码(本质还是支付密码)*/

  NSLog(@"验证成功成功");

  }

else {

                                    

switch (authenticationError.code) {

                                            

case LAErrorAuthenticationFailed:

   {

    NSLog(@"用户提供的指纹不对");

                                            

     break;

   }

case LAErrorUserCancel:

   {

    NSLog(@"用户点击了取消按钮");

     break;

   }

case LAErrorUserFallback:

  {

    NSLog(@"用户选择输入密码");

 

     break;

  }

case LAErrorSystemCancel :

  {

    NSLog(@"切换到其他的app(按了Home按键),被系统取消");

                                            

     break;

   }//

case LAErrorTouchIDLockout :

 {

   NSLog(@"用户指纹错误多次,TOuch ID 被锁定");

                                            

     break;

 }//9.0 我试了验证过程中电话进来 返回的LAErrorSystemCancel 错误码 不是这个

case LAErrorAppCancel:

 {

   NSLog(@"(突如其来的)应用(电话)取消");

                                            

   break;

  }//LAErrorInvalidContex

default:

  {

      

   break;

  }

}

                                   

}

                                

}]; 

}

else {

        

        switch (authError.code) {

                //9.0 试过了不设置密码返回的是 LAErrorTouchIDNotEnrolled 错误码

            case LAErrorPasscodeNotSet:

            {

                NSLog(@"在设置里面没有设置密码");

                break;

            }

            case LAErrorTouchIDNotAvailable:

            {

                NSLog(@"设备不支持Touch ID");

                break;

            }

            case LAErrorTouchIDNotEnrolled:

            {

                NSLog(@"在设置里面没有设置Touch Id 指纹");

                break;

            }

            case LAErrorInvalidContext:

            {

                NSLog(@"创建的指纹对象失效");

                break;

            }


            default:

            {

                break;

            }

        }

    }



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

moxi_wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值