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