DGCVerifier Android Application

This is an application that scans the EU certified signed QR codes generated by the microservices will be available soon in https://github.com/centralinspection/impact_vaccine_eu_certificate_microservices

App workflow

  1. The app will update its public certificates once a day on app launch.
  2. Certificates need to be updated and in synch with the servers for the scans to work.
  3. If synch fails, user can go to Verifier section and manually trigger another update.
  4. Once public certificates are updated, simply tap on the QR code in Home screen, and Scan. Success and error scenarios are already handled.

Code integration

  • The API to fetch the public certificates needs to be set up on your end, to do so:
  1. Update the Base URL of the API call in the “build.gradle” file, defined by the variable HOST_ADDRESS.
  2. Update the endpoint of the API call in the “Services.kt” file. The function is currently defined as getCertificates().
  3. Update the structure of the response object defined in “CertificateResponse.kt”.

The current sample call, will make a GET request to “https://NATIONAL_BACKEND_HOST/PATH/FOR/PRODUCTION/trustList”, and expects a response in the format:
“rawData”: “…”
“rawData”: “…”

The values contained under the rawData string are treated as the Public Keys that the app saves, and needs, to successfully scan the QR codes.


  • You can redefine the response structure to accommodate whatever response you configure from your developed APIs.

  • The build.gradle file already has 2 configurations defined for QA and PRODUCTION, that you can switch between through the Build Variants in Android Studio. Make sure to define the appropriate HOST_ADDRESS url for the appropriate environment.

  • The scanning logic is handled in the QrScannerFragment, mainly in the handleResult function.

  • The Public Certificates are saved and managed in DGCCertificateManager.kt

  • On successful scan, the app loads ScanSuccessFragment.kt, where it will display the data of the QR you just scanned. The data returned is coded, and the mapping of each field to its display value is handled in the VaccinationViewHolder.kt, and PcrViewHolder.kt accordingly.

To run this

This code should run in debug mode, but may require you to create your own Keystore file for the project to run it in release mode. You will also need to update the applicationId for your project, and update the proguard-rules to use your new package name to keep your mapping classes in the “model” package.


View Github