You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 07:21:02