Skip to end of banner
Go to start of banner

Capture Flow

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 16 Next »

In order to launch the Gini Capture SDK, follow these steps:

  1. Request camera access.

  2. Configure a new instance of GiniCapture.

  3. Launch CameraActivity.

  4. Handle the extraction results.

  5. Clean up the SDK by calling GiniCapture.cleanup() while also providing the required extraction feedback to improve future extraction accuracy. Follow the recommendations below:

  • Provide values for all necessary fields, including those that were not extracted.

  • Provide the final data approved by the user (and not the initially extracted only).

  • Do cleanup only after TAN verification.

You don’t need to implement any extra steps.


The diagram below shows the interaction between your app and the SDK:

Check out an example app to see how an integration could look like.

The CameraActivity returns one of the following results:

  • Activity.RESULT_OK

A document was analyzed and the extractions are available in the EXTRA_OUT_EXTRACTIONS result extra. It contains a Bundle with the extraction labels as keys and GiniCaptureSpecificExtraction parcelables as values.

  • Activity.RESULT_CANCELED

The user canceled Gini Capture SDK.

  • CameraActivity.RESULT_ERROR

An error occurred and the details are available in the EXTRA_OUT_ERROR result extra. It contains a parseable extra of type GiniCaptureError detailing what went wrong.

  • CameraActivity.RESULT_ENTER_MANUALLY

The document analysis finished with no results or an error and the user clicked the Enter manually button on either the No Results Screen or the Error Screen. To enable manual entry of payment information, allow your app to prompt users for manual input.


Learn how to launch Gini Capture SDK and handle the results from the example below:

void launchGiniCapture() {
    // Make sure camera permission has been already granted at this point.

    // Check that the device fulfills the requirements.
    RequirementsReport report = GiniCaptureRequirements.checkRequirements((Context) this);
    if (!report.isFulfilled()) {
        handleUnfulfilledRequirements(report);
        return;
    }

    // Instantiate the networking implementations.
    GiniCaptureNetworkService networkService = ...

    // Configure GiniCapture and create a new singleton instance.
    GiniCapture.newInstance()
            .setGiniCaptureNetworkService(networkService)
            ...
            .build();

    // Launch the CameraActivity and wait for the result.
    Intent intent = new Intent(this, CameraActivity.class);
    startActivityForResult(intent, GINI_CAPTURE_REQUEST);
}

@Override
protected void onActivityResult(final int requestCode, final int resultCode,
        final Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == GINI_CAPTURE_REQUEST) {
        switch (resultCode) {
            case Activity.RESULT_CANCELED:
                GiniCapture.cleanup(this, "", "",
                            "", "","", Amount.EMPTY);
                break;

            case Activity.RESULT_OK:
                // Retrieve the extractions
                Bundle extractionsBundle = data.getBundleExtra(
                        CameraActivity.EXTRA_OUT_EXTRACTIONS);

                // Retrieve the extractions from the extractionsBundle
                Map<String, GiniCaptureSpecificExtraction> extractions = new HashMap<>();
                for (String extractionLabel : extractionsBundle.keySet()) {
                    GiniCaptureSpecificExtraction extraction = extractionsBundle.getParcelable(extractionLabel);
                    extractions.put(extractionLabel, extraction);
                }
                handleExtractions(extractions);

                break;

            case CameraActivity.RESULT_ERROR:
                // Something went wrong, retrieve and handle the error
                final GiniCaptureError error = data.getParcelableExtra(
                        CameraActivity.EXTRA_OUT_ERROR);
                if (error != null) {
                    handleError(error);
                }
                GiniCapture.cleanup(this, "", "",
                        "", "","", Amount.EMPTY);
                break;

            case CameraActivity.RESULT_ENTER_MANUALLY:
                handleEnterManually();
                GiniCapture.cleanup(this, "", "",
                        "", "","", Amount.EMPTY);
                break;
        }
    }
}

void stopGiniCaptureSDK() {
    // After the user has seen and potentially corrected the extractions
    // cleanup the SDK while passing in the final extraction values
    // which will be used as feedback to improve the future extraction accuracy:
    GiniCapture.cleanup((Context) this,
            paymentRecipient,
            paymentReference,
            paymentPurpose,
            iban,
            bic,
            amount
        )
}
  • No labels