Flutter每日库: local_auth本地设备验证插件

在移动应用开发中,用户隐私和安全至关重要。你是否想过为APP添加类似手机解锁的本地身份验证功能?今天介绍的local_auth插件,正是Flutter开发者实现指纹、人脸识别的终极武器!无需复杂代码,轻松打造安全又炫酷的认证体验

功能亮点

  • 多平台支持:兼容iOS(Face ID/Touch ID)和Android(指纹/人脸)
  • 一键验证:调用系统原生界面,用户体验无缝衔接
  • 灵活配置:支持生物识别+密码双验证模式
  • 异常处理:智能识别硬件锁死、权限异常等场景

安装方式

csharp 复制代码
flutter pub add local_auth

详细配置和示例

iOS和安卓平台的配置

iOS需要再info.plist中配置face ID的权限

vbnet 复制代码
<key>NSFaceIDUsageDescription</key>
<string>Why is my app authenticating using face id?</string>

安卓配置如下

1、修改安卓的原生MainActivity的父类

kotlin 复制代码
import io.flutter.embedding.android.FlutterActivity
​
class MainActivity : FlutterActivity()
​
// 修改为:
import io.flutter.embedding.android.FlutterFragmentActivity
​
class MainActivity : FlutterFragmentActivity ()

2、在AndroidManifest.xml添加权限

ini 复制代码
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.app">
  <uses-permission android:name="android.permission.USE_BIOMETRIC"/>
<manifest>

硬件能力检测

ini 复制代码
final auth = LocalAuthentication();
​
// 检测设备是否支持
bool isSupported = await auth.isDeviceSupported();
​
// 查看已注册的生物识别类型
List<BiometricType> types = await auth.getAvailableBiometrics();
// 可能返回:fingerprint(指纹)、face(人脸)、strong(高安全级别)

完整代码示例

dart 复制代码
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:local_auth/local_auth.dart';
​
class TestPage extends StatefulWidget {
  const TestPage({super.key});
​
  @override
  State<TestPage> createState() => _TestPageState();
}
​
class _TestPageState extends State<TestPage> {
  final LocalAuthentication auth = LocalAuthentication();
​
  Future<void> _checkBiometrics() async {
    // canCheckBiometrics 仅指示硬件是否支持,并不表示设备是否已注册任何生物识别信息,有可能未录入指纹或者人脸
    final bool canAuthenticateWithBiometrics = await auth.canCheckBiometrics;
    final bool isDeviceSupported = await auth.isDeviceSupported();
    debugPrint(
      "canAuthenticateWithBiometrics = $canAuthenticateWithBiometrics isDeviceSupported = $isDeviceSupported",
    );
  }
​
  Future<void> _getAvailableBiometricsData() async {
    final List<BiometricType> availableBiometrics = await auth
        .getAvailableBiometrics();
​
    if (availableBiometrics.isEmpty) {
      debugPrint("设备未注册任何生物识别信息");
      return;
    }
​
    for (BiometricType item in availableBiometrics) {
      debugPrint("type = ${item.name}");
    }
​
    // if (availableBiometrics.contains(BiometricType.strong) ||
    //     availableBiometrics.contains(BiometricType.face)) {
    // }
  }
​
  Future<void> authenticateTest() async {
    try {
      final bool didAuthenticate = await auth.authenticate(
        localizedReason: 'Please authenticate to show account balance',
        biometricOnly: true, // 强制使用生物识别认证
        persistAcrossBackgrounding: true, // 应用未验证就退到后台,再次在前台运行时,重试身份验证
      );
​
      if (didAuthenticate) {
        debugPrint("success");
      } else {
        debugPrint("fail");
      }
    } on LocalAuthException catch (e) {
      // 异常处理  temporaryLockout  biometricLockout  指纹或face ID被锁定
      debugPrint("LocalAuthException ${e.toString()}");
    } on PlatformException catch (e) {
      debugPrint("PlatformException ${e.message}");
    }
  }
​
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('local_auth')),
        body: Column(
          children: [
            ElevatedButton(
              onPressed: () {
                _checkBiometrics();
              },
              child: const Text('检查此设备是否支持本地身份验证'),
            ),
​
            ElevatedButton(
              onPressed: () {
                _getAvailableBiometricsData();
              },
              child: const Text('获取注册生物识别信息的列表'),
            ),
​
            ElevatedButton(
              onPressed: () {
                authenticateTest();
              },
              child: const Text('Check biometrics'),
            ),
          ],
        ),
      ),
    );
  }
}
​

以上就是该库在移动端的使用情况了。

相关推荐
2601_949833392 分钟前
flutter_for_openharmony口腔护理app实战+预约管理实现
android·javascript·flutter
牛马1112 小时前
Flutter OverlayEntry
flutter
2603_949462103 小时前
Flutter for OpenHarmony社团管理App实战:预算管理实现
android·javascript·flutter
2601_949975794 小时前
Flutter for OpenHarmony艺考真题题库+帮助中心实现
flutter
子春一7 小时前
Flutter for OpenHarmony:构建一个 Flutter 井字棋游戏,深入解析状态驱动逻辑、胜利判定与极简交互设计
flutter·游戏·交互
雨季6667 小时前
Flutter 三端应用实战:OpenHarmony “极简手势轨迹球”——指尖与屏幕的诗意对话
开发语言·javascript·flutter
ujainu7 小时前
Flutter + OpenHarmony 游戏开发进阶:CustomPainter 手绘游戏世界——从球体到轨道
flutter·游戏·信息可视化·openharmony
雨季6668 小时前
Flutter 三端应用实战:OpenHarmony “专注时光盒”——在碎片洪流中守护心流的数字容器
开发语言·前端·安全·flutter·交互
kirk_wang8 小时前
Flutter艺术探索-Flutter相机与相册:camera库与image_picker集成
flutter·移动开发·flutter教程·移动开发教程
子春一8 小时前
Flutter for OpenHarmony:构建一个 Flutter 贪吃蛇游戏,深入解析状态机、碰撞检测与响应式游戏循环
flutter·游戏