TouchID API

[toc]


- [新的博客地址](https://kunnan.blog.csdn.net)






TouchID 指纹识别是IPhone 5s设备新增的一项重大功能,用于数据加密和安全。而在IOS 8.0 以后也向第三方开放了相应功能API

https://developer.apple.com/library/ios/documentation/LocalAuthentication/Reference/LAContext_Class/index.html

https://developer.apple.com/reference/localauthentication/lacontext?language=objcobjc 语言示例

添加Libraries:LocalAuthentication Framework

Class

LAContext

-canEvaluatePolicy:error:

Preflights an authentication policy to see if it is possible for authentication to succeed.监测设备是否支持TouchID,返回BOOL,并且若不支持,则在error里面返回相应状态

-evaluatePolicy:localizedReason:reply:

Evaluates the specified policy.TouchID验证状态,在block里面返回验证状态(BOOL)和error;

reply:(void(^)(BOOLsuccess, NSError *__nullableerror))reply;

evaluatedPolicyDomainState

The current state of the evaluated policy domain.

TouchID API 非常简单,仅仅对本设备的TouchID进行验证,但如果需要在app集成相应的 “设备登录/验证”功能或其他TouchID 的应用,则需自行设计关联和绑定流程(例如:设备Token、生成设备账号/密码、app包名/版本),绑定之后,才能使用TouchID 进行验证和应用。

实现的关键点  :进行设备(用户)绑定

由于API并不提供关于本设备或本app任何可关联的信息,所以集成TouchID还需自行设计关联流程,才能实现指纹登录功能,或者指纹支付功能。

开启TouchID指纹密码:进行设备(用户)绑定

关闭TouchID指纹密码: 在设备(用户)绑定之后,并且当前正处于登录状态,也可以将本设备取消绑定,流程基本与绑定流程

设备(指纹)应用:

例如登陆应用: 在设备(用户)绑定之后,并且用户账号退出后,可以使用指纹登录,若当前设备未绑定,则不会出现“指纹登录”按钮。

例子:

指纹登陆app (账号,设备账号/密码)

账户绑定设备(生成设备账号/密码)

开启:在app登录后,点击开启“指纹登录”;

验证TouchID:检测当前设备是否支持TouchID,若支持则发起TouchID验证;

生成设备账号/密码:TouchID验证通过后,根据当前已登录的账号和硬件设备Token,生成设备账号/密码(规则可自定,密码要长要复杂),并保存在keychain;

绑定:生成设备账号/密码后,将原账号及设备账号/密码,加密后(例如RSA加密)发送到服务端进行绑定;

成功:验证原账号及设备账号有效后,返回相应状态,绑定成功则完成整个TouchID(设备)绑定流程。(后台处理逻辑)

设备(指纹)登陆

TouchID登录:在用户登录界面,点击“指纹登录”;

验证TouchID:检测当前设备是否支持TouchID,若支持则发起TouchID验证;

登录:读取app在本机的设备账号/密码,调用设备登录接口,发起登录请求;

成功:验证设备账号/密码后,返回相应状态,登录成功则完成整个TouchID登录流程。(后台处理逻辑)

注意细节:

生成账号/密码只是随机字符,以当前userID 为key,保存在keychain;登录时候根据keychain保存的最近一次登录的userID,获取账号/密码,进行登录

检测系统录入了新指纹:evaluatedPolicyDomainState这个属性,每次指纹发生改变的时候,这个值就会变,可以通过这个值的变化来判断

代码示例Expand source


#import

-(IBAction)touchIDClick{

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

NSError*error=nil;

if([contextcanEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometricserror:&error]){

[contextevaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics

localizedReason:@"验证touchID"

reply:^(BOOL success,NSError*error){

if(error){

NSLog(@"操作失败");

return;

}

if(success){

NSLog(@"验证成功");

}else{

NSLog(@"验证失败");

}

}];

}else{

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

}

}

你可能感兴趣的:(TouchID API)