Flutter人脸识别认证插件caf_face_auth的使用

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

Flutter人脸识别认证插件caf_face_auth的使用

FaceAuth 插件允许进行带活体检测的人脸匹配,适用于安全登录流程或高价值金融交易。

文档

查看我们为该插件提供的专用文档页面。更多详细信息请参见 Caf的官方文档

要求

Flutter版本

Flutter 版本
Flutter 1.20+
Dart 版本
Dart >=2.15.0 <4.0.0

Android版本

Android 版本
minSdk 21
compileSdk 33

iOS版本

iOS 版本
iOS Target 13.0+
Xcode 15.4+
Swift 5.3.2+

完整示例代码

import 'package:bmprogresshud/bmprogresshud.dart';
import 'package:caf_face_auth/face_auth.dart';
import 'package:caf_face_auth/face_auth_enums.dart';
import 'package:caf_face_auth/face_auth_events.dart';
import 'package:flutter/material.dart';

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

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  var _scanInProgress = false;

  String _result = "";
  String _description = "";

  String mobileToken = "";
  String personId = "";

  var personIdController = TextEditingController();
  var mobileTokenController = TextEditingController();
  bool isBeta = true;

  [@override](/user/override)
  void initState() {
    super.initState();
  }

  void startFaceAuth() {
    personId = personIdController.text;
    mobileToken = mobileTokenController.text;

    setState(() {
      _scanInProgress = true;
      _result = "";
      _description = "";
    });
    ProgressHud.show(ProgressHudType.loading, 'Launching SDK');

    FaceAuth faceAuth = FaceAuth(mobileToken: mobileToken, personId: personId);

    faceAuth.setStage(isBeta ? CafStage.beta : CafStage.prod);
    faceAuth.setCameraFilter(CameraFilter.natural);
    faceAuth.setEnableScreenshots(true);

    // 设置其他参数

    final stream = faceAuth.start();

    stream.listen((event) {
      if (event.isFinal) {
        setState(() => _scanInProgress = false);
      }

      if (event is FaceAuthEventConnecting) {
        ProgressHud.show(ProgressHudType.loading, 'Loading...');
      } else if (event is FaceAuthEventConnected) {
        ProgressHud.dismiss();
      } else if (event is FaceAuthEventClosed) {
        ProgressHud.dismiss();
        setState(() {
          _result = "Canceled";
          _description = "用户关闭了SDK";
        });
        print('Canceled\n用户关闭了SDK');
      } else if (event is FaceAuthEventSuccess) {
        ProgressHud.showAndDismiss(ProgressHudType.success, 'Success!');
        setState(() {
          _result = "Success";
          _description = "SignedResponse: ${event.signedResponse}";
        });
        print('Success!\nSignedResponse: ${event.signedResponse}');
      } else if (event is FaceAuthEventFailure) {
        ProgressHud.showAndDismiss(ProgressHudType.error, event.errorType!);
        setState(() {
          _result = "Failure";
          _description = personId.isEmpty
              ? '\n错误类型: ${event.errorType} \n错误信息: personId为空'
              : '\n错误类型: ${event.errorType} \n错误信息: ${event.errorDescription}';
        });
        print(
            'Failure!\n错误类型: ${event.errorType} \n错误信息: ${event.errorDescription}');
      }
    });

    if (!mounted) return;
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
            appBar: AppBar(
              title: const Text('FaceAuthenticator Demo'),
            ),
            body: ProgressHud(
                isGlobalHud: true,
                child: Container(
                    margin: const EdgeInsets.all(20.0),
                    child: Column(
                      children: [
                        Row(
                          children: [
                            Expanded(
                              child: TextField(
                                controller: mobileTokenController,
                                decoration: const InputDecoration(
                                  border: OutlineInputBorder(),
                                  labelText: '输入mobileToken',
                                ),
                              ),
                            )
                          ],
                        ),
                        const SizedBox(height: 10.0),
                        Row(
                          children: [
                            Expanded(
                              child: TextField(
                                controller: personIdController,
                                decoration: const InputDecoration(
                                  border: OutlineInputBorder(),
                                  labelText: '输入您的ID/CPF',
                                ),
                              ),
                            )
                          ],
                        ),
                        Row(
                          children: [
                            Expanded(
                              child: SwitchListTile(
                                  title: const Text('Beta'),
                                  value: isBeta,
                                  onChanged: (bool value) {
                                    setState(() {
                                      isBeta = value;
                                    });
                                  }),
                            )
                          ],
                        ),
                        Row(
                          children: [
                            ElevatedButton(
                              onPressed: _scanInProgress
                                  ? null
                                  : () {
                                      startFaceAuth();
                                    },
                              child: const Text('启动FaceAuth'),
                            )
                          ],
                        ),
                        Row(
                          children: [
                            Container(
                                margin: const EdgeInsets.only(top: 10.0),
                                child: Text("结果: $_result"))
                          ],
                        ),
                        Row(
                          mainAxisAlignment: MainAxisAlignment.spaceBetween,
                          children: [
                            Expanded(
                              child: Text("描述:\n$_description",
                                  maxLines: 15,
                                  overflow: TextOverflow.ellipsis),
                            )
                          ],
                        ),
                      ],
                    )))));
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用caf_face_auth插件进行人脸识别认证的示例代码。caf_face_auth是一个Flutter插件,用于在Android和iOS平台上实现人脸识别认证功能。

