Flutter身份验证插件iproov_flutter的使用
Flutter身份验证插件iproov_flutter的使用
简介
iProov Biometrics Flutter SDK 将 iProov 的原生 iOS(Swift)和 Android(Java)SDK 包装在一个 Dart 接口中,以便在您的 Flutter iOS 或 Android 应用程序中使用。该 SDK 还提供了一个用 Dart 编写的 API 客户端,用于从 Flutter 应用调用 iProov 的 REST API v2。
要求
- Dart SDK 2.15 及以上版本
- Flutter SDK 1.20 及以上版本
- iOS 13 及以上版本
- Android API Level 26 (Android 8 Oreo) 及以上版本
安装步骤
添加依赖
在 pubspec.yaml
文件中添加以下内容:
dependencies:
iproov_flutter: ^5.0.2
然后运行以下命令进行安装:
flutter pub get
iOS 配置
在 iOS 应用的 Info.plist
文件中添加 NSCameraUsageDescription
,例如:
<key>NSCameraUsageDescription</key>
<string>To iProov you in order to verify your identity.</string>
使用示例
获取 Token 并启动 iProov
首先需要获取一个有效的 token,可以通过 API 客户端或后端请求获得。以下是完整的示例代码:
import 'package:flutter/material.dart';
import 'package:iproov_api_client/iproov_api_client.dart';
import 'package:iproov_flutter/iproov_flutter.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'iProov Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
bool _scanInProgress = false;
final _apiClient = const ApiClient(
baseUrl: 'https://eu.rp.secure.iproov.me/api/v2',
apiKey: '<YOUR_API_KEY>',
secret: '<YOUR_SECRET>',
);
void _getTokenAndLaunchIProov() async {
setState(() => _scanInProgress = true);
String token;
try {
token = await _apiClient.getToken(
assuranceType: AssuranceType.genuinePresenceAssurance,
claimType: ClaimType.enrol,
userId: "test@example.com",
);
} catch (e) {
setState(() => _scanInProgress = false);
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: Text('Error'),
content: Text(e.toString()),
actions: [
TextButton(
child: Text('OK'),
onPressed: () => Navigator.pop(context),
)
],
);
},
);
return;
}
const options = Options();
_launchIProov(token, options);
}
void _launchIProov(String token, Options options) {
final stream = IProov.launch(streamingUrl: 'wss://eu.rp.secure.iproov.me/ws', token: token, options: options);
stream.listen((event) {
if (event is IProovEventConnecting) {
print('Connecting...');
} else if (event is IProovEventConnected) {
print('Connected');
} else if (event is IProovEventProcessing) {
print('Progress: ${event.progress}');
} else if (event is IProovEventSuccess) {
print('Success!');
setState(() => _scanInProgress = false);
} else if (event is IProovEventCanceled) {
print('Canceled by ${event.canceler.name}');
setState(() => _scanInProgress = false);
} else if (event is IProovEventFailure) {
print('Failure: ${event.reason}');
setState(() => _scanInProgress = false);
} else if (event is IProovEventError) {
print('Error: ${event.error.title}');
setState(() => _scanInProgress = false);
}
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('iProov Example'),
),
body: Center(
child: ElevatedButton(
onPressed: _scanInProgress ? null : _getTokenAndLaunchIProov,
child: Text('Start iProov'),
),
),
);
}
}
UI 事件(可选)
可以监听 iProov UI 生命周期并接收结果:
IProov.uiEvent().listen((uiEvent) {
if (uiEvent is IProovUIEventNotStarted) {
print('UI Not Started');
} else if (uiEvent is IProovUIEventStarted) {
print('UI Started');
} else if (uiEvent is IProovUIEventEnded) {
print('UI Ended');
}
});
取消 SDK
在某些情况下,您可能希望取消正在进行的 iProov 扫描:
final stream = IProov.launch(streamingUrl: 'wss://eu.rp.secure.iproov.me/ws', token: '<YOUR_TOKEN>');
final subscription = stream.listen((event) { ... });
subscription.cancel();
自定义选项
通过 Options
类可以自定义 iProov 的多种设置,例如:
const options = Options(
filter: LineDrawingFilter(
style: LineDrawingFilterStyle.vibrant,
foregroundColor: Colors.black,
backgroundColor: Colors.white
),
);
错误处理
所有来自原生 SDK 的错误都被映射为 Flutter 异常,例如:
try {
// Your iProov code here
} on CaptureAlreadyActiveException {
print('An existing iProov capture is already in progress.');
} on NetworkException catch (e) {
print('Network error: ${e.message}');
}
API 客户端
API 客户端提供了方便的方法来调用 iProov 的 REST API v2,但不应在生产应用中使用:
final apiClient = const ApiClient(
baseUrl: 'https://eu.rp.secure.iproov.me/api/v2',
apiKey: '<YOUR_API_KEY>',
secret: '<YOUR_SECRET>',
);
final token = await apiClient.getToken(
assuranceType: AssuranceType.genuinePresenceAssurance,
claimType: ClaimType.enrol,
userId: "test@example.com",
);
结论
通过上述步骤,您可以轻松地在 Flutter 应用中集成 iProov 身份验证功能。请确保在实际项目中遵循安全最佳实践,不要将敏感信息嵌入到生产环境中。
更多关于Flutter身份验证插件iproov_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter身份验证插件iproov_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用iproov_flutter
插件进行身份验证的示例代码。请确保你已经按照iproov_flutter
插件的官方文档完成了必要的安装和配置步骤。
首先,你需要在pubspec.yaml
文件中添加iproov_flutter
依赖:
dependencies:
flutter:
sdk: flutter
iproov_flutter: ^最新版本号 # 请替换为实际的最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,在你的Flutter项目中,你可以按照以下步骤使用iproov_flutter
插件:
- 导入插件:
在你的Dart文件中导入iproov_flutter
插件:
import 'package:iproov_flutter/iproov_flutter.dart';
- 初始化插件:
在使用插件之前,你可能需要初始化它。这通常包括设置一些必要的配置参数。在Flutter中,这通常是在State
对象的initState
方法或其他适当的生命周期方法中完成的。
class _MyHomePageState extends State<MyHomePage> {
IproovFlutter? _iproov;
@override
void initState() {
super.initState();
// 初始化iproov_flutter插件
_iproov = IproovFlutter();
// 配置插件(如果需要)
// _iproov!.configure(...);
}
@override
void dispose() {
_iproov?.dispose();
super.dispose();
}
// 其他方法...
}
- 启动身份验证流程:
要启动身份验证流程,你可以调用插件提供的相应方法。以下是一个简单的示例,展示了如何启动身份验证并处理结果:
void _startAuthentication() async {
try {
// 假设你需要传递一些参数给iproov,比如session ID等
final Map<String, dynamic> authParams = {
'sessionId': 'your-session-id', // 替换为你的实际会话ID
// 其他必要的参数...
};
// 启动身份验证流程
final IproovResult result = await _iproov!.startAuthentication(authParams);
// 处理结果
if (result.success) {
print('身份验证成功');
// 处理成功逻辑...
} else {
print('身份验证失败: ${result.errorMessage}');
// 处理失败逻辑...
}
} catch (e) {
print('发生错误: $e');
// 处理异常逻辑...
}
}
- 在UI中触发身份验证:
你可以在UI中添加一个按钮或其他控件来触发身份验证流程。例如:
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
// ...(之前的代码)
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('iProov Flutter 示例'),
),
body: Center(
child: ElevatedButton(
onPressed: _startAuthentication,
child: Text('开始身份验证'),
),
),
);
}
}
这个示例展示了如何在Flutter项目中集成和使用iproov_flutter
插件进行身份验证。请注意,具体的参数和方法可能会根据iproov_flutter
插件的版本和API文档有所不同,因此请务必查阅最新的官方文档以获取准确的信息。