iOS开发中 Touch ID的使用

来源:互联网 发布:258优化网站 编辑:程序博客网 时间:2024/04/30 17:07



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


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

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

先看效果图:



Touch ID验证代码:

 LAContext *myContext = [[LAContextalloc]init];

 NSError *authError = nil;

 //授权原因

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

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

 if ([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometricserror:&authError]) {

     //弹出指纹识别界面

    [myContextevaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometricslocalizedReason:myLocalizedReasonStringreply:^(BOOL success, NSError *authenticationError) { 

if (success) {

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

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

  }

else {

                                    

switch (authenticationError.code) {

                                            

caseLAErrorAuthenticationFailed:

   {

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

                                            

     break;

   }

caseLAErrorUserCancel:

   {

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

     break;

   }

caseLAErrorUserFallback:

  {

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

 

     break;

  }

caseLAErrorSystemCancel :

  {

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

                                            

     break;

   }//

caseLAErrorTouchIDLockout :

 {

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

                                            

     break;

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

caseLAErrorAppCancel:

 {

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

                                            

  break;

  }//LAErrorInvalidContex

default:

  {

      

   break;

  }

}

                                   

}

                                

}]; 

}

else {

        

       switch (authError.code) {

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

           caseLAErrorPasscodeNotSet:

            {

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

               break;

            }

           caseLAErrorTouchIDNotAvailable:

            {

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

               break;

            }

           caseLAErrorTouchIDNotEnrolled:

            {

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

               break;

            }

           caseLAErrorInvalidContext:

            {

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

               break;

            }


           default:

            {

               break;

            }

        }

    }



1 0
原创粉丝点击