Android指纹识别,提升APP用户体验,从这里开始


Android指纹识别,提升APP用户体验,从这里开始

文章插图
 
写在前面指纹识别大家都不陌生,现在比较新的Android/ target=_blank class=infotextkey>安卓手机大多都已经支持面部识别了,指纹识别更是主流安卓手机的标配功能 。这两个功能可以说用过都说好,确实是方便快捷 。
不过大家观察一下会发现,这些手机的指纹识别和面部识别也就是支持一下手机的锁屏解锁而已,数量巨大的App对于这两个技术的应用可以说比较少 。这何尝不是APP良好体验性的损失呢?
庆幸的是,基于 google API 实现指纹识别的基础性功能并不复杂 。
指纹识别的兼容性和安全性问题除了实现指纹识别的基础性功能,我认为开发者还需要关注和选择性处理的问题有两个:兼容性和安全性 。
为什么说选择性处理?
首先说兼容性,指纹识别的 API 是 Google 在 Android 6.0 开放出来的 。
在 Android 6.0 以下的系统上,某些手机厂商自行支持了指纹识别,如果我们的 APP 要兼容这些设备,就还要集成厂商的指纹识别的SDK,这是最大的兼容性问题 。不过,现在 Android 6.0 以下的设备已经很少了,其中支持指纹识别的设备就更少了,不对其进行兼容,我认为也是可以的 。
在Android 6.0 以上的系统上,由于厂商对 Android 系统和指纹识别模块的定制化普遍,导致会出现一些兼容性问题 。这个没有什么好的办法,就需要开发者见招拆招了 。已经踩过坑的开发者很多,大家可以到网上搜索相关的文章看 。
然后说下安全性,由于已添加的指纹是存储在手机上的,Google API 验证指纹后仅仅返回 true 或者 false,我们是很难无条件相信这个识别结果的 。比如说用户的手机 root 了或者是自定制设备,指纹识别是有可能被劫持进而返回有误的识别结果的 。
好在这种情况发生的概率比较低 。如果指纹识别的应用场景非交易非支付,仅仅是类似于 “启动 APP 进行指纹验证” 这样的情况的话,Google API 提供的指纹识别就够用了 。
关于兼容性和安全性的问题,本文不过多探讨了,给大家推荐一篇文章,同时也请大家关注文章中提到的支付宝和腾讯的处理方式,及其开源情况:
指纹识别 API 的版本演进在 Android 6.0(Android M Api23),Android 系统开放了指纹识别的api,存在于 android.hardware.fingerprint包下,核心类是FingerprintManager,提供了基础的指纹识别的功能 。要注意的是,FingerprintManager在 Android 9.0(Android P Api28)做了 @Deprecated 标记,将被弃用 。
后来,在android.support.v4.hardware.fingerprint包和 androidx.core.hardware.fingerprint包中,FingerprintManager升级为了 FingerprintManagerCompat,对功能进行了增强,也做了一些兼容性的处理,比如增加了系统版本号的判断,对指纹支持加密处理等 。实际上阅读源码会发现,他的核心功能还是调用 FingerprintManager 实现的 。
再之后,在 Android 9.0(Android P Api 28),Google 对生物识别进行了进一步增强,开放了以 BiometricPrompt 为核心的新 Api,存在于 androidx.biometric 包和android.hardware.biometrics包下,Google 在开发者文档中是这样解释的:
On devices running P and above, this will show a system-provided authentication prompt, using a device's supported biometric (fingerprint, iris, face, etc).
大意是,在 Android P 及以上版本的系统中,BiometricPrompt 将展现一个由系统提供的验证提示,用于支持设备提供的生物识别,包括指纹、虹膜、面部等 。
目前来看,虹膜和面部等生物识别 Api 尚未开放,仅支持指纹识别,不过在指纹识别上进行了统一,比如要求使用统一的指纹识别 UI ,不允许开发者自定义了 。
指纹识别关键方法 authenticate这是指纹识别中最核心的方法,用于拉起指纹识别扫描器进行指纹识别 。
以 FingerprintManagerCompat 中 authenticate() 方法为例,开发者文档中是这样定义的:
Android指纹识别,提升APP用户体验,从这里开始

文章插图
 
 
Android指纹识别,提升APP用户体验,从这里开始

文章插图
 
解释一下各个参数:
  • FingerprintManagerCompat.CryptoObject crypto
源码中是这样解释的:
/** * A wrapper class for the crypto objects supported by FingerprintManager. Currently the * framework supports {@link Signature} and {@link Cipher} objects. */大意是,这是一个密码对象的包装类,当前支持 Signature 形式和 Cipher 形式的密码对象加密 。
作用是,指纹扫描器会使用这个对象判断指纹认证结果的合法性 。Android 6.0 是 @Nullable,但不建议传 null,且在 Android 9.0 之后就是@NonNull 了 。


推荐阅读