资讯动态

Flet BiometricType 详解:识别设备可用生物识别能力与本地认证实践

发布时间:2026/9/23 9:18:01 来源:尧图企业网站定制
前端跨平台桌面应用移动开发【免费下载链接】fletBuild realtime web, mobile and desktop apps in Python only. No frontend experience required.项目地址https://gitcode.com/gh_mirrors/fl/flet点击查看免费下载本篇技术指南围绕 Fletflet-local-auth扩展中的BiometricType类型展开说明 Flet 应用如何通过LocalAuthentication服务查询设备上已录入enrolled的生物识别类型并结合仓库源码、Dart 端映射与官方示例给出可直接落地的实战代码。读完本文你将掌握BiometricType全部枚举成员的含义、get_available_biometrics()的完整调用链路以及如何据此调整应用的面部识别 / 指纹 / 虹膜等本地认证交互逻辑。BiometricType 是什么BiometricType是flet-local-auth包中用于描述设备当前已录入生物识别方式的枚举类型定义于 types.py。它由 Python 端flet_local_auth包导出通常配合LocalAuthentication.get_available_biometrics()一起使用——后者负责向 Flutter 的local_auth插件查询设备已配置的生物识别能力并把结果统一翻译成BiometricType枚举值返回给 Python 代码。class BiometricType(Enum): Biometric types reported by the device. FACE face FINGERPRINT fingerprint IRIS iris WEAK weak STRONG strong需要注意BiometricType描述的是设备可用的生物识别手段而不是认证结果。真正触发系统认证弹窗、返回成功与否的是LocalAuthentication.authenticate()方法见 local_auth.py。二者通常搭配使用先用get_available_biometrics()探测能力、决定 UI 提示文案再调用authenticate()完成认证。五个枚举成员及其语义BiometricType包含 5 个成员每个成员的字符串值value与 Python 侧枚举名name一一对应并在调用get_available_biometrics()后从 Dart 端原样回传。枚举成员字符串值语义FACEface设备支持人脸识别如 Face ID 类方案FINGERPRINTfingerprint设备支持指纹识别IRISiris设备支持虹膜识别WEAKweak设备存在弱强度生物识别能力Android 平台常见安全性等级较低STRONGstrong设备存在高强度生物识别能力Android 平台常见安全性等级较高从成员构成看枚举同时覆盖了传感器种类face / fingerprint / iris与安全强度weak / strong两类维度后两者主要对应 Android 平台根据生物识别实现强度所做的区分。开发者可以通过b.value拿到其字符串值示例代码中即如此使用便于日志输出或 UI 拼接。与 Dart 端枚举的一一映射Python 侧枚举并非凭空定义而是与 Flutterlocal_auth插件中的BiometricType枚举完全对齐。Dart 服务端在 utils/local_auth.dart 中定义了如下转换函数String? parseBiometricTypeName(BiometricType type) { return type.name; }get_available_biometrics在 Dart 端 local_auth.dart 的实现为case get_available_biometrics: return (await _auth.getAvailableBiometrics()) .map(parseBiometricTypeName) .toList();即Dart 插件返回的每个BiometricType枚举项经type.name取出枚举名字符串后回传 Python再由 Python 侧BiometricType(value)反向构造为本地枚举。这条 1:1 映射关系有对应测试保障——enum_mapping_test.dart 遍历 Dart 侧所有BiometricType.values断言parseBiometricTypeName均能返回与枚举名一致的字符串因此 Python 侧五个成员恰好完整覆盖 Dart 端全部可能取值。获取已录入的生物识别get_available_biometrics 调用链LocalAuthentication.get_available_biometrics()是唯一返回BiometricType列表的公开方法定义于 local_auth.pyasync def get_available_biometrics(self) - list[BiometricType]: Returns the biometrics currently enrolled on the device. result await self._invoke_method(get_available_biometrics) return [BiometricType(value) for value in result or []]其完整调用链路为Python 侧通过_invoke_method(get_available_biometrics)向 Flutter 端发起服务调用Dart 端LocalAuthenticationService收到方法名后调用_auth.getAvailableBiometrics()底层即 Flutterlocal_auth插件能力结果中的每个 DartBiometricType经type.name序列化为字符串数组回传Python 侧用BiometricType(value)逐个重建枚举并返回list[BiometricType]。调用该方法的实际效果是返回设备当前已录入enrolled的生物识别类型而非设备硬件的全部潜力——用户未录入指纹时FINGERPRINT不会出现在结果中。因此它天然适合用来驱动 UI 文案例如只有检测到FACE时才显示使用面容解锁按钮。此外LocalAuthentication还提供两个相关的探测方法见 local_auth.pyis_device_supported()设备是否支持生物识别或设备凭据认证can_check_biometrics()设备是否存在生物识别硬件无论是否已录入。完整实战示例探测并展示设备生物识别能力flet-local-auth包自带官方示例 extensions/local_auth/local_auth/main.py展示了BiometricType在真实界面中的典型用法——点击按钮探测设备能力并把枚举值渲染到页面上import flet as ft import flet_local_auth as auth def main(page: ft.Page): status ft.Text(theme_styleft.TextThemeStyle.TITLE_MEDIUM) local_auth auth.LocalAuthentication() async def refresh_capabilities(_): supported await local_auth.is_device_supported() can_check await local_auth.can_check_biometrics() biometrics await local_auth.get_available_biometrics() status.value ( fDevice supported: {supported}\n fBiometric hardware: {can_check}\n fEnrolled biometrics: {, .join(b.value for b in biometrics) or none} ) async def authenticate(_): try: ok await local_auth.authenticate( Authenticate to continue, android_messagesauth.AndroidAuthMessages( sign_in_titleUnlock, cancel_buttonNot now, ), ) status.value fAuthenticated: {ok} except auth.LocalAuthException as e: status.value fAuthentication failed: {e.code.value} page.add( ft.SafeArea( contentft.Column( spacing16, controls[ ft.Container( bgcolorft.Colors.SURFACE_CONTAINER_HIGHEST, border_radius12, padding16, contentstatus, ), ft.Button(Check capabilities, on_clickrefresh_capabilities), ft.Button(Authenticate, on_clickauthenticate), ], ), ) ) if __name__ __main__: ft.run(main)示例中有三个与BiometricType直接相关的要点b.value取字符串值, .join(b.value for b in biometrics)展示了如何把枚举转成可读文本若设备无任何已录入生物识别列表为空回退显示none空列表是合法状态get_available_biometrics()返回空列表不代表报错应当作为无可用生物识别正常分支处理与authenticate()解耦能力探测与认证是独立的两步authenticate()失败时会抛出LocalAuthException可通过e.code.value拿到LocalAuthErrorCode枚举的错误码字符串完整错误码见 types.py。平台支持与前提条件LocalAuthentication服务仅支持 Android、iOS、macOS、Windows 四个平台不支持 Linux 与 Web。这一约束同时体现在文档与源码两处官方文档平台支持表见 localauthentication/index.mdWindows / macOS / iOS / Android 为 ✅Linux / Web 为 ❌源码在before_update()中显式拦截当page.web为真或平台为 Linux 时直接抛出FletUnsupportedPlatformException见 local_auth.py。因此在桌面 / 移动端编写探测逻辑时建议先判断运行平台再调用get_available_biometrics()在 Linux 或 Web 上部署时不应依赖任何BiometricType返回值。安装与依赖使用flet-local-auth从而使用BiometricType前需先安装依赖包官方文档 localauthentication/index.md 提供了两种方式# uv uv add flet-local-auth # pip pip install flet-local-auth # 之后需手动把该包加入 requirements.txt 或 pyproject.tomliOS / macOS 平台还需在项目配置中声明生物识别权限例如在pyproject.toml中[tool.flet] permissions [biometric]Android 平台的USE_BIOMETRIC权限由local_auth插件自动声明并合并Flet 应用默认使用FlutterFragmentActivity与 AppCompat 主题无需额外配置。若需要将受生物识别保护的密钥/令牌持久化存储可配合SecureStorage服务使用参见 securestorage 文档。小结BiometricType虽然只是flet-local-auth包中的一个枚举类型却是理解设备生物识别能力的关键数据模型五个成员FACE/FINGERPRINT/IRIS/WEAK/STRONG完整覆盖了 Flutterlocal_auth插件可报告的生物识别种类与强度通过get_available_biometrics()获取已录入而非硬件支持的生物识别列表适合驱动动态 UIPython 与 Dart 之间的枚举映射由 utils/local_auth.dart 实现并有 enum_mapping_test.dart 测试兜底保证两端取值始终一致实际项目可直接复用 extensions/local_auth/local_auth/main.py 中的能力探测与认证流程骨架。如需进一步了解认证失败时的错误码体系可查看LocalAuthErrorCode与LocalAuthException的完整定义见 types.py需要受生物识别保护的本地存储时可继续阅读 SecureStorage 文档。赞分享前端跨平台桌面应用移动开发【免费下载链接】fletBuild realtime web, mobile and desktop apps in Python only. No frontend experience required.项目地址https://gitcode.com/gh_mirrors/fl/flet点击查看免费下载相关推荐使用 Flutter local_auth 实现设备端生物识别与本地认证使用 Flutter local_auth 实现设备端生物识别与本地认证 本指南基于 Flutter 官方维护的 local_auth https://link跨平台移动开发UI组件开发工具Rails Girls Guides生物识别认证指纹与面部识别Rails Girls Guides生物识别认证指纹与面部识别 你是否还在为用户密码管理烦恼是否希望为Rails应用添加更安全、更便捷的登录方式本文将带你教程后端免费开源的多音乐源聚合播放器LX Music Desktop 3 分钟上手全攻略免费开源的多音乐源聚合播放器LX Music Desktop 3 分钟上手全攻略 深夜想听一首老歌A 软件里要会员B 软件里搜不到C 软件音质差得没法听桌面应用音视频前端上一篇探索Cayman主题一个优雅且功能强大的GitHub Pages静态网站模板下一篇如何快速上手Newsboat10个简单技巧让终端阅读体验更佳创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价