Android SDK

Integration Options

This page sets out step-by-step instructions for setting up the Android SDK.

Prerequisites

  • You need your tenantId provided by Rabo Identity Services.
  • Provide Rabo Identity Services with the GitHub usernames and email addresses of your staff who need access to our repositories.

Operating system specifications:

  • Minimum API version: 24 (Android 7.0)
  • Minimum API version for eID Verification: 28 (Android 9.0)
  • Language: The SDK is written in Kotlin but is also compatible with Java.

Configuration

Age requirement

You can dynamically configure the minimum client age requirement and the related checks during Identity Verification workflows.

Document data

Discuss with Rabo Identity Services what data to extract from ID document photos via optical character recognition (OCR):

Data typeDescription
MRZ dataDocument data is extracted from the MRZ only and is processed offline by the SDK.
MRZ and
VIZ data
For greater accuracy, document data is extracted from the MRZ and VIZ and processed by our AI agent in real time.

Identity data

If you want to receive a copy of the identity data gathered by the SDK when it's uploaded to our backend (before case processing), let Rabo Identity Services know.

Real-time feedback

Agree with Rabo Identity Services whether you want to enable real-time feedback. The SDKs send the document photos to our backend as soon as they are captured, where we assess the image quality and provide the client feedback in the UI in real time. This ensures higher-quality photos are ultimately uploaded, reduces sendback, and improves user experience.


Identity Verification

Setup

You can add the SDK to your project using Gradle.

1. In your top-level build.gradle file, link to Fourthline's repository:

allprojects {
 repositories {
 //...
 maven {
 url "https://maven.pkg.github.com/Fourthline-com/FourthlineSDK-Android"
 credentials {
 username ""
 password getLocalProperty("github_token")
 }
 }
 }
}
allprojects {
 repositories {
 //...
 maven {
 url = URI("https://maven.pkg.github.com/Fourthline-com/FourthlineSDK-Android")
 credentials {
 username = ""
 password = getLocalProperty("github_token")
 }
 }
 }
}

2. To access Fourthline's repository, in your GitHub account, go to Settings > Account security > Enable two-factor authentication.

3. Go to Settings > Developer settings > Personal access tokens > Generate a new token.

4. Select the scope "read:packages", and then generate a new token.

5. Store the access token in a secure, but accessible location, e.g. local.properties.

📘

Treat the token as a password. Don't add it to your version control system.
If you have to share it, use a password manager.

Example code for local.properties:

//..
github_token=YOUR_ACCESS_TOKEN

6. In your module-level build.gradle file, add a dependency to the Fourthline SDK:

dependencies {
 // ...
 def fourthlineSdkVersion = "%%LATEST_SDK_VERSION%%"
 implementation "com.fourthline:fourthline-sdk:$fourthlineSdkVersion"
}
dependencies {
 // ...
 val fourthlineSdkVersion = "%%LATEST_SDK_VERSION%%"
 implementation("com.fourthline:fourthline-sdk:$fourthlineSdkVersion")
}

Error handling

You need to handle the following error values:

NameDescription
CanceledThe client canceled the workflow.
ClientRejectedThe client isn't eligible for the Identity Verification workflow.
You cannot retry.
ConfigurationNotSupportedThe workflow created with the validation code isn't supported.
Action: Consider updating to the latest SDK version.
InvalidValidationCodeThe validation code for the SDK session is invalid.
Action: Get a new validation code.
InvalidWorkflowStatusThe status of the workflow is invalid, e.g. because the modules were completed successfully or with an error.
ModuleErrorThe client encountered an error in a workflow module.
Identity Verification
PersonNotAdult: The client is underage.
NationalityNotSupported: The client's nationality isn't supported.
IssuingCountryNotSupported: The ID document issuing country isn't supported.
DocumentExpired: The ID document has expired.
DocumentTypeNotSupported: The ID document type isn't supported.
Bank Account Verification
Failed: An unexpected generic error occurred.
KycRequired: The client must first pass Identity Verification.
Qualified Electronic Signature
TooManyResendOtpAttempts: The one-time passcode was resent to the client too many times.
TooManyAuthorizationAttempts: The client tried to approve the documents to sign too many times.
KycRequired: The client must first pass Identity Verification.
UnexpectedAn unexpected error occurred.
Action: Contact your Fourthline delivery manager immediately.

Testing

To view a mock version, launch the various modules using the following mock validation codes:

ProductMock validation code
Identity VerificationIDV
Qualified Electronic Signature moduleQES
Bank Account Verification moduleBAV
CombinationsIDVandBAV
IDVandQES
IDVandBAVandQES
IDVandQESandBAV

Example code:

val validationCode: String
val config = WorkflowConfig(networkEnvironment = Mock)

Orca.workflow(context, validationCode)
 .configure(config)
 .present { result -> }

Analytics

The FourthlineCore module collects and processes Android SDK metrics.

You can set up an analytics observer for the SDK to forward Fourthline events to.

Events are only forwarded when you initialize FourthlineAnalytics by calling FourthlineAnalytics.initialize(...) with TrackingConsent set to granted.

  • To set up the observer, call FourthlineAnalytics.setObserver(...).
  • To remove the observer, call FourthlineAnalytics.removeObserver().
import com.fourthline.analytics.AnalyticsObserver
import com.fourthline.analytics.FourthlineAnalytics

val observer = object : AnalyticsObserver {
    override fun log(event: String, attributes: Map<String, Any?>) {
        // Log the Fourthline event
    }
}

FourthlineAnalytics.setObserver(observer)

Data delegate

To receive notifications for each data group that the SDK uploads to Fourthline and a copy of the data itself, add a data delegate:

import com.fourthline.orca.Orca
import com.fourthline.orca.workflow.WorkflowResults.*
import com.fourthline.orca.workflow.workflow

Orca.workflow(context, validationCode)
  .configure(config)
  .customize(customisationConfig)
  .addDelegate { results ->
    when(results){
      is IDV.Address -> TODO()
      is IDV.DeviceMetadata -> TODO()
      is IDV.Document -> TODO()
      is IDV.DocumentVideo -> TODO()
      is IDV.Nfc -> TODO()
      is IDV.Person -> TODO()
      is IDV.Selfie -> TODO()
      is IDV.SelfieVideo -> TODO()
    }
  }
  .present { result -> }

Temporary files

The SDK stores some data collected during workflows (e.g. selfie and document videos) in the tmp/fourthline folder in the client's device filesystem. This is because the videos must remain available until collected, packaged into a zipfile, and uploaded to our backend.

You must delete the temporary files when they are no longer needed, e.g. after the SDK has uploaded all data to Fourthline or immediately before the app is terminated in onDestroy().

context.deleteFourthlineFiles()
FourthlineFileManager.deleteFourthlineFiles(context);
👍

You have configured and setup the Android SDK