跳转到主内容
极星编程网:以代码为星,赴技术山海!

uni-app怎么实现指纹识别 uni-app生物识别身份验证教程【技巧】

uni.checkFaceID总返回false是因设备当前不满足生物识别可用性条件:iOS需开启Face ID开关、未锁屏且非重启后首次解锁;Android因厂商支持不一、权限未授或targetSdkVersion问题普遍返回false。 uni.checkFaceID 为什么总返回 false? 这不是代码写错了,而是设备当前不满足生物识别的“可用性”条件。它不是查“有没有指纹模块”,而是查“此刻能不能用”。
uni.checkFaceID
在 iOS 上只对 Face ID / Touch ID 生效,且要求用户已开启「iPhone 上的 Face ID」开关、未锁屏、未重启后未首次解锁 Android 上绝大多数机型返回
false
是正常现象:厂商系统级支持不统一,
USE_BIOMETRIC
权限未在系统设置中手动授予,或 targetSdkVersion BiometricPrompt 初始化失败 H5 环境下直接报错
not supported
,这个 API 根本不可用,别试 微信小程序里调用
uni.checkFaceID
没意义——它不走设备层,必须用
wx.requestPayment
唤起微信自己的生物验证链路 APP端该用 SOTER 还是 checkFaceID? APP(iOS/Android)必须用
uni.checkIsSupportSoterAuthentication
+
uni.startSoterAuthentication
,而不是
uni.checkFaceID
。
uni.checkFaceID
是 iOS 原生封装,Android 兼容性极差,2026 年仍无法稳定落地
uni.checkIsSupportSoterAuthentication
是 uni-app 官方推荐的跨平台生物认证入口,返回
supportMode: ['fingerPrint']
或
['fingerPrint', 'facial']
,明确告诉你设备支持什么 调用前必须先确认是否已录入:
uni.checkIsSoterEnrolledInDevice({ checkAuthMode: 'fingerPrint' })
,否则
startSoterAuthentication
会静默失败或弹出“未录入指纹”提示 注意
challenge
参数不是随便填的字符串,它是服务端验签的关键随机值,需和服务端约定好加解密方式 manifest.json 和权限配置漏哪一项都会白忙 APP 打包时权限和模块没配全,API 调用直接被系统拦截,连错误都不抛。 iOS:必须在
manifest.json
的
app-plus → distribute → ios
下添加
NSFaceIDUsageDescription
描述字段,否则真机直接 crash Android:除了
manifest.json
中
app-plus → modules → Fingerprint
要勾选,还必须在
distribute → android → permissions
加上
模拟器调试无效:Android 模拟器默认无生物识别能力,所有判断都为 false;iOS 模拟器不支持 Face ID,必须真机测试 自定义调试基座必须重打:改完 manifest 后不重新生成调试基座,旧基座不会自动更新权限 生物识别 ≠ 支付,别试图绕过支付通道 有人想用
uni.startSoterAuthentication
成功就直接扣款,这是安全红线,也根本走不通。 生物识别只是身份确认环节,不能替代签名、加密、风控、支付网关等完整链路 正确流程是:
startSoterAuthentication
成功 → 拿到
authCode
或业务凭证 → 发给后端 → 后端调用微信/支付宝统一下单接口 → 前端用
uni.requestPayment
唤起 SDK → SDK 内部自动触发生物验证 你控制不了支付 SDK 里的生物验证界面,也不该控制;它的 UI、活体检测、超时策略、降级逻辑(如密码备用)均由支付平台保障 如果业务需要活体人脸识别(非设备原生),得集成第三方 SDK(如百度、顶象),和
uni.startSoterAuthentication
完全是两套体系 最常被跳过的一步是:每次调用前都应重新执行
checkIsSupportSoterAuthentication
和
checkIsSoterEnrolledInDevice
。缓存结果会导致用户换手机、删指纹、关权限后功能突然失效,而且毫无提示。

相关文章