如何用react-native-biometrics检测iOS新增FaceID
如何通过react-native-biometrics检测新增生物识别信息(FaceID/指纹)
先明确平台差异:
- Android:能检测新增指纹(但无法检测指纹删除),新增指纹后之前生成的生物识别密钥会失效,调用接口会直接报错。
- iOS:目前无法检测FaceID的新增或重置,系统不会因为FaceID变更让已生成的密钥失效,所以react-native-biometrics做不到直接检测。
Android端具体实现
当用户新增指纹后,之前创建的生物识别密钥会被系统作废,此时调用createSignature会抛出特定错误,我们可以捕获这个错误来提示用户重新注册。
修改你提供的代码如下:
const checkKeyExist = yield rnBiometrics.biometricKeysExist(); if (checkKeyExist.keysExist) { const epochTimeSeconds = Math.round(new Date().getTime() / 1000).toString(); try { const createSignature = yield rnBiometrics.createSignature({ promptMessage: 'Sign in', payload: epochTimeSeconds }); // 签名成功,走正常登录流程 } catch (err) { // 针对Android新增指纹的情况,捕获密钥失效错误 if (err.code === 'BIOMETRIC_KEY_INVALIDATED') { Alert.alert('提示', '检测到生物识别信息已更新,请重新完成生物识别注册'); // 清理失效的密钥,避免后续重复触发错误 yield rnBiometrics.deleteKeys(); // 跳转生物识别注册页面 } else { // 处理其他错误,比如用户取消验证、识别失败等 Alert.alert('登录失败', err.message); } } } else { // 没有已存在的密钥,引导用户去注册生物识别 }
逻辑说明
Android系统在检测到指纹新增时,会自动标记之前生成的生物识别密钥为无效,调用createSignature就会返回BIOMETRIC_KEY_INVALIDATED错误,我们只要捕获这个错误,就能触发重新注册的流程。
iOS端折中方案
因为iOS系统的限制,没法直接检测FaceID的变更,只能用一些替代方案:
- 定期强制密码验证:比如每月让用户输入一次密码,避免FaceID变更后一直用旧的识别方式登录。
- 主动询问用户:在登录界面加个提示,问用户是否更新过FaceID,引导用户主动触发重新注册。
- 监听权限状态:虽然没法直接关联FaceID变更,但可以监听FaceID权限的变化,作为辅助判断的依据。
内容的提问来源于stack exchange,提问作者paperskyline
相关产品推荐
相关产品推荐

