Flutter人脸识别认证插件caf_face_auth的使用
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
插件进行人脸识别认证:
- 导入插件
在你的Dart文件中导入caf_face_auth
插件:
import 'package:caf_face_auth/caf_face_auth.dart';
import 'package:flutter/material.dart';
- 请求人脸识别权限
在需要进行人脸识别认证的地方,首先请求人脸识别权限:
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;
}
}
// 权限已获取,继续进行人脸识别认证
}
- 进行人脸识别认证
使用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}')),
);
}
}
- 在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项目中配置一些额外的权限和设置。请参考插件的官方文档进行详细的配置。- 确保在发布应用之前测试所有相关的功能,特别是在不同的设备和操作系统版本上。