Flutter生物识别签名插件biometric_signature的使用
Flutter生物识别签名插件biometric_signature的使用
插件简介
Biometric Signature 是一个Flutter插件,它简化了将生物识别认证(指纹、面部和虹膜识别)集成到Dart和Flutter应用程序中的过程。该插件旨在提供跨Android和iOS平台的一致用户体验,并具有可自定义的UI组件和高级抽象的生物识别签名管理功能。
功能特性
- 支持在兼容的Android设备上的StrongBox和iOS设备上的Secure Enclave集成。
- 支持指纹、面部和虹膜识别(基于设备的能力)。
- 支持配置兼容设备的设备凭证回退支持。
- 简单集成到Dart和Flutter应用程序中。
- 可自定义的签名提示UI组件。
- 高级抽象以管理生物识别签名。
入门指南
添加依赖
要开始使用Biometric Signature,请按照以下步骤操作:
- 在
pubspec.yaml
文件中添加包依赖:
dependencies:
biometric_signature: ^6.2.0
平台支持
Android | iOS | |
---|---|---|
Support | SDK 23+ | 12.0+ |
iOS集成
对于使用Face ID的设备,需要在Info.plist文件中添加如下内容:
<dict>
<key>NSFaceIDUsageDescription</key>
<string>This app is using FaceID for authentication</string>
</dict>
Android集成
- Activity Changes: 请确保使用的是FragmentActivity而不是普通的Activity,可以通过修改manifest文件或自定义Activity类来实现。
- Permissions: 更新
AndroidManifest.xml
文件以包含USE_BIOMETRIC
权限:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.app">
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
</manifest>
- 导入包:
import 'package:biometric_signature/biometric_signature.dart';
- 初始化实例:
final biometricSignature = BiometricSignature();
使用方法
此插件简化了通过生物识别进行服务器端认证的过程。以下是基本使用案例的描述: 当用户注册生物识别时,会生成一对RSA密钥。私钥安全地存储在设备上,而公钥则发送给服务器用于注册。为了认证,用户会被提示使用其生物识别解锁私钥,然后生成加密签名并发送给服务器进行验证。如果服务器成功验证了签名,则返回授权响应。
类方法介绍
createKeys([AndroidConfig config, IosConfig config])
生成新的RSA 2048位密钥对,用于生物识别认证。私钥安全地存储在设备上,而公钥作为base64编码字符串返回。该方法会在创建新密钥之前删除任何已存在的密钥对。
createSignature({Map<String, String> options})
提示用户进行生物识别认证,并使用安全存储的私钥生成RSA PKCS#1v1.5 SHA 256签名。签名后的数据作为base64编码字符串返回。
deleteKeys()
删除用于生物识别认证的现有RSA密钥对。
biometricAuthAvailable()
检查设备是否支持生物识别认证,并返回可用的生物识别类型。
biometricKeyExists({bool checkValidity})
检查设备上是否存在生物识别密钥对,并可选地验证其有效性。
示例代码
下面是一个完整的示例应用,展示了如何使用biometric_signature插件来进行生物识别认证。
import 'package:flutter/material.dart';
import 'package:biometric_signature/biometric_signature.dart';
import 'package:biometric_signature/android_config.dart';
import 'package:biometric_signature/ios_config.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Biometric Signature Example')),
body: Center(child: BiometricAuthButton()),
),
);
}
}
class BiometricAuthButton extends StatefulWidget {
@override
_BiometricAuthButtonState createState() => _BiometricAuthButtonState();
}
class _BiometricAuthButtonState extends State<BiometricAuthButton> {
final BiometricSignature _biometricSignature = BiometricSignature();
Future<void> authenticateWithBiometrics() async {
try {
final biometricsType = await _biometricSignature.biometricAuthAvailable();
if (biometricsType != null && !biometricsType.contains("none")) {
// Check if keys exist and delete them if they do
final bool? keyExists = await _biometricSignature.biometricKeyExists(checkValidity: true);
if (keyExists == true) {
await _biometricSignature.deleteKeys();
}
// Create new keys
final String? publicKey = await _biometricSignature.createKeys(
androidConfig: AndroidConfig(useDeviceCredentials: true),
iosConfig: IosConfig(useDeviceCredentials: false)
);
debugPrint("Public Key: $publicKey");
// Create a signature
final String? signature = await _biometricSignature.createSignature(
options: {
"payload": "Biometric payload",
"promptMessage": "Authenticate with Biometrics",
"shouldMigrate": "true",
"allowDeviceCredentials": "true"
}
);
debugPrint("Signature: $signature");
} else {
debugPrint("No biometric authentication available.");
}
} on PlatformException catch (e) {
debugPrint(e.message);
debugPrint(e.code);
}
}
@override
Widget build(BuildContext context) {
return ElevatedButton(
child: Text('Authenticate with Biometrics'),
onPressed: () => authenticateWithBiometrics(),
);
}
}
在这个例子中,我们创建了一个简单的Flutter应用程序,其中包含一个按钮,点击该按钮后会触发生物识别认证流程。这个流程包括检查是否有可用的生物识别方式、创建新的密钥对以及生成签名。所有操作都封装在一个异步函数authenticateWithBiometrics
中,并且在发生错误时捕获异常信息。
更多关于Flutter生物识别签名插件biometric_signature的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter生物识别签名插件biometric_signature的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter应用中使用biometric_signature
插件来实现生物识别签名的代码示例。这个插件允许用户通过触摸屏幕来绘制签名,并且支持指纹识别或面部识别来验证签名的安全性。
首先,你需要在你的pubspec.yaml
文件中添加biometric_signature
依赖:
dependencies:
flutter:
sdk: flutter
biometric_signature: ^x.y.z # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
接下来,在你的Flutter应用中,你可以按照以下步骤来使用这个插件:
- 导入插件:
import 'package:biometric_signature/biometric_signature.dart';
import 'package:flutter/material.dart';
- 创建签名页面:
class SignaturePage extends StatefulWidget {
@override
_SignaturePageState createState() => _SignaturePageState();
}
class _SignaturePageState extends State<SignaturePage> {
final GlobalKey<BiometricSignatureState> _signatureKey = GlobalKey();
List<Offset> _points = [];
String _signatureBase64 = '';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Signature with Biometric Verification'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: <Widget>[
Expanded(
child: BiometricSignature(
key: _signatureKey,
onChanged: (List<Offset> points) {
setState(() {
_points = points;
});
},
onClear: () {
setState(() {
_points = [];
_signatureBase64 = '';
});
},
onSave: (List<Offset> points, String base64) async {
setState(() {
_points = points;
_signatureBase64 = base64;
});
// 这里可以添加代码来保存签名到服务器或本地存储
// 调用生物识别验证
bool authenticated = await authenticateUser();
if (authenticated) {
// 用户验证成功,可以进一步处理签名,比如上传
print('User authenticated, signature saved as: $_signatureBase64');
} else {
// 用户验证失败,清空签名
setState(() {
_points = [];
_signatureBase64 = '';
});
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Biometric authentication failed!')),
);
}
},
),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
_signatureKey.currentState?.clear();
},
child: Text('Clear Signature'),
),
],
),
),
);
}
Future<bool> authenticateUser() async {
// 这里使用local_auth插件进行生物识别验证
// 首先在pubspec.yaml中添加local_auth依赖
// dependencies:
// local_auth: ^x.y.z # 请替换为最新版本号
import 'package:local_auth/local_auth.dart';
final LocalAuthentication auth = LocalAuthentication();
bool canCheckBiometrics = await auth.canCheckBiometrics;
if (!canCheckBiometrics) {
return false;
}
List<BiometricType> availableBiometrics = await auth.getAvailableBiometrics();
if (availableBiometrics.isEmpty) {
return false;
}
bool authenticated = await auth.authenticateWithBiometrics(
localizedReason: 'Please authenticate to save your signature',
stickyAuth: true,
);
return authenticated;
}
}
- 运行应用:
确保你的设备或模拟器支持生物识别(指纹或面部识别),然后运行你的Flutter应用。用户将能够在屏幕上绘制签名,并在尝试保存签名时被提示进行生物识别验证。
这个示例展示了如何使用biometric_signature
插件来捕获用户的签名,并通过local_auth
插件来验证用户的生物识别信息。请根据你的实际需求调整代码,比如处理签名数据的保存和上传等。