Flutter生物识别认证插件local_biometrics_auth的使用
Flutter生物识别认证插件local_biometrics_auth的使用
local_biometrics_auth
使用说明
该插件提供了一种通过生物识别认证用户并安全缓存敏感信息(如密码和令牌)的方法。
在支持的设备上,这包括指纹或面部识别等生物识别认证。
功能 | Android | iOS | Windows |
---|---|---|---|
支持版本 | SDK 16+* | 9.0+ | Windows 10+ |
使用方法
首先,我们需要导入插件并初始化 BiometricsAuth
实例:
import 'package:local_biometrics_auth/local_biometrics_auth.dart';
final BiometricsAuth auth = BiometricsAuth.initialise();
检查设备是否支持生物识别
final bool canUseBiometrics = auth.canUseBiometrics;
final bool isBiometricsSetup = await auth.isBiometricsSetup;
canUseBiometrics
:检查设备是否支持任何一种生物识别选项。isBiometricsSetup
:检查设备上的生物识别设置是否已配置。
用户认证
你可以使用以下选项来认证用户:
BiometricType.face
BiometricType.fingerprint
示例代码:通用认证
try {
await auth.authenticate().then((value) {
if (value == BiometricsResponse.success) {
// 认证成功后,可以保存用户的敏感信息
auth.setAuthKey(authKey: AuthKey(key: authData));
}
});
} catch (e) {
// 处理错误
}
安全缓存用户数据
- iOS:使用 Keychain 存储数据。
- Android:使用 AES 加密,AES 密钥用 RSA 加密,并将 RSA 密钥存储在 KeyStore 中。
保存用户数据
auth.setAuthKey(authKey: AuthKey(key: authData));
获取已保存的数据
示例代码:获取已保存的认证密钥
auth.authenticateAndGetAuthKey().then((value) {
if (value?.key != null) {
// 在这里处理认证成功后的逻辑
}
});
仅使用生物识别认证
要强制使用生物识别认证,可以在初始化时设置 biometricsOnly: true
:
auth = await BiometricsAuth.initialise(biometricsOnly: true);
注意:
biometricOnly
在 Windows 上不受支持,因为 Windows 的实现底层 API(Windows Hello)不支持选择认证方式。
iOS 集成
如果要使用 Face ID,需要在 Info.plist
文件中添加以下内容:
<key>NSFaceIDUsageDescription</key>
<string>为什么我的应用使用面部识别?</string>
如果不添加此描述,用户会看到一个提示,表示你的应用尚未更新为使用 Face ID。
Android 集成
更新 Activity
local_biometrics_auth
要求使用 FragmentActivity
,而不是普通的 Activity
。以下是更新方法:
如果直接使用 FlutterActivity
:
在 AndroidManifest.xml
中将其替换为 FlutterFragmentActivity
:
<activity
android:name="io.flutter.embedding.android.FlutterFragmentActivity"
... />
如果使用自定义 Activity:
修改 MainActivity.java
或 MainActivity.kt
:
Java 版本:
import io.flutter.embedding.android.FlutterFragmentActivity;
public class MainActivity extends FlutterFragmentActivity {
// ...
}
Kotlin 版本:
import io.flutter.embedding.android.FlutterFragmentActivity
class MainActivity : FlutterFragmentActivity() {
// ...
}
添加权限
在项目的 AndroidManifest.xml
文件中添加以下权限:
<uses-permission android:name="android.permission.USE_BIOMETRIC"/>
更多关于Flutter生物识别认证插件local_biometrics_auth的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter生物识别认证插件local_biometrics_auth的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中使用local_biometrics_auth
插件进行生物识别认证(如指纹、面部识别等)可以帮助你增强应用的安全性。以下是一个简单的使用指南,帮助你快速集成和使用这个插件。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加local_biometrics_auth
插件的依赖。
dependencies:
flutter:
sdk: flutter
local_biometrics_auth: ^1.0.0 # 请使用最新版本
然后运行flutter pub get
来安装依赖。
2. 导入插件
在你的Dart文件中导入local_biometrics_auth
插件。
import 'package:local_biometrics_auth/local_biometrics_auth.dart';
3. 检查设备是否支持生物识别
在使用生物识别认证之前,你需要检查设备是否支持生物识别功能。
Future<void> checkBiometrics() async {
final LocalBiometricsAuth localBiometricsAuth = LocalBiometricsAuth();
bool canCheckBiometrics = await localBiometricsAuth.canCheckBiometrics;
print('Device supports biometrics: $canCheckBiometrics');
}
4. 获取可用的生物识别类型
你可以获取设备支持的生物识别类型,如指纹、面部识别等。
Future<void> getAvailableBiometrics() async {
final LocalBiometricsAuth localBiometricsAuth = LocalBiometricsAuth();
List<BiometricType> availableBiometrics = await localBiometricsAuth.getAvailableBiometrics();
print('Available biometrics: $availableBiometrics');
}
5. 进行生物识别认证
使用authenticate
方法进行生物识别认证。
Future<void> authenticate() async {
final LocalBiometricsAuth localBiometricsAuth = LocalBiometricsAuth();
bool isAuthenticated = await localBiometricsAuth.authenticate(
localizedReason: 'Please authenticate to access the app',
useErrorDialogs: true,
stickyAuth: true,
);
print('Authentication successful: $isAuthenticated');
}
6. 处理认证结果
根据认证结果,你可以决定是否允许用户继续操作。
Future<void> handleAuthentication() async {
final LocalBiometricsAuth localBiometricsAuth = LocalBiometricsAuth();
bool isAuthenticated = await localBiometricsAuth.authenticate(
localizedReason: 'Please authenticate to access the app',
useErrorDialogs: true,
stickyAuth: true,
);
if (isAuthenticated) {
print('Authentication successful. Proceed to the next step.');
} else {
print('Authentication failed. Access denied.');
}
}
7. 完整示例
以下是一个完整的示例,展示了如何检查设备是否支持生物识别、获取可用的生物识别类型以及进行认证。
import 'package:flutter/material.dart';
import 'package:local_biometrics_auth/local_biometrics_auth.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: BiometricAuthScreen(),
);
}
}
class BiometricAuthScreen extends StatefulWidget {
[@override](/user/override)
_BiometricAuthScreenState createState() => _BiometricAuthScreenState();
}
class _BiometricAuthScreenState extends State<BiometricAuthScreen> {
final LocalBiometricsAuth localBiometricsAuth = LocalBiometricsAuth();
String _authStatus = 'Not authenticated';
Future<void> checkBiometrics() async {
bool canCheckBiometrics = await localBiometricsAuth.canCheckBiometrics;
setState(() {
_authStatus = 'Device supports biometrics: $canCheckBiometrics';
});
}
Future<void> getAvailableBiometrics() async {
List<BiometricType> availableBiometrics = await localBiometricsAuth.getAvailableBiometrics();
setState(() {
_authStatus = 'Available biometrics: $availableBiometrics';
});
}
Future<void> authenticate() async {
bool isAuthenticated = await localBiometricsAuth.authenticate(
localizedReason: 'Please authenticate to access the app',
useErrorDialogs: true,
stickyAuth: true,
);
setState(() {
_authStatus = isAuthenticated ? 'Authentication successful' : 'Authentication failed';
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Biometric Auth Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(_authStatus),
SizedBox(height: 20),
ElevatedButton(
onPressed: checkBiometrics,
child: Text('Check Biometrics'),
),
ElevatedButton(
onPressed: getAvailableBiometrics,
child: Text('Get Available Biometrics'),
),
ElevatedButton(
onPressed: authenticate,
child: Text('Authenticate'),
),
],
),
),
);
}
}