如何在Flutter应用中调用用户系统原生锁屏验证实现页面访问控制
Flutter 调用系统锁屏验证实现页面访问控制方案
直接使用Flutter官方维护的local_auth库即可实现需求,该库会自动适配双端系统的所有原生验证能力,包括指纹、面部识别、系统锁屏密码、图案解锁等,全程走系统原生验证流程,不会获取用户的隐私验证数据,安全性有保障。
1. 引入依赖
在项目的pubspec.yaml文件中添加依赖:
dependencies: flutter: sdk: flutter local_auth: ^2.3.0 # 可替换为当前最新稳定版本
执行flutter pub get完成依赖安装。
2. 平台权限配置
Android 端
在android/app/src/main/AndroidManifest.xml中添加生物验证权限:
<!-- 适配Android 6.0及以上版本的生物识别权限 --> <uses-permission android:name="android.permission.USE_BIOMETRIC" />
最低兼容Android API 23,低于该版本的系统会自动降级到锁屏密码验证流程。
iOS 端
在ios/Runner/Info.plist中添加FaceID使用说明:
<key>NSFaceIDUsageDescription</key> <string>需要验证身份以访问受保护的页面</string>
最低兼容iOS 9.0,系统会自动匹配用户当前设置的锁屏验证方式。
3. 核心验证逻辑实现
封装验证调用方法:
import 'package:local_auth/local_auth.dart'; import 'package:local_auth_android/local_auth_android.dart'; import 'package:local_auth_darwin/local_auth_darwin.dart'; Future<bool> checkIdentityAuth() async { final LocalAuthentication auth = LocalAuthentication(); // 先校验设备是否支持系统验证 bool deviceSupport = await auth.isDeviceSupported(); if (!deviceSupport) { // 设备无系统验证能力时可自定义降级逻辑,比如应用内密码校验 return false; } try { return await auth.authenticate( // 验证弹窗上展示的提示文本 localizedReason: '请验证身份以访问该页面', // 双端弹窗自定义文案 authMessages: const [ AndroidAuthMessages( signInTitle: '身份验证', cancelButton: '取消', ), IOSAuthMessages( cancelButton: '取消', ), ], options: AuthenticationOptions( // 生物识别失败后自动弹出系统锁屏密码/图案验证入口 biometricOnly: false, // 验证过程中切后台再返回不会中断验证 stickyAuth: true, // 自动展示系统级验证错误提示 useErrorDialogs: true, ), ); } catch (e) { return false; } }
4. 页面访问控制
在跳转到受保护页面的逻辑前触发验证即可:
// 示例:点击按钮跳转受保护页面 void navigateToProtectedPage(BuildContext context) async { bool authPass = await checkIdentityAuth(); if (authPass && context.mounted) { Navigator.push( context, MaterialPageRoute(builder: (context) => const ProtectedPage()), ); } }
注意事项
- 所有验证UI都是系统原生渲染,不需要自行实现验证界面,也无法篡改验证逻辑,符合系统安全规范。
- 如果用户未设置任何系统锁屏验证,
isDeviceSupported会返回false,可根据业务需求自行处理降级方案。
内容的提问来源于stack exchange,提问作者MNC Aubin
相关产品推荐
相关产品推荐

