Skip to content

Custom Providers

This page contains all available providers for the Document Reader feature, as well as instructions on how to import and implement them in a project using the SeamlessMobile SDK.

Regula Provider

This provider uses Regula services and supports both OCR Document Reading and RFID scanning functionalities.

How to Import:

Work in progress...

Work in progress...

How to Instantiate:

Work in progress...

Work in progress...

How to Use:

Work in progress...

Work in progress...

Amadeus DocScanMrz Provider

This provider uses Amadeus services and supports MRZ Document Reading functionalities.

How to Import:

implementation("com.amadeus.mdi.mob.sdk:ama-doc-scan-mrz:2.0.1")

Install using Xcode

  1. Open your project in Xcode.

  2. Navigate to File ▸ Add Packages…

  3. In the dialog that appears, enter the package repository URL for the SDK you want to add:

    AMADocScanMrziOS

    https://github.com/vbmobile/AMADocScanMrziOS
    
  4. Select the version to integrate.
    For new projects, we recommend using the latest available release (for example: 2.0.3).

  5. Choose the project and target to which the package should be added.

  6. Click Add Package.

Once completed, Xcode will download the package and resolve all required dependencies automatically.


Install Using Package.swift

If you manage dependencies manually, add the SDKs to your Package.swift file.

1. Add the dependency

dependencies: [
    .package(
        url: "https://github.com/vbmobile/AMADocScanMrziOS",
        exact: "2.0.3"
    )
]

Replace 2.0.3 with the intended version you wish to use.


.target(
    name: "YourAppTarget",
    dependencies: [
        .product(name: "AMADocScanMrziOS", package: "AMADocScanMrziOS")
    ]
)

Replace YourAppTarget with the intended target you wish to use.

How to Instantiate:

To initialize the Enrolment with the DocScanMrz. It can be done as follows.

val docScanMrzConfig = DocScanMrzConfig(
    enableLogs = <true>,
    docScanMrzKey: <YOUR DOC SCAN MRZ KEY>,
)

DocScanMrz.initialize(
    context = this,
    docScanMrzConfig = docScanMrzConfig
)

val context = ...
val enrolmentConfig = ...
val callback = ...
val documentReaderProvider = DocScanMrz.getInstance()

// Soft-start the provider before passing it to Enrolment.
documentReaderProvider.softStart(context, object : OnSoftStartCompletion {
    override fun onProgressChanged(progress: Progress) { /* not emitted by DocScanMrz */ }

    override fun onSoftStartSuccess() {
        Log.i("DocScanMrz", "softStart onSuccess")
    }

    override fun onSoftStartError(error: ProviderError) {
        Log.e("DocScanMrz", "softStart onError [${error.errorCode}] ${error.description}")
    }
})

Enrolment.initialize(
    context = context, 
    enrolmentConfig = enrolmentConfig,
    documentReaderProvider = documentReaderProvider,
    callback = callback
)

Creates a DocumentReaderScanProtocol using AMADocScanMrziOS provider

func docScanMrziOSProviderSetup() {
    var enrolmentConfig: EnrolmentConfig! // Not relevant for this example

    func amaDocScanMrziOS() -> DocumentReaderScanProtocol {
        /// Specifies the expected document type (e.g. passport)
        let documentType: DSDocumentType = .td3

        /// Uses screen size to configure capture resolution
        let bounds = UIScreen.main.bounds

        /// Returns a PSS-based document scanner
        return DocumentReaderScan(
            documentType: documentType,
            apiKey: "<YOUR_KEY>",
            pixelWidth: Int(bounds.width),
            pixelHeight: Int(bounds.height)
        )
    }

    Enrolment.shared.initWith(enrolmentConfig: enrolmentConfig,
                              documentScanProvider: amaDocScanMrziOS(),
                              documentRFIDProvider: nil, // Not relevant for this example
                              ultralightProvider: nil, // Not relevant for this example
                              viewRegister: nil,
                              completionHandler: { result in
                                  switch result {
                                  case .success:
                                      print("SDK is ready to use")

                                  case let .failure(error):
                                      print("Failure: \(error)")
                                  }
                              })
}

How to Use:

Enrolment.getInstance().readDocument(
    activity = activity,
    params = DocumentReaderParameters(
        rfidRead = true,
        mrzReadTimeout = TimeUnit.SECONDS.toMillis(30),
        rfidReadTimeout = TimeUnit.SECONDS.toMillis(30),
        showRFIDInstructions = true,
    ),
    mode = DocumentReaderMode.SCAN,
    onReadDocumentCompletion = object : OnReadDocumentCompletion {
        override fun onReadDocumentSuccess(documentReaderReport: DocumentReaderReport) {

        }

        override fun onReadDocumentError(documentReaderError: DocumentReaderError) {

        }
    }
)
 // The view controller responsible for presenting the document scanner camera interface
 var viewController: UIViewController!

 Enrolment.shared.readDocument(
    parameters: .init(readRFID: false),
     viewController: viewController
 ) { result in
     switch result {
     case let .success(report):
         print("Document Read: Success!")
         print(report)
         print(report.idDocument)
         print(report.documentStatuses)
     case let .failure(error):
         print(error.featureError.description)
     }
 }

Amadeus Doc RFID Read Provider

This provider uses Amadeus services and supports RFID scanning functionalities.

How to Import:

