...
Request camera access.
Configure a new instance of
GiniCapture
.Launch
CameraActivity
.Handle the extraction results.
Clean up the SDK by calling
GiniCapture.cleanup()
while also providing the required extraction feedback to improve future extraction accuracy. You don’t need to implement any extra steps, just follow the recommendations below:
Please 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 after TAN verification.
The diagram below shows the interaction between your app and the SDK:
...
The CameraActivity
can return with the following result codes:
Activity.RESULT_OK
Document A document was analyzed and the extractions are available in the
EXTRA_OUT_EXTRACTIONS
result extra. It contains aBundle
with the extraction labels as keys andGiniCaptureSpecificExtraction
parcelables as values.Activity.RESULT_CANCELED
User The user has canceled Gini Capture SDK.
CameraActivity.RESULT_ERROR
An error occured occurred and the details are available in the
EXTRA_OUT_ERROR
result extra. It contains a parcelable parseable extra of typeGiniCaptureError
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” Enter manually button.
In the following example, you can see how to launch Gini Capture SDK and how to handle the results:
Code Block | ||
---|---|---|
| ||
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
)
} |