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对象及其CertificateStatusValidationResult对象。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

1 回复

更多关于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('扫描并验证健康码'),
        ),
      ),
    );
  }
}
回到顶部