Flutter健康码验证插件verificac19的使用
Flutter健康码验证插件VerificaC19的使用
关于
此插件允许在您的Flutter应用中解码和验证任何欧盟数字绿色证书。该库基于官方的it-dgc-verificac19-sdk-android仓库中的规范。
此库需要互联网连接以至少每天下载并缓存规则、CRL和DSC。一旦更新完成,整个验证过程可以在离线状态下实时进行。
从版本1.4.3开始,此插件已被意大利卫生部列入受信任SDK列表。
开发与测试
克隆仓库
git clone https://github.com/mastro993/verificac19_flutter.git
获取依赖包
cd verificac19_flutter
flutter pub get
测试用的二维码
测试用的二维码可以从以下链接获取:https://dgc.a-sit.at/ehn/testsuite
安装
flutter pub add verificac19
示例应用
一个示例应用可以查看这里。
使用方法
初始化
首先需要初始化插件,以便完成所有内部初始化工作。
await VerificaC19.initialize();
下载和缓存规则、CRL数据和DSC
您可以使用update
函数下载并缓存规则、CRL数据和DSC。这将仅在24小时更新窗口过期时更新数据。
await VerificaC19.update();
您还可以使用needsUpdate
函数检查数据是否已过期(超过24小时更新窗口),而无需强制更新。
bool requiresUpdate = await VerificaC19.needsUpdate();
验证和验证DGC
您可以从包含Base45编码数据的字符串中验证和验证DGC。
// 从Base45编码的数据验证
ValidationResult result = await VerificaC19.validateFromRaw('HC1:NCFOXN%TSM...');
结果是一个包含解码后的Certificate
对象及其CertificateStatus
的ValidationResult
对象。CertificateStatus
可能有以下值:
状态 | 代码 | 描述 |
---|---|---|
✅ | valid | 证书有效 |
⚠ | testNeeded | 如果验证模式为boosterDGP,则需要测试 |
❌ | notValid | 证书无效 |
❌ | notValidYet | 证书尚未生效 |
❌ | revoked | 证书已被撤销 |
❌ | notEuDCC | 证书不是欧盟DCC |
您还可以提供一个ValidationMode
参数。
代码 | 描述 |
---|---|
normalDGP | 正常验证(默认值) |
superDGP | 超级绿通验证 |
示例:
ValidationResult result = await VerificaC19.validateFromRaw('HC1:NCFOXN%TSM...', mode: ValidationMode.normalDGP);
// 或者
ValidationResult result = await VerificaC19.validateFromRaw('HC1:NCFOXN%TSM...', mode: ValidationMode.superDGP);
示例代码
初始化
在首次使用前需要初始化此库。
await VerificaC19.initialize();
同步
初始化后,应至少每天同步一次,以便将医疗规则和DSCs与DGC提供商同步。这可以通过调用update()
方法来实现。
await VerificaC19.update();
您可以使用needsUpdate()
方法检查是否需要更新,并使用getLastUpdateTime()
方法获取上次成功更新的时间。
bool needsUpdate = VerificaC19.needUpdate();
if (needUpdate) {
// 应该更新!
await VerificaC19.update();
}
// 您也可以通过获取上次更新时间来检查更新状态
DateTime? lastUpdateTime = VerificaC19.getLastUpdateTime();
if (lastUpdateTime != null) {
print('上次成功更新是在 ${lastUpdateTime.toString()}');
} else {
print('VerificaC19从未被更新。您应该现在就做。');
}
DGC验证
您可以传递其Base45编码数据(二维码内容)给validateFromRaw
方法以获取DGC的有效性。
ValidationResult result = await VerificaC19.validateFromRaw(r'HC1:NCFOXN%TSMAHN-H3ZSUZK+.V0ET9%6-AH-R61ROR$SIOO$-I68VBS4+WABJJ6L6SA3/-2E%5VR5VVBJZILDB523G*S2U2V8TQEDK8CD/SYJCZ8D/DC..DYMCR.C%USPSTNJSHKDL8CV.TL*SBVCYUSUJCLAD*+TJZIM-1U96UX4U96L*KDYPWGO+9A*DOXCRFE4IWMEK81:6G16IFNPCL694F$9DK4LC6DQ4939HHM 55ZIJIZI.EJJ14B2MZ8DC8C:R10%C:XIBEIVG395EV3EVCK09D5WCFVA.QO5VA81K0ECM8CXVDC8C90JK.A+ C/8DXEDKG0CGJ5AL5:4A930JB0CGBL6BQ99Q9E$BDZI65BXI1X-7I65M65TWAS4WW4NOXU3$UCPABPINXU: RFTIDG62QE/UIGSUYI93O89N86UG8KGQN88.R: BRQG84W: BCPI2YUFJ6LX3+KG% BTVBUVPQRHIY1* H2O1$S3I1AVTV%71AMBP:FZ4WA%B7L0B5GCXRRMLCSN.PDO7UJWKMMAU$5D$R8Y7MQFBQKY HJ:O-:K:IFG/VIIM8ZQS77YTFE.SH9PZDUA61C00+/DL4');
更多关于Flutter健康码验证插件verificac19的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter健康码验证插件verificac19的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
VerificaC19
是一个用于验证欧盟数字 COVID 证书(EU Digital COVID Certificate,简称 DCC)的 Flutter插件。它可以帮助开发者在其 Flutter 应用中集成健康码验证功能,以验证用户的疫苗接种、核酸检测或康复状态。
以下是使用 VerificaC19
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 verificac19
插件的依赖:
dependencies:
flutter:
sdk: flutter
verificac19: ^1.0.0 # 请根据实际情况使用最新版本
然后运行 flutter pub get
以获取依赖。
2. 初始化插件
在使用插件之前,你需要初始化 VerificaC19
。通常可以在应用的 main
函数中进行初始化:
import 'package:verificac19/verificac19.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await VerificaC19.initialize();
runApp(MyApp());
}
3. 验证健康码
你可以使用 VerificaC19
来验证用户的健康码。通常,健康码是一个二维码,你可以使用插件提供的 verify
方法来验证它:
import 'package:verificac19/verificac19.dart';
Future<void> verifyQRCode(String qrCode) async {
try {
VerificationResult result = await VerificaC19.verify(qrCode);
if (result.isValid) {
print("健康码有效");
print("证书类型: ${result.certificateType}");
print("签发者: ${result.issuer}");
print("有效期: ${result.validFrom} 至 ${result.validTo}");
} else {
print("健康码无效: ${result.errorMessage}");
}
} catch (e) {
print("验证失败: $e");
}
}
4. 处理验证结果
VerificaC19
会返回一个 VerificationResult
对象,其中包含验证结果和相关信息。你可以根据 isValid
属性来判断健康码是否有效,并处理相应的逻辑。
5. 更新签名证书
欧盟数字 COVID 证书的验证依赖于签名证书,这些证书可能会定期更新。你可以使用以下方法来更新签名证书:
import 'package:verificac19/verificac19.dart';
Future<void> updateSigningCertificates() async {
try {
await VerificaC19.updateSigningCertificates();
print("签名证书更新成功");
} catch (e) {
print("签名证书更新失败: $e");
}
}
6. 处理错误
在使用 VerificaC19
时,可能会遇到各种错误,如网络错误、证书失效等。你应该在代码中妥善处理这些错误,以确保应用的稳定性。
7. UI 集成
最后,你可以将 VerificaC19
的验证功能集成到你的应用 UI 中,例如通过扫描二维码的方式获取健康码并进行验证。
import 'package:flutter/material.dart';
import 'package:verificac19/verificac19.dart';
class QRCodeScannerPage extends StatelessWidget {
Future<void> scanAndVerify() async {
// 这里假设你已经通过某种方式获取到了二维码内容
String qrCode = "QR_CODE_CONTENT";
try {
VerificationResult result = await VerificaC19.verify(qrCode);
if (result.isValid) {
// 处理有效健康码的情况
} else {
// 处理无效健康码的情况
}
} catch (e) {
// 处理错误
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('健康码验证'),
),
body: Center(
child: ElevatedButton(
onPressed: scanAndVerify,
child: Text('扫描并验证健康码'),
),
),
);
}
}