implementation("com.amadeus.mdi.mob.sdk:ama-doc-rfid-read:2.0.1")

Install using Xcode

  1. Open your project in Xcode.

  2. Navigate to File ▸ Add Packages…

  3. In the dialog that appears, enter the package repository URL for the SDK you want to add:

    AMADocRfid

    https://github.com/vbmobile/AMADocRfid
    
  4. Select the version to integrate. For new projects, we recommend using the latest available release (for example: 2.0.2).

  5. Choose the project and target to which the package should be added.

  6. Click Add Package.

Once completed, Xcode will download the package and resolve all required dependencies automatically.


Install Using Package.swift

If you manage dependencies manually, add the SDKs to your Package.swift file.

1. Add the dependency

dependencies: [
    .package(
        url: "https://github.com/vbmobile/AMADocRfid",
        exact: "2.0.2"
    )
]

Replace 2.0.2 with the intended version you wish to use.


.target(
    name: "YourAppTarget",
    dependencies: [
        .product(name: "AMADocRfid", package: "AMADocRfid")
    ]
)

Replace YourAppTarget with the intended target you wish to use.

How to Instantiate:

To initialize the Enrolment with the DocRfidRead. It can be done as follows.

val docRfidReadConfig = DocRfidReadConfig(
        apiConfig = DocRfidReadApiConfig(
            baseUrl = <YOUR DOC RFID READ BASE URL>,
            apiKey = <YOUR DOC RFID READ API KEY>,
            publicKey = Base64.encodeToString("YOUR PUBLIC KEY", Base64.DEFAULT),
        ),
        enableLogs = <ENABLE LOGS>,
    )

DocRfidRead.initialize(
    context = this,
    docRfidReadConfig = docRfidReadConfig
)

val context = ...
val enrolmentConfig = ...
val callback = ...
val documentRfidReaderProvider = DocRfidRead.getInstance()

// Soft-start the provider before passing it to Enrolment.
documentRfidReaderProvider.softStart(context, object : OnSoftStartCompletion {
    override fun onProgressChanged(progress: Progress) { /* not emitted by DocRfidRead */ }

    override fun onSoftStartSuccess() {
        Log.i("DocRfidRead", "softStart onSuccess")
    }

    override fun onSoftStartError(error: ProviderError) {
        Log.w("DocRfidRead", "softStart onError [${error.errorCode}] ${error.description}")
    }
})

Enrolment.initialize(
    context = context, 
    enrolmentConfig = enrolmentConfig,
    rfidReaderProvider = documentRfidReaderProvider,
    callback = callback
)
 import AMADocModeliOS
 import AMADocRFIDReadiOS
 import MobileIdSDKiOS

func docScanRfidProviderSetup() {
    var enrolmentConfig: EnrolmentConfig! // Not relevant for this example
    func documentRFIDProvider() -> DocumentReaderRFIDProtocol {
        let apiConfig = APIConfig(
            baseURL: "<YOUR_BASE_URL>",
            apiKey: "<YOUR_API_KEY>",
            publicKey: "")
        return  AMADocRFIDRead( config: DocRfidReadConfig( apiConfig: apiConfig, enableLogs: true))
    }

    Enrolment.shared.initWith(enrolmentConfig: enrolmentConfig,
                              documentScanProvider: nil, // Not relevant for this example
                              documentRFIDProvider: documentRFIDProvider(),
                              ultralightProvider: nil, // Not relevant for this example
                              viewRegister: nil,
                              completionHandler: { result in
                                  switch result {
                                  case .success:
                                      print("SDK is ready to use")

                                  case let .failure(error):
                                      print("Failure: \(error)")
                                  }
                              })
}

How to Use:

Enrolment.getInstance().readDocumentRFID(
    activity = requireActivity(),
    params = DocumentReaderRFIDParameters(
        rfidReadTimeout = docReaderRFIDParams.rfidReadTimeout,
        showRFIDInstructions = docReaderRFIDParams.showRFIDInstructions,
        mrzString = docReaderRFIDParams.mrzString
    ),
    onReadDocumentCompletion = object : OnReadDocumentCompletion {
        override fun onReadDocumentSuccess(documentReaderReport: DocumentReaderReport) {

        }

        override fun onReadDocumentError(documentReaderError: DocumentReaderError) {

        }
    }
)
func readRFIDDocumentSampleUsage() {
    // The view controller responsible for presenting the document scanner camera interface
    var viewController: UIViewController!

    let formatter = DateFormatter()
    formatter.timeZone = TimeZone(identifier: "UTC")
    formatter.dateFormat = "YY-MM-dd"
    let parameters = ReadRFIDDocumentParameters(
        documentNumber: "<DOCUMENT_NUMBER>",
        documentMRZ: "<DOCUMENT_MRZ>", //
        dateOfExpiry: formatter.date(from: "<DATE_OF_EXPIRY>") ?? Date(),
        dateOfBirth: formatter.date(from: "<DATE_OF_BIRTH>") ?? Date(),
        showRFIDStatus: false,
        rfidTimeout: 30)

    Enrolment.shared.readRFIDDocument(
        parameters: parameters,
        viewController: viewController
    ) { result in
        switch result {
        case let .success(report):
            print("Document Read: Success!")
            print(report.idDocument)
        case let .failure(error):
            print(error.featureError.description)
        }
    }
}