[IOS开发]指纹登录(TouchID)集成方案——逻辑设计和实现

1070413706 8年前

来自: http://www.jianshu.com/p/85689f7f183e

TouchID 指纹识别是IPhone 5s设备新增的一项重大功能,用于数据加密和安全。而在IOS 8.0 以后也向第三方开放了相应功能API,我们可以利用这个API做相应的用户验证和登录的功能,省去输入密码的环节,提高登录的用户体验。

TouchID
</div>

App集成TouchID的效果

TouchID 登录成功

TouchID API

API比较简单,在IOS 8 以上的app 包中,添加Libraries:LocalAuthentication Framework,有以下两个方法

  1. canEvaluatePolicy监测设备是否支持TouchID,返回BOOL,并且若不支持,则在error里面返回相应状态

  2. evaluatePolicyTouchID验证状态,在block里面返回验证状态(BOOL)和error;

从官方API看出,仅仅提供TouchID的支持状态和验证状态(BOOL),并不提供关于本设备或本app任何可关联的信息,所以集成TouchID还需自行设计关联和流程,才能实现指纹登录的功能,否则只验证TouchID,对于需在app中登录账号,并没什么作用。

逻辑设计

设备绑定

在设备第一次使用指纹登录之前,必须先登录原有的账号(app注册账号),进行设备(用户)绑定。图1所示

  1. 开启: 在app登录后,在“用户信息-安全”,点击开启“指纹登录”;
  2. 验证TouchID: 检测当前设备是否支持TouchID,若支持则发起TouchID验证;
  3. 生成设备账号/密码: TouchID验证通过后,根据当前已登录的账号和硬件设备Token,生成设备账号/密码(规则可自定,密码要长要复杂),并保存在keychain;
  4. 绑定: 生成设备账号/密码后,将原账号及设备账号/密码,加密后(题主使用的是RSA加密)发送到服务端进行绑定;
  5. 成功: 验证原账号及设备账号有效后,返回相应状态,绑定成功则完成整个TouchID(设备)绑定流程。

图1:TouchID 绑定/解除绑定

设备(指纹)登陆

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

  1. TouchID登录: 在用户登录界面,点击“指纹登录”;
  2. 验证TouchID: 检测当前设备是否支持TouchID,若支持则发起TouchID验证;
  3. 登录: 读取app在本机的设备账号/密码,调用设备登录接口,发起登录请求;
  4. 成功: 验证设备账号/密码后,返回相应状态,登录成功则完成整个TouchID登录流程。

    图2:TouchID 验证

*在设备(用户)绑定之后,并且当前正处于登录状态,也可以将本设备取消绑定,流程基本与绑定流程雷同,不再重复。

小结

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

</div>