首先,你需要在你的pubspec.yaml文件中添加caf_face_auth依赖项:

dependencies:
  flutter:
    sdk: flutter
  caf_face_auth: ^最新版本号  # 请确保使用最新版本

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

接下来,在你的Flutter项目中,你可以按照以下步骤使用caf_face_auth插件进行人脸识别认证:

  1. 导入插件

在你的Dart文件中导入caf_face_auth插件:

import 'package:caf_face_auth/caf_face_auth.dart';
import 'package:flutter/material.dart';
  1. 请求人脸识别权限

在需要进行人脸识别认证的地方,首先请求人脸识别权限:

Future<void> requestFaceAuthPermission() async {
  bool hasPermission = await CafFaceAuth.hasFaceAuthPermission();
  if (!hasPermission) {
    bool result = await CafFaceAuth.requestFaceAuthPermission();
    if (!result) {
      // 处理权限请求被拒绝的情况
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('人脸识别权限被拒绝')),
      );
      return;
    }
  }
  // 权限已获取,继续进行人脸识别认证
}
  1. 进行人脸识别认证

使用CafFaceAuth.authenticate方法进行人脸识别认证:

Future<void> authenticateFace() async {
  try {
    bool authenticated = await CafFaceAuth.authenticate();
    if (authenticated) {
      // 用户已认证
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('人脸识别认证成功')),
      );
    } else {
      // 用户未认证(例如,面部不匹配)
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('人脸识别认证失败')),
      );
    }
  } catch (e) {
    // 处理异常(例如,设备不支持人脸识别)
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text('人脸识别认证发生错误: ${e.message}')),
    );
  }
}
  1. 在UI中调用

在你的UI组件中,例如一个按钮点击事件中调用上述方法:

class FaceAuthScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('人脸识别认证'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: () async {
                await requestFaceAuthPermission();
                await authenticateFace();
              },
              child: Text('进行人脸识别认证'),
            ),
          ],
        ),
      ),
    );
  }
}

FaceAuthScreen作为你的主屏幕或导航到一个新的屏幕,以便用户可以进行人脸识别认证。

注意

  • 在实际项目中,你应该处理更多的边界情况和错误处理。
  • caf_face_auth插件可能需要在Android和iOS项目中配置一些额外的权限和设置。请参考插件的官方文档进行详细的配置。
  • 确保在发布应用之前测试所有相关的功能,特别是在不同的设备和操作系统版本上。
回到顶部