Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. Request camera access.

  2. Configure the capture feature using the CaptureConfiguration.

  3. Register an activity result handler with the CaptureFlowContract().

  4. Launch the SDK with GiniBank.startCaptureFlow().

  5. Handle the extraction results.

  6. Clean up the SDK by calling GiniBank.releaseCapture() while also providing the required extraction feedback to improve future extraction accuracy. Follow the these recommendations below:

Note
  • 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:

...

Learn how to launch the capture flow and handle the results from the example below:

Code Block
languagekotlin
// Use the androidx's Activity Result API to register a handler for the capture result.
val captureLauncher = registerForActivityResult(CaptureFlowContract()) { result: CaptureResult ->
    when (result) {
        is CaptureResult.Success -> {
            handleExtractions(result.specificExtractions)
        }
        is CaptureResult.Error -> {
            when (result.value) {
                is ResultError.Capture -> {
                    val captureError: GiniCaptureError = (result.value as ResultError.Capture).giniCaptureError
                    handleCaptureError(captureError)
                }
                is ResultError.FileImport -> {
                    // See the File Import section on the Capture Features page for more details.
                    val fileImportError = result.value as ResultError.FileImport
                    handleFileImportError(fileImportError)
                }
            }
            GiniBank.releaseCapture(
                this, "",
                "", "", "", "", Amount.EMPTY
            )
        }
        CaptureResult.Empty -> {
            handleNoExtractions()
            GiniBank.releaseCapture(
                this, "",
                "", "", "", "", Amount.EMPTY
            )
        }
        CaptureResult.Cancel -> {
            handleCancellation()
            GiniBank.releaseCapture(
                this, "",
                "", "", "", "", Amount.EMPTY
            )
        }
        CaptureResult.EnterManually -> {
            handleEnterManually()
            GiniBank.releaseCapture(
                this, "",
                "", "", "", "", Amount.EMPTY
            )
        }
    }
}

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

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

    // Instantiate the networking implementation.
    val networkService: GiniCaptureNetworkService  = ...

    // Configure the capture feature.
    GiniBank.setCaptureConfiguration(
        CaptureConfiguration(
            networkService = networkService,
            ...
        )
    )

    // Launch and wait for the result.
    GiniBank.startCaptureFlow(captureLauncher)
}

void stopGiniBankSDK() {
    // 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:
    GiniBank.releaseCapture(this,
            paymentRecipient,
            paymentReference,
            paymentPurpose,
            iban,
            bic,
            amount
        )
}