uni-app不直接提供跨平台指纹识别api,必须通过原生插件调用ios的lacontext或android的biometricprompt/fingerprintmanagercompat,且需在manifest.json中声明对应权限、调用前校验isavailable(),结果仅返回布尔值,严禁暴露原始生物特征数据。

uni-app 本身不直接提供跨平台的指纹识别 API,App 端(iOS/Android)的生物识别必须走原生能力,不能靠 uni.getSystemInfo 或 uni.showToast 这类通用 API 实现。真正能用的,只有通过原生插件调用系统级接口 —— 否则你写的代码在真机上会静默失败或直接报错 undefined is not an object。
uni-app 调用指纹识别必须用原生插件
Webview、H5、小程序环境均不支持指纹识别;App 端也仅限 iOS 的 LAContext 和 Android 的 FingerprintManagerCompat(API 23+)或 BiometricPrompt(API 28+)。uni-app 没有内置封装,uni.checkIsSupportSoterAuthentication 是微信小程序专属,对 App 端完全无效。
- 必须使用 uni-app 原生插件市场中已上架的成熟插件,例如:
uni-biometric-auth、uni-fingerprint或厂商定制插件(如华为huawei-hms-biometrics) - 插件需在
manifest.json中显式声明权限:Android 需android.permission.USE_FINGERPRINT(API 28+ 已废弃,但低版本仍需),iOS 需在ios > permissions下配置NSFaceIDUsageDescription(注意:Face ID 权限描述文案必须填写,否则审核被拒) - 插件调用前必须判断设备是否支持:
plugin.isAvailable()或类似方法,不能跳过 —— 某些 Android 旧机型(如部分联发科芯片)即使有指纹传感器,也可能因 ROM 层未开放 API 导致isAvailable返回false
Android 上 BiometricPrompt 与 FingerprintManager 的兼容性取舍
Android 从 API 28 开始推荐用 BiometricPrompt,它统一支持指纹、人脸、虹膜,且 UI 标准化;但低于 API 28 的设备只能回退到 FingerprintManager(已弃用),而很多插件对回退逻辑处理粗糙,导致低版本闪退或无响应。
- 若目标用户集中在 Android 9+,优先选封装了
BiometricPrompt的插件,并确认其promptInfo参数支持自定义标题和描述(避免系统默认文案“Authenticate”不符合中文场景) - 若需兼容 Android 6.0(API 23)以上,务必检查插件源码中是否有
Build.VERSION.SDK_INT >= 28分支,以及 fallback 到FingerprintManager时是否做了isHardwareDetected()+hasEnrolledFingerprints()双重校验 - 注意:部分国产 ROM(如 MIUI、EMUI)会拦截
BiometricPrompt调用,需在插件初始化时传入forceUseSystemDialog: true参数绕过定制 UI
安全边界:指纹结果只应返回 boolean,绝不返回原始特征数据
所有合规的原生插件都应遵循「认证即授权」原则:调用成功只返回 { success: true } 或失败原因(如 ERROR_USER_CANCELED),绝不能暴露指纹模板、加密密钥或 biometric token。一旦插件文档或示例里出现 res.token、res.keyHandle 这类字段,立刻弃用 —— 这违反 Android Keystore 和 iOS Secure Enclave 的隔离设计。
- 业务侧应在服务端完成身份核验:App 端指纹通过后,用临时凭证(如短时效 JWT)向后端换用户 session,而非把指纹 hash 发给服务器
- 本地敏感操作(如支付确认)建议结合
uni.getProvider获取当前认证类型(fingerprint/face),并记录日志类型,但不要存储原始认证事件数据 - 插件若要求你在 manifest 中声明
android.permission.USE_BIOMETRIC(而非USE_FINGERPRINT),说明它已适配 Android 9+ 统一生物识别框架,更值得信赖
最容易被忽略的一点:iOS 上 Face ID 和 Touch ID 共享同一套 API(LAContext),但插件若没做 canEvaluatePolicy 的 LAPolicy.deviceOwnerAuthenticationWithBiometrics 检查,就可能在未录入生物信息的设备上直接崩溃。上线前务必用「未录入指纹/未开启 Face ID」的真机测一次 —— 模拟器永远无法复现这个 case。











