Flutter身份验证插件idcheckio的使用
Flutter身份验证插件idcheckio的使用
在本教程中,我们将介绍如何在Flutter应用中使用idcheckio
插件。此插件允许用户进行文档扫描和身份验证。
平台特定配置
iOS
- 在项目文件夹中,进入你的iOS目录并打开Podfile:
# 更改文件顶部的最低版本至至少为'12.0'
platform :ios, '12.0'
# 添加以下行到目标部分上方
source 'https://github.com/CocoaPods/Specs.git'
source 'https://git-externe.rennes.ariadnext.com/idcheckio/axt-podspecs.git'
- 使用以下命令获取SDK:
pod install --repo-update
注意:你需要在$HOME
文件夹下设置一个.netrc
文件,并用我们的凭证填充它。更多详细信息,请查阅官方文档。
- 打开
*.plist
文件并添加以下条目:
"Privacy - Camera Usage Description" : "Camera is being used to scan documents"
Android
- 打开你的构建文件
android/app/build.gradle
,在android
块中添加以下行:
packagingOptions {
pickFirst 'META-INF/NOTICE'
pickFirst 'META-INF/LICENSE'
pickFirst 'META-INF/license.txt'
pickFirst 'META-INF/notice.txt'
pickFirst 'META-INF/DEPENDENCIES'
}
- 若要访问我们外部的nexus以检索最新版本的IDCheck.io SDK,你必须更新
plugin
项目的gradle文件PATH_TO_PLUGIN_FOLDER/android/build.gradle
,并将其中的$YOUR_USERNAME
和$YOUR_PASSWORD
替换为我们支持团队提供的凭证。
使用方法
导入插件
首先,在你的Dart文件中导入idcheckio
插件:
import 'package:idcheckio/idcheckio.dart';
激活SDK
在捕获任何文档之前,你需要激活许可证。你可以使用activate()
方法,传入激活令牌:
Future<void> activateSDK() async {
bool activationStatus = false;
try {
await _idcheckioPlugin.activate(
idToken: _activationToken,
extractData: true);
activationStatus = true;
} on PlatformException catch (e) {
activationStatus = false;
ErrorMsg errorMsg = ErrorMsg.fromJson(jsonDecode(e.message));
debugPrint("An error happened during the activation : ${errorMsg.cause} - ${errorMsg.details} - ${errorMsg.message}");
}
if (!mounted) return;
setState(() {
_sdkActivated = activationStatus;
});
}
捕获文档
要开始捕获文档,可以使用start()
方法。这将返回一个IdcheckioResult
对象:
Future<void> capture() async{
IDCheckioResult? result;
IDCheckioParams paramsLiveness = IDCheckioParams(
IDCheckioParamsBuilder()
..docType = DocumentType.LIVENESS
..orientation = IDCheckioOrientation.PORTRAIT
..confirmAbort = true
);
IDCheckTheme theme = IDCheckTheme(primaryColor: "purple");
try {
result = await _idcheckioPlugin.start(paramsLiveness, _captureResult?.onlineContext, theme);
debugPrint('ID Capture Successful : ${result!.toJson()}', wrapWidth: 500);
} on PlatformException catch(e) {
ErrorMsg errorMsg = ErrorMsg.fromJson(jsonDecode(e.message));
debugPrint("An error happened during the capture : ${errorMsg.cause} - ${errorMsg.message} - ${errorMsg.subCause}");
}
if (!mounted) return;
setState(() {
_captureResult = result;
});
}
开始引导会话
若要开始一个引导会话,首先需要根据IPS文档创建一个新的IPS会话,然后调用startIps
方法,传入获取到的令牌。成功时结果为空,否则发送错误。如果想检索数据,可以在IPS上检查捕获的结果。
Future<void> startOnboarding() async {
IDCheckTheme theme = IDCheckTheme(primaryColor: "purple");
try {
await IDCheckio.startOnboarding(ipsController.text, theme);
} on PlatformException catch (e) {
ErrorMsg errorMsg = ErrorMsg.fromJson(jsonDecode(e.message));
debugPrint("An error happened during the ips session : ${errorMsg.cause} - ${errorMsg.message} - ${errorMsg.subCause}");
}
}
主题定制
如果你想更改SDK的颜色以匹配你的主题,可以通过提供颜色名称(对于Android是资源名称,对于iOS是资产名称)来创建一个IDCheckTheme()
对象:
IDCheckTheme myTheme = IDCheckTheme(primaryColor: "blue", borderColor: "white", foregroundColor: "white", backgroundColor: "blue");
现在你已经准备好了!🎉 若要了解更多关于这些方法及其参数的信息,请参阅官方的IDCheck.io Mobile SDK文档。
完整示例
下面是一个完整的示例代码,展示了如何在Flutter应用中使用idcheckio
插件:
import 'dart:async';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:idcheckio/idcheckio.dart';
import 'package:idcheckio/idcheckio_api.dart';
import 'package:idcheckio_example/theme.dart';
import 'params.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> {
final _activationToken = "4ISdBd6Ha1x/oyw6Cbss7KoZy9cQKKmAorBMXrtrTv12ooy/wJ5TxSWaJF7v2oGzFsSlZfss6ObaHH2T63AT2dqAx+vW1EHk22RkKtn+bAX0o3Pn6tYkNkBR5/rbrHqXAaHKyexzaTGeml+208D5Bf33msvg4LkvJh8TS1YxYA5RoBI=";
final _idcheckioPlugin = IDCheckio();
bool _sdkActivated = false;
IDCheckioResult? _captureResult;
String _onboardingFolderUid = "";
late Function() _onboardingListener;
TextEditingController onboardingController = new TextEditingController();
late ParamsListItem _selectedItem;
late SdkColor _selectedTheme;
late List<DropdownMenuItem<ParamsListItem>> _dropdownMenuItems;
late List<DropdownMenuItem<SdkColor>> _dropdownThemeItems;
List<SdkColor> _dropdownTheme = [
SdkColor.DEFAULT,
SdkColor.BLUE,
SdkColor.PURPLE,
SdkColor.DARK_GOLD
];
List<ParamsListItem> _dropdownItems = [
ParamsListItem("ID", paramsID),
ParamsListItem("Liveness", paramsLiveness),
ParamsListItem("Start Onboarding", null)..isOnboarding = true,
ParamsListItem("French health card", paramsFrenchHealthCard),
ParamsListItem("Selfie", paramsSelfie),
ParamsListItem("Address proof", paramsAddressProof),
ParamsListItem("Vehicle registration", paramsVehicleRegistration),
ParamsListItem("Iban", paramsIban),
ParamsListItem("Attachment", paramsAttachment)
];
void listener() {
setState(() {
_onboardingFolderUid = onboardingController.text;
});
}
[@override](/user/override)
void initState() {
super.initState();
_dropdownMenuItems = buildDropDownMenuItems(_dropdownItems);
_selectedItem = _dropdownMenuItems[0].value!;
_dropdownThemeItems = buildDropDownTheme(_dropdownTheme);
_selectedTheme = _dropdownThemeItems[0].value!;
_onboardingListener = listener;
onboardingController.addListener(_onboardingListener);
}
void dispose() {
onboardingController.removeListener(_onboardingListener);
super.dispose();
}
Future<void> activateSDK() async {
bool activationStatus = false;
try {
await _idcheckioPlugin.activate(
idToken: _activationToken,
extractData: true);
activationStatus = true;
} on PlatformException catch (e) {
activationStatus = false;
ErrorMsg errorMsg = ErrorMsg.fromJson(jsonDecode(e.message!));
debugPrint("An error happened during the activation : ${errorMsg.cause} - ${errorMsg.details} - ${errorMsg.message}");
}
if (!mounted) return;
setState(() {
_sdkActivated = activationStatus;
});
}
Future<void> capture() async {
IDCheckioResult? result;
IDCheckioParamsBuilder builder = _selectedItem.params!;
IDCheckTheme theme = _selectedTheme.theme;
IDCheckioParams params = IDCheckioParams(builder);
try {
// Capture mode
result = await _idcheckioPlugin.start(params, _captureResult?.onlineContext, theme);
debugPrint('ID Capture Successful : ${result.toJson()}', wrapWidth: 500);
} on PlatformException catch (e) {
ErrorMsg errorMsg = ErrorMsg.fromJson(jsonDecode(e.message!));
debugPrint("An error happened during the capture : ${errorMsg.cause} - ${errorMsg.message} - ${errorMsg.subCause}");
}
if (!mounted) return;
setState(() {
_captureResult = result;
});
}
Future<void> startOnboarding() async {
try {
IDCheckTheme theme = _selectedTheme.theme;
await _idcheckioPlugin.startOnboarding(onboardingController.text, theme);
} on PlatformException catch (e) {
ErrorMsg errorMsg = ErrorMsg.fromJson(jsonDecode(e.message!));
debugPrint("An error happened during the onboarding session : ${errorMsg.cause} - ${errorMsg.message} - ${errorMsg.subCause}");
}
}
List<DropdownMenuItem<ParamsListItem>> buildDropDownMenuItems(List listItems) {
List<DropdownMenuItem<ParamsListItem>> items = [];
for (ParamsListItem listItem in listItems as Iterable<ParamsListItem>) {
items.add(
DropdownMenuItem(
child: Text(listItem.name),
value: listItem,
),
);
}
return items;
}
List<DropdownMenuItem<SdkColor>> buildDropDownTheme(List themes) {
List<DropdownMenuItem<SdkColor>> items = [];
for (SdkColor theme in themes as Iterable<SdkColor>) {
items.add(
DropdownMenuItem(
child: Text(theme.name),
value: theme,
),
);
}
return items;
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('IDCheck.io SDK Flutter Demo'),
),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(
getTitle(),
textAlign: TextAlign.center,
style: TextStyle(fontSize: 24.0)
),
SizedBox(height: 60),
DropdownButton(
items: _dropdownMenuItems,
value: _selectedItem,
onChanged: (dynamic value) {
setState(() {
_selectedItem = value;
});
},
),
DropdownButton(
items: _dropdownThemeItems,
value: _selectedTheme,
onChanged: (dynamic value) {
setState(() {
_selectedTheme = value;
});
},
),
SizedBox(height: 20),
ElevatedButton(
child: new Text(_sdkActivated ? "SDK已经激活" : "激活SDK"),
onPressed: _sdkActivated ? null : activateSDK,
),
Column(
children: buildChildren(),
),
SizedBox(height: 40),
Text(
_captureResult != null
? _captureResult!.document != null && _captureResult!.document is IdentityDocument
? "你好 ${(_captureResult!.document as IdentityDocument).fields[IdentityDocumentField.firstNames]!.value!.split(" ").first}"
" "
"${(_captureResult!.document as IdentityDocument).fields[IdentityDocumentField.lastNames]!.value}! 🤓"
: "捕获成功 👍"
: "请先扫描身份证",
style: TextStyle(fontSize: 20.0)),
],
),
),
),
);
}
String getTitle() {
String title;
if(_sdkActivated && _selectedItem.isOnboarding && _onboardingFolderUid.isEmpty) {
title = "你需要提供一个文件夹名以开始引导会话。";
} else if(_sdkActivated ) {
title = "SDK已激活! 🎉";
} else {
title = "SDK未激活";
}
return title;
}
List<Widget> buildChildren() {
List<Widget> builder = [];
if(_selectedItem.isOnboarding){
builder.add(
Padding(
child: TextField(
controller: onboardingController,
decoration: InputDecoration(
border: OutlineInputBorder(),
hintText: '请输入你的引导文件夹uid。',
),
),
padding: EdgeInsets.only(left: 32.0, right: 32.0),
)
);
}
String buttonText;
Function()? onClick;
if(_sdkActivated && _selectedItem.isOnboarding) {
buttonText = "开始引导会话";
onClick = _onboardingFolderUid.isEmpty ? null : startOnboarding;
} else if(_sdkActivated) {
buttonText = "捕获文档";
onClick = capture;
} else {
buttonText = "SDK未激活";
onClick = null;
}
builder.add(
ElevatedButton(
child: new Text(buttonText),
onPressed: onClick,
)
);
return builder;
}
}
更多关于Flutter身份验证插件idcheckio的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter身份验证插件idcheckio的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
idcheckio
是一个用于身份验证的 Flutter 插件,它可以帮助开发者集成身份验证功能,例如身份证、护照、驾驶证等证件的验证。以下是如何使用 idcheckio
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 idcheckio
插件的依赖。
dependencies:
flutter:
sdk: flutter
idcheckio: ^最新版本
然后运行 flutter pub get
来获取依赖。
2. 初始化插件
在你的 Dart 文件中,导入 idcheckio
插件并初始化它。
import 'package:idcheckio/idcheckio.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomeScreen(),
);
}
}
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
@override
void initState() {
super.initState();
// 初始化 idcheckio
IdCheckio.initialize(
apiKey: 'YOUR_API_KEY',
apiSecret: 'YOUR_API_SECRET',
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('idcheckio Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
// 启动身份验证流程
var result = await IdCheckio.startVerification();
if (result != null) {
print('Verification Result: $result');
} else {
print('Verification failed or was canceled');
}
},
child: Text('Start Verification'),
),
),
);
}
}
3. 启动身份验证
在 onPressed
事件中,调用 IdCheckio.startVerification()
来启动身份验证流程。该方法会返回一个包含验证结果的对象。
4. 处理验证结果
根据 IdCheckio.startVerification()
返回的结果,你可以处理验证成功或失败的情况。
var result = await IdCheckio.startVerification();
if (result != null) {
print('Verification Result: $result');
// 处理验证成功的逻辑
} else {
print('Verification failed or was canceled');
// 处理验证失败或取消的逻辑
}