iOS 设备验证接口从iOS8开始开放,暂时无法获取指纹数据,api只返回验证成功与否.指纹功能5s以上设备才有.
使用步骤:
1.导入系统库
#import <LocalizedAuthentication/LocalizedAuthentication.h>
2.api从iOS8才开始开放,所以先要判断系统版本
if([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0f) {
3.创建设备验证上下文
LAContext *context = [[LAContext alloc] init];
//设置使用touchID(指纹)验证的时间间隔,在这个间隔内,下次调起指纹验证将直接通过.
//例如设备刚解锁,那么15s(如下)内再次调起指纹时不需要触摸home键直接通过验证
context.touchIDAuthenticationAllowableReuseDuration = 15;
4.先试探本设备开放的验证策略
NSError *error = nil;
if([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
//验证策略有两种LAPolicyDeviceOwnerAuthentication LAPolicyDeviceOwnerAuthenticationWithBiometrics
//试探和后面开始验证应该使用相同的策略.就好像不会canOpenURL:百度,结果openURL:脸书
//LAPolicyDeviceOwnerAuthentication:该策略首先使用指纹,如果未录入指纹或者有可能设备不支持则会切换到设备密码验证
//LAPolicyDeviceOwnerAuthenticationWithBiometrics:该策略只是用指纹,如果未录入指纹或者设备不支持则会返回失败
//失败情况下可以通过error获取失败原因,[error code]为-5说明设备没有设置密码或者指纹.
//-7则说明未注册指纹(只有在LAPolicyDeviceOwnerAuthenticationWithBiometrics策略下才会出现-7)
5.开始验证
[context evaluatePolicy:LAPolicyDeviceOwnerAuthentication localizedReason:@"提示语" reply:^(BOOL success, NSError *Nullable error) {
//success表示设备验证成功或者失败
//error可以获取失败原因,[error code]为-2说明是用户取消了验证(点击了取消)
//-4说明是系统取消了,可能是此时有电话呼入或者用户按下home键`电源键等等.也有可能出现-7,见上
}];
}
}
只需要指纹的话就用LAPolicyDeviceOwnerAuthenticationWithBiometrics策略,因为使用指纹的时候往往是为了避免输入密码.使用LAPolicyDeviceOwnerAuthentication策略的话如果未设置指纹或者不支持指纹有可能会弹出设备密码输入界面,这样并不能简化输入密码的流程.