Flutter生物识别认证插件mantra_biometric的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter生物识别认证插件mantra_biometric的使用

mantra_biometric

pub package

注意: 我们已测试此插件与Mantra MFS100-Fingerprint-Sensor设备。

该插件用于在Flutter应用中启用基于生物识别的Aadhaar认证。支持Android、Web和Windows平台。

平台支持

Android iOS MacOS Web Linux Windows
✔️ ✔️

前提条件

安装Mantra MFS 100驱动程序和RD服务

Android

Web, Windows

连接Mantra MFS 100到计算机

  • 将生物识别设备插入USB端口。
  • 第一次初始化时,右下角会提示拔出并重新插入设备。
  • 成功连接后,屏幕右下角会显示“Biometric device attached”(生物识别设备已连接)。
  • 成功连接到服务器后,会显示“Framework ready to use”(框架准备就绪)。

使用方法

要在项目中使用此插件,请将其添加为依赖项:

dependencies:
  mantra_biometric: ^版本号

Flutter Web支持

请在您的Flutter项目的web/index.html文件内的<head>标签内添加以下代码片段:

<script src="./assets/packages/mantra_biometric/assets/mantra.js" defer></script>

示例代码

以下是一个完整的示例代码,展示了如何使用mantra_biometric插件进行设备信息获取和指纹扫描。

import 'dart:convert';
import 'dart:developer';
import 'package:flutter/material.dart';

import 'package:mantra_biometric/mantra_biometric.dart';
import 'package:mantra_biometric/utils/mantra_plugin_exception.dart';
import 'package:xml/xml.dart';
import 'package:collection/collection.dart';

void main() {
  runApp(MaterialApp(home: const MyApp()));
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _mantraBiometricPlugin = MantraBiometric();

  @override
  void initState() {
    super.initState();
  }

  // 显示警告对话框
  displyAlert(String message) {
    showDialog(
        context: context,
        builder: (context) => AlertDialog(
              content: Text(message),
            ));
  }

  String result = "";

  // 获取设备信息
  getDeviceInfo() async {
    try {
      String output = await _mantraBiometricPlugin.getDeviceInformation() ?? "";
      result = output;
      setState(() {});
    } on RDClientNotFound catch (e) {
      displyAlert("安装客户端");
    } catch (e) {
      displyAlert("发生错误");
    }
  }

  // 扫描指纹
  scanFingerPrint() async {
    try {
      String wadh = "";
      String pidOptions =
          "<PidOptions ver=\"1.0\"> <Opts fCount=\"1\" fType=\"2\" pCount=\"0\" format=\"0\" pidVer=\"2.0\" wadh=\"$wadh\" timeout=\"20000\"  posh=\"UNKNOWN\" env=\"P\" /></PidOptions>";
      result = await _mantraBiometricPlugin.captureFingerPrint(
              pidOptions: pidOptions) ??
          "";

      setState(() {});
    } on RDClientNotFound catch (e) {
      log("${e.code}");
      displyAlert("安装客户端");
    } catch (e) {
      displyAlert("发生错误 ${e.runtimeType} $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Mantra Biometric 示例'),
      ),
      body: SingleChildScrollView(
        child: Column(
          children: [
            MaterialButton(
              onPressed: getDeviceInfo,
              child: const Text("获取设备信息"),
            ),
            const SizedBox(
              height: 20,
            ),
            MaterialButton(
              onPressed: scanFingerPrint,
              child: const Text("扫描指纹"),
            ),
            const SizedBox(
              height: 20,
            ),
            Text("$result")
          ],
        ),
      ),
    );
  }
}

异常处理

import 'package:mantra_biometric/utils/mantra_plugin_exception.dart';

// 如果未安装RD服务客户端,则抛出异常
RDClientNotFound

// 如果传递了错误的pidOptions参数给captureFingerPrint方法,则抛出异常
RDException

更多关于Flutter生物识别认证插件mantra_biometric的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter生物识别认证插件mantra_biometric的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用mantra_biometric插件进行生物识别认证的示例代码。这个插件支持指纹、面部识别等多种生物识别方式。

首先,确保你已经在pubspec.yaml文件中添加了mantra_biometric依赖:

dependencies:
  flutter:
    sdk: flutter
  mantra_biometric: ^latest_version  # 替换为最新版本号

然后运行flutter pub get来安装依赖。

接下来,你可以在你的Flutter项目中按如下方式使用mantra_biometric插件:

import 'package:flutter/material.dart';
import 'package:mantra_biometric/mantra_biometric.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Biometric Authentication Example'),
        ),
        body: Center(
          child: BiometricAuthButton(),
        ),
      ),
    );
  }
}

class BiometricAuthButton extends StatefulWidget {
  @override
  _BiometricAuthButtonState createState() => _BiometricAuthButtonState();
}

class _BiometricAuthButtonState extends State<BiometricAuthButton> {
  final Biometric _biometric = Biometric();

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: () async {
        try {
          bool isAvailable = await _biometric.canAuthenticate;
          if (!isAvailable) {
            ScaffoldMessenger.of(context).showSnackBar(
              SnackBar(content: Text('Biometric authentication is not available on this device.')),
            );
            return;
          }

          var biometricType = await _biometric.getAvailableBiometrics();
          print('Available Biometrics: $biometricType');

          bool isAuthenticated = await _biometric.authenticate(
            localizedReason: 'Please authenticate to continue',
            stickyAuth: true,
          );

          if (isAuthenticated) {
            ScaffoldMessenger.of(context).showSnackBar(
              SnackBar(content: Text('Authenticated successfully!')),
            );
          } else {
            ScaffoldMessenger.of(context).showSnackBar(
              SnackBar(content: Text('Authentication failed.')),
            );
          }
        } catch (e) {
          print('Error during biometric authentication: $e');
          ScaffoldMessenger.of(context).showSnackBar(
            SnackBar(content: Text('Error: ${e.message}')),
          );
        }
      },
      child: Text('Authenticate'),
    );
  }
}

在这个示例中:

  1. 我们首先检查设备上是否可用生物识别认证功能。
  2. 然后,我们获取可用的生物识别类型(例如,指纹或面部识别)。
  3. 使用authenticate方法进行生物识别认证,并传入一个本地化的理由字符串,告诉用户为什么需要进行认证。
  4. 根据认证结果,显示相应的SnackBar消息。

请注意,在实际应用中,你可能需要处理更多的错误情况和用户交互细节,例如处理用户取消认证的情况。此外,根据具体需求,你可能还需要在认证成功后执行特定的逻辑操作。

回到顶部