Flutter身份验证插件feyins_flutter_kyc的使用
Flutter身份验证插件feyins_flutter_kyc的使用
feyins_flutter_kyc
插件是一个功能强大且易于使用的工具,可以为您的 Flutter 应用程序带来必要的了解客户(KYC)功能。
特性
实时活体检测
该插件允许您使用设备的摄像头进行实时活体检测。确保在 KYC 过程中用户是实际存在的,防止欺诈行为。
身份证件扫描
利用先进的计算机视觉技术,从官方身份证件(如护照、驾照、国民身份证等)中提取信息。通过可靠的和准确的数据提取来加速 KYC 过程。
面部匹配
通过比较扫描的身份证图像与用户提供的自拍图像之间的面部特征,增强身份验证。
可定制的UI
根据您的应用品牌和设计需求,调整用户界面。自定义颜色、字体和布局以创建一致的用户体验。
隐私和安全
我们重视用户的隐私和安全。我们的插件实施了行业标准的安全措施,以保护用户数据的安全。
开始使用
要开始使用 feyins_flutter_kyc
插件,请遵循以下步骤:
flutter pub add feyins_flutter_kyc
Android配置
在 android/app/src/main/AndroidManifest.xml
文件中添加以下内容:
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
<uses-permission android:name="android.permission.CAMERA" />
在 <activity>
中添加:
android:requestLegacyExternalStorage="true"
在 android/app/build.gradle
中将 minSdkVersion
设置为 21:
defaultConfig {
minSdkVersion 21
}
在 android/build.gradle
中确保 Kotlin 版本为 1.8.0:
buildscript {
ext.kotlin_version = '1.8.0'
}
身份证扫描
对于身份证扫描,有两种情况需要考虑:关键词和值在同一行(图1),或者关键词和值在下一行(图2)。
在 EkycServices().openImageScanner()
函数中,传递关键词名称和布尔值:
- 如果关键词和值在同一行,传递
true
- 如果关键词和值不在同一行,传递
false
例如:
Map<String, bool> keyWordData = {
'Name' : false,
'Date of Birth' : true,
'NID No' : false
};
现在将这个 keyWordData
传递给 EkycServices().openImageScanner()
:
ExtractedDataFromId? extractedDataFromId;
extractedDataFromId = await EkycServices().openImageScanner(keyWordData);
ExtractedDataFromId
包含 extractedText
。如果 OCR 文本未从这些情况中解析出来,您可以从 extractedText
中操作文本。
面部匹配
运行面部匹配,请访问以下链接并下载文件夹:
https://drive.google.com/drive/folders/1Po7VxJsUcH_W0XOenUHzg_IDu1s3_do8?usp=sharing
下载文件夹并在文件夹目录中运行以下命令(适用于 Ubuntu):
python3 face_match.py
对于 Windows:
python face_match.py
您将在控制台看到类似以下内容的信息:
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:5000
* Running on http://10.0.3.50:5000
复制最后一个地址并将其与两个图像路径(自拍照和身份证图像)一起传递给 EkycServices().runFaceMatch
函数:
await EkycServices().runFaceMatch("http://10.0.3.50:5000", selfieImage?.path, imageAndText?.imagePath);
完整示例代码
以下是一个完整的示例代码,展示了如何使用 feyins_flutter_kyc
插件。
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:feyins_flutter_kyc/feyins_flutter_kyc.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'EKYC Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
File? selfieImage;
ExtractedDataFromId? extractedDataFromId;
bool? isMatchFace;
bool isloading = false;
bool faceMatchButtonPressed = false;
Map<String, bool> keyWordData = {
'Name': false,
'Date of Birth': true,
'NID No': false
};
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
TextButton(
onPressed: () {
EkycServices().livenessDetct().then((result) {
if (result != null) {
print("File path: $result");
setState(() {
selfieImage = result;
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
ShowImage(selfieImage: selfieImage)),
);
});
} else {
print("Liveness detection failed.");
}
}).catchError((error) {
print("Error occurred during liveness detection: $error");
});
},
style: TextButton.styleFrom(
foregroundColor: Colors.white,
padding: const EdgeInsets.all(16.0),
backgroundColor: Colors.blue,
elevation: 9.0,
textStyle: const TextStyle(
fontSize: 20,
),
),
child: Text("Liveness Detection"),
),
],
),
),
);
}
}
class ShowImage extends StatelessWidget {
File? selfieImage;
ShowImage({this.selfieImage});
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Liveness Detect succesful!"),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Image.file(selfieImage!),
SizedBox(
height: 20,
),
TextButton(
onPressed: () {
Navigator.pop(context);
},
style: TextButton.styleFrom(
foregroundColor: Colors.white,
padding: const EdgeInsets.all(16.0),
backgroundColor: Colors.blue,
elevation: 9.0,
textStyle: const TextStyle(
fontSize: 20,
),
),
child: Text("Retake"),
),
],
),
),
);
}
}
更多关于Flutter身份验证插件feyins_flutter_kyc的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter身份验证插件feyins_flutter_kyc的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
feyins_flutter_kyc
是一个用于Flutter应用程序的身份验证插件,通常用于KYC(Know Your Customer)流程。KYC是金融机构和其他企业用来验证客户身份的过程,以确保其合法性。
以下是如何在Flutter项目中使用 feyins_flutter_kyc
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 feyins_flutter_kyc
插件的依赖。
dependencies:
flutter:
sdk: flutter
feyins_flutter_kyc: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
以安装依赖。
2. 导入插件
在你的Dart文件中导入插件:
import 'package:feyins_flutter_kyc/feyins_flutter_kyc.dart';
3. 初始化插件
在使用插件之前,通常需要进行初始化。这可能包括设置API密钥或其他配置。
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化KYC插件
await FeyinsFlutterKyc.init(
apiKey: 'YOUR_API_KEY',
environment: Environment.sandbox, // 或 Environment.production
);
runApp(MyApp());
}
4. 启动KYC流程
你可以通过调用插件提供的方法来启动KYC流程。通常,这涉及到打开一个界面,用户可以在其中上传身份证、自拍照片等信息。
void startKycProcess() async {
try {
// 启动KYC流程
final result = await FeyinsFlutterKyc.startKyc(
userId: 'USER_ID', // 用户的唯一标识
userEmail: 'user@example.com', // 用户的电子邮件
userPhone: '+1234567890', // 用户的电话号码
);
// 处理KYC结果
if (result.status == KycStatus.success) {
print('KYC成功');
} else {
print('KYC失败: ${result.message}');
}
} catch (e) {
print('启动KYC流程时出错: $e');
}
}
5. 处理KYC结果
KYC流程完成后,你可以根据返回的结果进行相应的处理。通常,结果会包含一个状态码和消息。
void handleKycResult(KycResult result) {
switch (result.status) {
case KycStatus.success:
print('KYC成功');
break;
case KycStatus.failed:
print('KYC失败: ${result.message}');
break;
case KycStatus.pending:
print('KYC待处理');
break;
default:
print('未知的KYC状态');
}
}
6. 处理错误
在使用插件时,可能会遇到各种错误,例如网络问题、API错误等。确保在代码中处理这些错误。
try {
final result = await FeyinsFlutterKyc.startKyc(
userId: 'USER_ID',
userEmail: 'user@example.com',
userPhone: '+1234567890',
);
handleKycResult(result);
} catch (e) {
print('发生错误: $e');
}