IDentity SDK


Introduction

This guide introduces the IDentity iOS SDK within the IDmission product suite. Developers, project managers and QA testers should reference this guide for information on configuration and use of the IDentity SDK on the iOS platform. We recommend reviewing the entire implementation guide to fully understand the IDentity SDK functionality and its respective capabilities.

This guide details processes and procedures for embedding the IDentity SDK into your host application and utilizing its current features. For additional IDentity SDK support, please contact our Customer Support team at support@idmission.com.


Overview and Key Features

The IDmission IDentity SDK is a comprehensive toolkit that enables the use of any combination of factors of identity to complete digital transformation goals. The goal of the IDentity SDK is to offer seamless integration into an existing digital paradigm where the end-to-end customer experience is still owned and managed in-house.



SDK Flavours Supported Features -

Sr. No. Feature/Flavours IdentityVideoID SDK IdentityMedium SDK IdentityLite SDK IdentityLiveness SDK
1 Document Detect On Device On Device On Device N/A
2 Rotate, crop etc. On Device On Device On Device N/A
3 Document Realness On Device On Device On Server N/A
4 Document Classification On Device On Server On Server N/A
5 MRZ/Barcode reading On Device On Device On Server N/A
6 OCR from front On Device On Server On Server N/A
7 Face detect On Device On Device On Device On Device
8 Liveness detect On Device On Device On Device On Device
9 FaceMask detect On Device On Device On Device On Device
10 Detect hats and sunglasses On Device On Device On Server On Server
11 Video ID On Device N/A N/A N/A


SDK Documentation - Here is the link to the Identity Proofing SDK Documentation.


Sample Apps - Here are the links to the Sample apps on IDmission GitHub Repository


Main Features - Following are the main features supported in SDKs are:

Additional Features - In addition to above main features, end user can add below feature as additional feature in existing main feature.

Additional functions are also detailed in the SDK Documentation

Generic Final Submit - Generic Final Submit is used to make API calls for custom configurations for a client.

Note: When using the IDentity SDK, you do not need to create a request for XML; it is automatically generated by the SDK based on the function that you are calling


Getting Started

Requirements

  • iOS 15.6 or later
  • Xcode 26.0 or later (Swift tools version 5.9)
  • SDK initialization credentials provided by IDmission

Step 1: Get SDK initialization Credentials

Please contact sales@idmission.com for Login Credentials, which you will later pass to the SDK.

Step 2: Add IDentity 2.0 SDK to your app

The SDK can be added to your app in any one of the following ways. Choose the option supported by the SDK flavour you integrate:

SDK Flavour Swift Package Manager CocoaPods Manual
IDentityVideoIdSDK N/A ✅ ✅
IDentityMediumSDK ✅ ✅ ✅
IDentityLiteSDK ✅ ✅ ✅
IDentityLivenessSDK ✅ ✅ ✅

IDentityMediumSDK, IDentityLiteSDK & IDentityLivenessSDK are available through Swift Package Manager. SPM is supported from SDK version 11.1.19. IDentityVideoIdSDK is not available through SPM, please use CocoaPods or Manual integration.

  1. In Xcode, go to File -> Add Package Dependencies…
  2. Enter the package URL as per SDK flavour which you choose to integrate:
SDK Flavour Package URL
IDentityMediumSDK https://github.com/Idmission-LLC/identityMediumSDK-SPM
IDentityLiteSDK https://github.com/Idmission-LLC/identityLiteSDK-SPM
IDentityLivenessSDK https://github.com/Idmission-LLC/identityLivenessSDK-SPM
  1. Set the Dependency Rule to Up to Next Major Version with version 11.1.19.
  2. Click Add Package, then select the products you need from the list below.
  • IDentityMedium SPM products

    IDentityMediumSDK (Required) : Includes IDentityMediumSDK, IDCaptureMedium & SelfieCaptureMedium modules.
    IDentityMediumModels (Optional) : If developer wanto to use SDK without models they can skip this product.
    IDentityMediumNFC (Optional) : If developer required Passport / ID NFC chip reading feature they can use this product.
    SignatureCaptureMediumSDK (Optional) : If developer required this feature they can use this product.
    VoiceCaptureMediumSDK (Optional) : If developer required this feature they can use this product.
    FingerPrintCaptureMediumSDK (Optional) : If developer required this feature they can use this product.
    
  • IDentityLite SPM products

    IDentityLiteSDK (Required) : Includes IDentityLiteSDK, IDCaptureLite & SelfieCaptureLite modules.
    IDentityLiteModels (Optional) : If developer wanto to use SDK without models they can skip this product.
    SignatureCaptureLiteSDK (Optional) : If developer required this feature they can use this product.
    VoiceCaptureLiteSDK (Optional) : If developer required this feature they can use this product.
    FingerPrintCaptureLiteSDK (Optional) : If developer required this feature they can use this product.
    
  • IDentityLiveness SPM products

    IDentityLivenessSDK (Required) : Includes IDentityLivenessSDK & SelfieCaptureLiveness modules.
    IDentityLivenessModels (Optional) : If developer wanto to use SDK without models they can skip this product.
    

Note: For the optional capture products, the product name and the module name differ. For example, add the SignatureCaptureMediumSDK product but write import SignatureCaptureMedium in code. The Models and NFC products do not need to be imported.

If you use a Package.swift file instead of Xcode, add the dependency as below (example for IDentityMediumSDK):

dependencies: [
    .package(url: "https://github.com/Idmission-LLC/identityMediumSDK-SPM", from: "11.1.19")
],
targets: [
    .target(
        name: "YourApp",
        dependencies: [
            .product(name: "IDentityMediumSDK", package: "identityMediumSDK-SPM"),
            // Optional:
            // .product(name: "IDentityMediumModels", package: "identityMediumSDK-SPM"),
            // .product(name: "IDentityMediumNFC", package: "identityMediumSDK-SPM"),
        ]
    )
]

No external dependencies are required for SPM integration. Continue with Step 3.

Option B: CocoaPods

1. Create Podfile

Add CocoaPods pod file to your project using pod init command.

2. Add SDK pods

As per SDK flavour which you choose to integrate, add the following pods in your Podfile:

  • IDentityVideoId 2.0 pod

    pod 'IDentityVideoIdSDK2.0'
    pod 'IDentityVideoIdModels' (Optional) : If developer wanto to use SDK without models they can skip this framework.
    pod 'FingerPrintCaptureVideoId' (Optional) : If developer required this feature they can use this framework.
    pod 'SignatureCaptureVideoId' (Optional) : If developer required this feature they can use this framework.
    pod 'VoiceCaptureVideoId' (Optional) : If developer required this feature they can use this framework.
    pod 'VideoCaptureVideoId' (Optional) : If developer required this feature they can use this framework.
    
  • IDentityMedium 2.0 pod

    pod 'IDentityMediumSDK2.0'
    pod 'IDentityMediumModels' (Optional) : If developer wanto to use SDK without models they can skip this framework.
    pod 'FingerPrintCaptureMedium' (Optional) : If developer required this feature they can use this framework.
    pod 'SignatureCaptureMedium' (Optional) : If developer required this feature they can use this framework.
    pod 'VoiceCaptureMedium' (Optional) : If developer required this feature they can use this framework.
    pod 'IDentityMediumNFC' (Optional) : If developer required Passport / ID NFC chip reading feature they can use this framework.
    
  • IDentityLite 2.0 pod

    pod 'IDentityLiteSDK2.0'
    pod 'IDentityLiteModels' (Optional) : If developer wanto to use SDK without models they can skip this framework.
    pod 'FingerPrintCaptureLite' (Optional) : If developer required this feature they can use this framework.
    pod 'SignatureCaptureLite' (Optional) : If developer required this feature they can use this framework.
    pod 'VoiceCaptureLite' (Optional) : If developer required this feature they can use this framework.
    
  • IDentityLiveness 2.0 pod

    pod 'IDentityLivenessSDK2.0'
    pod 'IDentityLivenessModels' (Optional) : If developer wanto to use SDK without models they can skip this framework.
    

3. Add required dependencies (IDentityVideoIdSDK only)

Only IDentityVideoIdSDK2.0 requires external dependencies. Add the following to your Podfile:

pod 'GoogleMLKit/TextRecognition'
pod 'GoogleMLKit/ImageLabeling'

IDentityMediumSDK2.0, IDentityLiteSDK2.0 & IDentityLivenessSDK2.0 do not require any external dependencies.

Note: TensorFlowLite, GZIP and OpenSSL are now embedded inside the SDK as static libraries, so do not add TensorFlowLiteSwift, GZIP or OpenSSL-Universal pods to your Podfile.

4. Reduce the size of your app bundle (Optional, IDentityVideoIdSDK only)

Optionally add the following post_install script (replacing APP_TARGET with the name of your app target) to the end of your Podfile to prevent CocoaPods from statically-linking the above dependencies to your app binary, unnecessarily increasing the size of your app bundle:

post_install do |installer|
    installer.aggregate_targets.each do |aggregate_target|
        if aggregate_target.name == 'Pods-APP_TARGET'
            aggregate_target.xcconfigs.each do |config_name, config_file|
                aggregate_target.pod_targets.each do |pod_target|
                    pod_target.specs.each do |spec|
                        if spec.attributes_hash['vendored_frameworks'] != nil or (spec.attributes_hash['ios'] != nil and spec.attributes_hash['ios']['vendored_frameworks'] != nil)
                            puts "Removing #{spec.name}"
                            config_file.frameworks.delete(spec.name)
                        end
                    end
                end
                xcconfig_path = aggregate_target.xcconfig_path(config_name)
                config_file.save_as(xcconfig_path)
            end
        end
    end
end

5. Install pods

Run pod install to install the above mentioned pods, then open the generated .xcworkspace file. Continue with Step 3.

Option C: Manual

To add IDentitySDK2.0 manually, As per your requirement choose any SDK flavour & download it from below link.

  • Download IDentityVideoIdSDK2.0 : Drag & drop following files in your project.

    • IDentityVideoIdSDK.xcframework
    • IDCaptureVideoId.xcframework
    • SelfieCaptureVideoId.xcframework
    • IDentityVideoIdModels.xcframework (Optional) : If developer wanto to use SDK without models they can skip this framework.
    • SignatureCaptureVideoId.xcframework (Optional) : If developer required this feature they can use this framework.
    • FingerPrintCaptureVideoId.xcframework (Optional) : If developer required this feature they can use this framework.
    • VideoCaptureVideoId.xcframework (Optional) : If developer required this feature they can use this framework.
    • VoiceCaptureVideoId.xcframework (Optional) : If developer required this feature they can use this framework.
  • Download IDentityMediumSDK2.0 : Drag & drop following files in your project

    • IDentityMediumSDK.xcframework
    • IDCaptureMedium.xcframework
    • SelfieCaptureMedium.xcframework
    • IDentityMediumModels.xcframework (Optional) : If developer wanto to use SDK without models they can skip this framework.
    • SignatureCaptureMedium.xcframework (Optional) : If developer required this feature they can use this framework.
    • FingerPrintCaptureMedium.xcframework (Optional) : If developer required this feature they can use this framework.
    • VoiceCaptureMedium.xcframework (Optional) : If developer required this feature they can use this framework.
    • IDentityMediumNFC.xcframework (Optional) : If developer required Passport / ID NFC chip reading feature they can use this framework.
  • Download IDentityLiteSDK2.0 : Drag & drop following files in your project

    • IDentityLiteSDK.xcframework
    • IDCaptureLite.xcframework
    • SelfieCaptureLite.xcframework
    • IDentityLiteModels.xcframework (Optional) : If developer wanto to use SDK without models they can skip this framework.
    • SignatureCaptureLite.xcframework (Optional) : If developer required this feature they can use this framework.
    • FingerPrintCaptureLite.xcframework (Optional) : If developer required this feature they can use this framework.
    • VoiceCaptureLite.xcframework (Optional) : If developer required this feature they can use this framework.
  • Download IDentityLivenessSDK2.0 : Drag & drop following files in your project

    • IDentityLivenessSDK.xcframework
    • SelfieCaptureLiveness.xcframework
    • IDentityLivenessModels.xcframework (Optional) : If developer wanto to use SDK without models they can skip this framework.

Once added respective .xcframeworks in your project, make sure to make it all as a Embed & Sign in YourTarget -> General -> Frameworks, Libraries & and Embeded Content.

Note: IDentityVideoIdSDK still requires the GoogleMLKit/TextRecognition & GoogleMLKit/ImageLabeling dependencies when added manually. Add them using CocoaPods as described in Option B step 3. IDentityMediumSDK, IDentityLiteSDK & IDentityLivenessSDK do not require any external dependencies.

Step 3: Configure your project

Add Permissions

Add the following keys to the app’s Info.plist as per SDK flavour & optional frameworks which you integrate:

Info.plist key IDentityVideoIdSDK IDentityMediumSDK IDentityLiteSDK IDentityLivenessSDK
NSCameraUsageDescription Required Required Required Required
NSLocationWhenInUseUsageDescription Required ¹ Required ¹ Required ¹ Required ¹
NSMicrophoneUsageDescription Required ² Required ³ Required ³ N/A
NSSpeechRecognitionUsageDescription Required ⁴ N/A N/A N/A
NFCReaderUsageDescription N/A Required ⁵ N/A N/A
  1. Required when SDK is initialized with isGPSEnabled: true (Default) or geolocationRequired: true.
  2. Required when VideoCaptureVideoId or VoiceCaptureVideoId framework is used.
  3. Required only when VoiceCaptureMedium / VoiceCaptureLite framework is used.
  4. Required only when VideoCaptureVideoId framework is used.
  5. Required only when IDentityMediumNFC framework is used.

Enable NFC (IDentityMediumSDK with IDentityMediumNFC only)

If you use the optional IDentityMediumNFC framework for Passport / ID NFC chip reading, also add the following:

  • Add the Near Field Communication Tag Reading capability in YourTarget -> Signing & Capabilities. This adds the following entitlement to the app’s .entitlements file: xml <key>com.apple.developer.nfc.readersession.formats</key> <array> <string>TAG</string> </array>
  • Add the com.apple.developer.nfc.readersession.iso7816.select-identifiers key to the app’s Info.plist with the following values: xml <key>com.apple.developer.nfc.readersession.iso7816.select-identifiers</key> <array> <string>A0000002471001</string> <string>A0000002472001</string> <string>00000000000000</string> </array>
  • Set IDCapture.options.enablePassportNFC = true before starting an ID Capture flow.

Add API Required Reasons

Add the following dependency API required reasons to the app’s PrivacyInfo.xcprivacy file:

  • File Timestamp: C617.1, 3B52.1
  • System Boot Time: 35F9.1
  • Disk Space: E174.1
  • User Defaults: CA92.1, 1C8F.1, C56D.1


SDK Initialization

Initialize the SDK in the following sequence:

  1. Generate Access Token (on your server)
  2. Import Frameworks
  3. Set API Base URL
  4. Initialize the SDK
  5. Track Initialization Progress (Optional)

1. Generate Access Token

Tokens are to be obtained on your server and sent to the client in the initialize call.

The following details are required to generate a token:

Parameter Description
Auth_url Authentication url for the given environment
client_id Client ID generated for the specific company
client_secret Client credentials/secret generated for the specific company
Username Integ user name
Password Password of the Integ user

All company login details needed are provided upon sign up on the Identity Portal.

Token Generation Sample Request:

 curl --location --request POST 'https://auth.idmission.com/auth/realms/identity/protocol/openid-connect/token' \
 --header 'Content-Type: application/x-www-form-urlencoded' \
 --data-urlencode 'grant_type=password' \
 --data-urlencode 'client_id=XXXXXXX' \
 --data-urlencode 'client_secret=XXXXXXXX' \
 --data-urlencode 'username=XXXXXXXX' \
 --data-urlencode 'password=XXXXXXXXX' \
 --data-urlencode 'scope=api_access'

Sample Response - Token Generation:

 {
    "access_token": "eyJhbGciO....5gNZx03Myb8ZuyY2gu3u-8KgGmULBs9mkPcg",
    "expires_in": 18000,
    "refresh_expires_in": 0,
    "token_type": "Bearer",
    "session_state": "e0b689e8-e7c6-47b7-bf9d-1349ea813c96",
    "scope": "email profile api_access"
 }

The following details are the response parameters:

Parameter Description
access_token Access Token value
expires_in Access token expires time in seconds
refresh_expires_in Refresh access token expires time in seconds
token_type Token type
session_state Session state value
scope Token scope

2. Import Frameworks

import the following frameworks as per SDK flavour which you integrate:

  • IDentityVideoIdSDK

    import IDentityVideoIdSDK
    import IDCaptureVideoId
    import SelfieCaptureVideoId
    // Optional frameworks, as per business requirement:
    import SignatureCaptureVideoId
    import FingerPrintCaptureVideoId
    import VideoCaptureVideoId
    import VoiceCaptureVideoId
    
  • IDentityMediumSDK

    import IDentityMediumSDK
    import IDCaptureMedium
    import SelfieCaptureMedium
    // Optional frameworks, as per business requirement:
    import SignatureCaptureMedium
    import FingerPrintCaptureMedium
    import VoiceCaptureMedium
    
  • IDentityLiteSDK

    import IDentityLiteSDK
    import IDCaptureLite
    import SelfieCaptureLite
    // Optional frameworks, as per business requirement:
    import SignatureCaptureLite
    import FingerPrintCaptureLite
    import VoiceCaptureLite
    
  • IDentityLivenessSDK

    import IDentityLivenessSDK
    import SelfieCaptureLiveness
    

Note: The Models & NFC frameworks do not need to be imported. Once added to the app, the SDK detects them automatically at runtime.

3. Set API Base URL

Before initializing the SDK, set the API base URL of your environment. Default is https://api.idmission.com/.

IDentitySDK.apiBaseUrl = "https://api.idmission.com/"

4. Initialize the SDK

Pass the access token obtained from your server in the initialize call as below:

IDentitySDK.initializeSDK(language: .en,
                          isGPSEnabled: true,
                          geolocationRequired: false,
                          isUpdateModelsData: true,
                          accessToken: accessToken) { error in
    if let error = error {
        // Handle Error
        print(error.localizedDescription)
    } else {
        // Success! SDK is initialized
    }
}
Parameter Type Required Default Description
language Language No .en User interface language (.en / .es).
isGPSEnabled Bool No true Whether or not to capture the device GPS location.
geolocationRequired Bool No false If true, location permission is mandatory to use the SDK.
isUpdateModelsData Bool No true Whether or not to download the latest SDK models after credential verification.
accessToken String Yes - Access token generated in Step 1.
completion (Error?) -> Void Yes - If Error? is nil, the SDK was initialized successfully.

Once the SDK has been initialized, the application can start capturing data using the various following static IDentitySDK methods.

5. Track Initialization Progress (Optional)

To track the login, template & model download status, set IDentitySDK.delegate before calling initializeSDK and implement the InitializationDelegate protocol. updateInitialization(stage:state:) is called every time a stage changes its state.

Each SDK flavour reports only the stages it uses:

Stage IDentityVideoIdSDK IDentityMediumSDK IDentityLiteSDK IDentityLivenessSDK
.login ✅ ✅ ✅ ✅
.getXsltData ✅ ✅ ✅ N/A
.searchCompanyTemplateDetails ✅ ✅ ✅ N/A
.faceFullRangeSparseTrainingModelLabel ✅ ✅ ✅ ✅
.faceLandmarksDetectorTrainingModelLabel ✅ ✅ ✅ ✅
.faceBlendshapesDetectorTrainingModelLabel ✅ ✅ ✅ ✅
.passiveFaceTrainingModelLabel ✅ ✅ ✅ ✅
.faceMaskTrainingModelLabel ✅ ✅ ✅ ✅
.focusFaceTrainingModelLabel ✅ ✅ ✅ ✅
.idCaptureTrainingModelLabel (Document Realness) ✅ ✅ N/A N/A
.classifierTrainingModelLabel (Document Classification) ✅ N/A N/A N/A
.docDetectionTrainingModelLabel ✅ ✅ ✅ N/A
.focusTrainingModelLabel ✅ ✅ ✅ N/A
.fingerprintDetectionTrainingModelLabel ¹ ✅ ✅ ✅ N/A
.paddleOCRDetectionTrainingModelLabel N/A ✅ N/A N/A
.paddleOCRRecognitionTrainingModelLabel N/A ✅ N/A N/A
  1. When the FingerPrintCapture framework is not added, this stage is reported as .ok immediately.

Select the stages of your SDK flavour:

// IDentityVideoIdSDK
let templateStages: [InitializationStage] = [.getXsltData, .searchCompanyTemplateDetails]
let modelStages: [InitializationStage] = [.faceFullRangeSparseTrainingModelLabel, .faceLandmarksDetectorTrainingModelLabel,
                                          .faceBlendshapesDetectorTrainingModelLabel, .passiveFaceTrainingModelLabel,
                                          .faceMaskTrainingModelLabel, .focusFaceTrainingModelLabel,
                                          .idCaptureTrainingModelLabel, .classifierTrainingModelLabel,
                                          .docDetectionTrainingModelLabel, .focusTrainingModelLabel,
                                          .fingerprintDetectionTrainingModelLabel]

// IDentityMediumSDK
let templateStages: [InitializationStage] = [.getXsltData, .searchCompanyTemplateDetails]
let modelStages: [InitializationStage] = [.faceFullRangeSparseTrainingModelLabel, .faceLandmarksDetectorTrainingModelLabel,
                                          .faceBlendshapesDetectorTrainingModelLabel, .passiveFaceTrainingModelLabel,
                                          .faceMaskTrainingModelLabel, .focusFaceTrainingModelLabel,
                                          .idCaptureTrainingModelLabel, .docDetectionTrainingModelLabel,
                                          .focusTrainingModelLabel, .fingerprintDetectionTrainingModelLabel,
                                          .paddleOCRDetectionTrainingModelLabel, .paddleOCRRecognitionTrainingModelLabel]

// IDentityLiteSDK
let templateStages: [InitializationStage] = [.getXsltData, .searchCompanyTemplateDetails]
let modelStages: [InitializationStage] = [.faceFullRangeSparseTrainingModelLabel, .faceLandmarksDetectorTrainingModelLabel,
                                          .faceBlendshapesDetectorTrainingModelLabel, .passiveFaceTrainingModelLabel,
                                          .faceMaskTrainingModelLabel, .focusFaceTrainingModelLabel,
                                          .docDetectionTrainingModelLabel, .focusTrainingModelLabel,
                                          .fingerprintDetectionTrainingModelLabel]

// IDentityLivenessSDK
let templateStages: [InitializationStage] = []
let modelStages: [InitializationStage] = [.faceFullRangeSparseTrainingModelLabel, .faceLandmarksDetectorTrainingModelLabel,
                                          .faceBlendshapesDetectorTrainingModelLabel, .passiveFaceTrainingModelLabel,
                                          .faceMaskTrainingModelLabel, .focusFaceTrainingModelLabel]

Then check for completion of the stage states:

class ViewController: UIViewController {
    private var states = [InitializationStage: InitializationState]()

    override func viewDidLoad() {
        super.viewDidLoad()
        IDentitySDK.delegate = self // Set before calling `initializeSDK`
    }
}

extension ViewController: InitializationDelegate {
    func updateInitialization(stage: InitializationStage, state: InitializationState) {
        print("\(stage.rawValue) Status :", state.rawValue)
        states[stage] = state

        let isLoginDone = states[.login] == .downloaded
        let areTemplatesDone = templateStages.allSatisfy { [.ok, .downloaded].contains(states[$0]) }
        let areModelsDone = modelStages.allSatisfy { [.ok, .downloadedFromS3, .error].contains(states[$0]) }

        if isLoginDone && areTemplatesDone && areModelsDone {
            // Initialization completed, start capturing
            activityIndicator.stopAnimating()
            continueButton.isHidden = false
        } else if states[.login] == .error || templateStages.contains(where: { states[$0] == .error }) {
            // Initialization failed
            activityIndicator.stopAnimating()
            goBackButton.isHidden = false
        }
    }
}


SDK Features


1) Live face Check.

You can do Live face check using following method from a UIViewController. If successful, call submit to send the result to the server.

  • IDentityVideoIdSDK / IDentityMediumSDK / IDentityLiteSDK / IDentityLivenessSDK : For all flavours user need to use below API call for Live Face Check
// Start live face capture, presenting it from view controller
let commonCustomerData = CommonCustomerDataRequest()
let options = AdditionalCustomerLiveCheckData()
IDentitySDK.liveFaceCheck(from: self, customerDataOptions: commonCustomerData, options: options) { result in
    switch result {
        case .success(let liveFaceCheckResult):

            // submit the successful result to the server
            liveFaceCheckResult.finalSubmit { result in
                switch result {
                    case .success(let response):
                        // Review successful response from the server
                        print(response)

                    case .failure(let error):
                        // Handle error
                        print(error.localizedDescription)
                }
            }

        case .failure(let error):
            // Handle error
            print(error.localizedDescription)
    }
}

The CommonCustomerDataRequest & AdditionalCustomerLiveCheckData documentation contains information on the various capture options that can be set.


2) ID Validation.

For ID Validation you need to use below respective methods of SDK Flavours with the default options from a UIViewController. If successful, call submit to send the result to the server.

  • IDentityVideoIdSDK : For IDentityVideoIdSDK flavour user needs to use below API call for ID Validation.
// For IDentityVideoIdSDK : Start ID Validation with the default options, presenting it from view controller(self)

let commonCustomerData = CommonCustomerDataRequest()
let options = AdditionalCustomerWFlagCommonData()
IDentitySDK.idValidation(from: self, customerDataOptions: commonCustomerData, options: options) { result in
    switch result {
        case .success(let validateIdResult):

            // submit the successful result to the server 
            validateIdResult.finalSubmit { result in
                switch result {  
                    case .success(let response):  
                        // Review successful response from the server  
                        print(response)  

                    case .failure(let error):  
                        // Handle error  
                        print(error.localizedDescription)  
                }  
            }

        case .failure(let error): 
            print(error.localizedDescription)
    }    
}
  • IDentityMediumSDK / IDentityLiteSDK : For IDentityMediumSDK & IDentityLiteSDK flavours user can use either anyone below API call for ID Validation.
// For IDentityMediumSDK / IDentityLiteSDK :  Start ID Validation using captureBack(true/false/auto) values with the default options, presenting it from view controller(self)

let commonCustomerData = CommonCustomerDataRequest()
let options = AdditionalCustomerWFlagCommonData()
IDentitySDK.idValidation(from: self, customerDataOptions: commonCustomerData, options: options, captureBack: captureBack) { result in
    switch result {
        case .success(let validateIdResult):

            // submit the successful result to the server
            validateIdResult.finalSubmit { result in
                switch result {
                    case .success(let response):
                        // Review successful response from the server
                        print(response)

                    case .failure(let error):
                        // Handle error
                        print(error.localizedDescription)
                }
            }

        case .failure(let error):
            // Handle error
            print(error.localizedDescription)
    }
}

OR

// For IDentityMediumSDK / IDentityLiteSDK : Start ID Validation using idType, idCountry, idState with the default options, presenting it from view controller(self)

let commonCustomerData = CommonCustomerDataRequest()
let options = AdditionalCustomerWFlagCommonData()
IDentitySDK.idValidation(from: self, customerDataOptions: commonCustomerData, options: options, idType: idType, idCountry: idCountry, idState: idState) { result in
    switch result {
        case .success(let validateIdResult):

            // submit the successful result to the server
            validateIdResult.finalSubmit { result in
                switch result {
                    case .success(let response):
                        // Review successful response from the server
                        print(response)

                    case .failure(let error):
                        // Handle error
                        print(error.localizedDescription)
                }
            }

        case .failure(let error):
            // Handle error
            print(error.localizedDescription)
    }
}

The CommonCustomerDataRequest & AdditionalCustomerWFlagCommonData documentation contains information on the various capture options that can be set.

All above idValidation methods also accept an optional isSecondaryID parameter (Default is false). Pass isSecondaryID: true just before the completion closure to capture a secondary ID.


3) ID Validation and face match.

For ID Validation and face match you need to use below respective methods of SDK Flavours with the default options from a UIViewController. If successful, call submit to send the result to the server.

  • IDentityVideoIdSDK : For IDentityVideoIdSDK flavour user needs to use below API call for ID Validation and face match.
// For IDentityVideoIdSDK : Start ID Validation and face match with the default options, presenting it from view controller(self)

let commonCustomerData = CommonCustomerDataRequest()
let options =  AdditionalCustomerWFlagCommonData()
IDentitySDK.idValidationAndMatchFace(from: self, customerDataOptions: commonCustomerData, options: options) { result in
    switch result {
        case .success(let validateIdMatchFaceResult):

            // submit the successful result to the server 
            validateIdMatchFaceResult.finalSubmit { result in  
                switch result {  
                    case .success(let response):  
                        // Review successful response from the server  
                        print(response)  
                    case .failure(let error):  
                        // Handle error  
                        print(error.localizedDescription)  
                }  
            }

        case .failure(let error): 
            print(error.localizedDescription)
    }    
}
  • IDentityMediumSDK / IDentityLiteSDK : For IDentityMediumSDK & IDentityLiteSDK flavours user can use either anyone below API call ID Validation and face match.
// For IDentityMediumSDK / IDentityLiteSDK : Start ID Validation and face match using captureBack(true/false/auto) values with the default options, presenting it from view controller(self)

let commonCustomerData = CommonCustomerDataRequest()
let options = AdditionalCustomerWFlagCommonData()
IDentitySDK.idValidationAndMatchFace(from: self, customerDataOptions: commonCustomerData, options: options, captureBack: captureBack) { result in
    switch result {
        case .success(let validateIdMatchFaceResult):

            // submit the successful result to the server
            validateIdMatchFaceResult.finalSubmit { result in
                switch result {
                    case .success(let response):
                        // Review successful response from the server
                        print(response)

                    case .failure(let error):
                        // Handle error
                        print(error.localizedDescription)
                }
            }

        case .failure(let error):
            // Handle error
            print(error.localizedDescription)
    }
}

OR

// For IDentityMediumSDK / IDentityLiteSDK : Start ID Validation and face match using idType, idCountry, idState with the default options, presenting it from view controller(self)

let commonCustomerData = CommonCustomerDataRequest()
let options = AdditionalCustomerWFlagCommonData()
IDentitySDK.idValidationAndMatchFace(from: self, customerDataOptions: commonCustomerData, options: options, idType: idType, idCountry: idCountry, idState: idState) { result in
    switch result {
        case .success(let validateIdMatchFaceResult):

            // submit the successful result to the server
            validateIdMatchFaceResult.finalSubmit { result in
                switch result {
                    case .success(let response):
                        // Review successful response from the server
                        print(response)

                    case .failure(let error):
                        // Handle error
                        print(error.localizedDescription)
                }
            }

        case .failure(let error):
            // Handle error
            print(error.localizedDescription)
    }
}

The CommonCustomerDataRequest & AdditionalCustomerWFlagCommonData documentation contains information on the various capture options that can be set.

All above idValidationAndMatchFace methods also accept an optional isSecondaryID parameter (Default is false). Pass isSecondaryID: true just before the completion closure to capture a secondary ID.


4) Enroll Biometric.

For Enroll Biometric you need to use below method with personalData & & the default options from a UIViewController. If successful, call submit to send the result to the server.

  • IDentityVideoIdSDK / IDentityMediumSDK / IDentityLiteSDK / IDentityLivenessSDK : For all flavours user needs to use below API call method for Enroll Biometric.
// Start customer enroll birometric with personalData & the default options, presenting it from view controller(self)

let commonCustomerData = CommonCustomerDataRequest()
let personalData = PersonalCustomerEnrollBiometricsRequestData(uniqueNumber: uniqueNumber)
let options = AdditionalCustomerEnrollBiometricRequestData()
IDentitySDK.customerEnrollBiometrics(from: self, customerDataOptions: commonCustomerData, personalData: personalData, options: options) { result in
    switch result {
        case .success(let customerEnrollBiometricsResult):

            // submit the successful result to the server
            customerEnrollBiometricsResult.finalSubmit { result in
                switch result {
                    case .success(let response):
                        // Review successful response from the server
                        print(response)

                    case .failure(let error):
                        // Handle error
                        print(error.localizedDescription)
                }
            }

        case .failure(let error):
            // Handle error
            print(error.localizedDescription)
    }
}

The CommonCustomerDataRequest, PersonalCustomerEnrollBiometricsRequestData & AdditionalCustomerEnrollBiometricRequestData documentation contains information on the various capture options that can be set.


5) Enroll Customer with ID validation.

For Enroll Customer with ID validation you need to use below respective methods of SDK Flavours with personalData & the default options from a UIViewController. If successful, call submit to send the result to the server.

  • IDentityVideoIdSDK : For IDentityVideoIdSDK flavour user needs to use below API call for Enroll Customer with ID validation.
// For IDentityVideoIdSDK : Start Enroll Customer with ID validation with personalData & the default options, presenting it from view controller(self)

let commonCustomerData = CommonCustomerDataRequest()
let personalData = PersonalCustomerCommonRequestEnrollData(uniqueNumber: uniqueNumber)
let options = AdditionalCustomerWFlagCommonData()
IDentitySDK.idValidationAndCustomerEnroll(from: self, customerDataOptions: commonCustomerData, personalData: personalData, options: options) { result in
    switch result {
        case .success(let customerEnrollResult):

            // submit the successful result to the server
            customerEnrollResult.finalSubmit { result in
                switch result {
                    case .success(let response):
                        // Review successful response from the server
                        print(response)

                    case .failure(let error):
                        // Handle error
                        print(error.localizedDescription)
                }
            }

        case .failure(let error):
            // Handle error
            print(error.localizedDescription)
    }
}
  • IDentityMediumSDK / IDentityLiteSDK : For IDentityMediumSDK & IDentityLiteSDK flavours user can use either anyone below API call Enroll Customer with ID validation.
// For IDentityMediumSDK / IDentityLiteSDK : Start Enroll Customer with ID validation using captureBack(true/false/auto) values with personalData & the default options, presenting it from view controller(self)

let commonCustomerData = CommonCustomerDataRequest()
let personalData = PersonalCustomerCommonRequestEnrollData(uniqueNumber: uniqueNumber)
let options = AdditionalCustomerWFlagCommonData()
IDentitySDK.idValidationAndCustomerEnroll(from: self, customerDataOptions: commonCustomerData, personalData: personalData, options: options, captureBack: captureBack) { result in
    switch result {
        case .success(let customerEnrollResult):

            // submit the successful result to the server
            customerEnrollResult.finalSubmit { result in
                switch result {
                    case .success(let response):
                        // Review successful response from the server
                        print(response)

                    case .failure(let error):
                        // Handle error
                        print(error.localizedDescription)
                }
            }

        case .failure(let error):
            // Handle error
            print(error.localizedDescription)
    }
}

OR

// For IDentityMediumSDK / IDentityLiteSDK : Start Enroll Customer with ID validation using idType, idCountry, idState with personalData & the default options, presenting it from view controller(self)

let commonCustomerData = CommonCustomerDataRequest()
let personalData = PersonalCustomerCommonRequestEnrollData(uniqueNumber: uniqueNumber)
let options = AdditionalCustomerWFlagCommonData()
IDentitySDK.idValidationAndCustomerEnroll(from: self, customerDataOptions: commonCustomerData, personalData: personalData, options: options, idType: idType, idCountry: idCountry, idState: idState) { result in
    switch result {
        case .success(let customerEnrollResult):

            // submit the successful result to the server
            customerEnrollResult.finalSubmit { result in
                switch result {
                    case .success(let response):
                        // Review successful response from the server
                        print(response)

                    case .failure(let error):
                        // Handle error
                        print(error.localizedDescription)
                }
            }

        case .failure(let error):
            // Handle error
            print(error.localizedDescription)
    }
}

The CommonCustomerDataRequest, PersonalCustomerCommonRequestEnrollData & AdditionalCustomerWFlagCommonData documentation contains information on the various capture options that can be set.


6) Customer Verification.

For Customer Verification you need to use below method with personalData from a UIViewController. If successful, call submit to send the result to the server.

  • IDentityVideoIdSDK / IDentityMediumSDK / IDentityLiteSDK / IDentityLivenessSDK : For all flavours user needs to use below API call method for Customer Verification Verification.
// Start Customer Verification with personalData, presenting it from view controller(self)

let commonCustomerData = CommonCustomerDataRequest()
let personalData = PersonalCustomerVerifyData(uniqueNumber: uniqueNumber)
let options = AdditionalCustomerCommonData()
IDentitySDK.customerVerification(from: self, customerDataOptions: commonCustomerData, personalData: personalData, options: options) { result in  
    switch result {
        case .success(let customerVerificationResult):

            // submit the successful result to the server
            customerVerificationResult.finalSubmit { result in
                switch result {
                    case .success(let response):
                        // Review successful response from the server
                        print(response)

                    case .failure(let error):
                        // Handle error
                        print(error.localizedDescription)
                }
            }

        case .failure(let error):
            // Handle error
            print(error.localizedDescription)
    }
}

Please refer CommonCustomerDataRequest, PersonalCustomerVerifyData & AdditionalCustomerCommonData documentation for more details.


7) Customer Biometric Verification.

For Customer Biometric Verification you need to use below method of from a UIViewController. If successful, call submit to send the result to the server.

  • IDentityVideoIdSDK / IDentityMediumSDK / IDentityLiteSDK / IDentityLivenessSDK : For all flavours user needs to use below API call method for Customer Biometric Verification.
// start Customer Biometric Verification, presenting it from view controller(self)

let commonCustomerData = CommonCustomerDataRequest()
let options = AdditionalCustomerCommonData()
IDentitySDK.identifyCustomer(from: self, customerDataOptions: commonCustomerData, options: options) { result in
    switch result {
        case .success(let customerIdentifyResult):

            // submit the successful result to the server
            customerIdentifyResult.finalSubmit { result in
                switch result {
                    case .success(let response):
                        // Review successful response from the server
                        print(response)

                    case .failure(let error):
                        // Handle error
                        print(error.localizedDescription)
                }
            }

        case .failure(let error):
            // Handle error
            print(error.localizedDescription)
    }
}

Please refer CommonCustomerDataRequest & AdditionalCustomerCommonData documentation for more details.


8) Autofill.

For autofill you need to use below method of from a UIViewController. If successful, call submit to send the result to the server.

  • IDentityVideoIdSDK / IDentityMediumSDK : For IDentityVideoIdSDK / IDentityMediumSDK flavours user needs to use below API call method for autofill.
// start autofill, presenting it from view controller(self)

IDentitySDK.autofill(from: self, captureIdSide: .front) { result in
    switch result {
        case .success(let autofillResult):

            // submit the successful result to the server
            autofillResult.finalSubmit { result in
                switch result {
                    case .success(let response):
                        // Review successful response from the server
                        print(response)

                    case .failure(let error):
                        // Handle error
                        print(error.localizedDescription)
                }
            }

        case .failure(let error):
            // Handle error
            print(error.localizedDescription)
    }
}


9) Additional Document Capture.

For additinal Document Capture you need to use below method of from a UIViewController. If successful, call submit to send the result to the server.

  • IDentityVideoIdSDK / IDentityMediumSDK / IDentityLiteSDK : For IDentityVideoIdSDK / IDentityMediumSDK / IDentityLiteSDK flavours user needs to use below API call method for Document Capture.
// start document Capture, presenting it from view controller(self)

IDentitySDK.documentCapture(from: self, documentName: documentName, processAsPOA: .no, uploadDocument: uploadDocument) { documentResult in
    switch documentResult {
        case .success(let additionalDocument):
            // Review successful response from the server
            print(additionalDocument)
        case .failure(let error):
            // Handle error
            print(error.localizedDescription)
    }
}


10) Signature Capture.

For Signature Capture you need to use below method from a UIViewController. If successful, call submit to send the result to the server.

  • IDentityVideoIdSDK / IDentityMediumSDK / IDentityLiteSDK : For IDentityVideoIdSDK / IDentityMediumSDK / IDentityLiteSDK flavours user needs to use below API call method for Signature Capture.
// start Signature Capture, presenting it from view controller(self)

IDentitySDK.signatureCapture(from: self) { signatureResult in
    switch signatureResult {
        case .success(let signatureData):
            // Review successful response from the server
            print(signatureData)
        case .failure(let error):
            // Handle error
            print(error.localizedDescription)
    }
}


11) FingerPrint Capture.

For FingerPrint Capture you need to use below method from a UIViewController. If successful, call submit to send the result to the server.

  • IDentityVideoIdSDK / IDentityMediumSDK / IDentityLiteSDK : For IDentityVideoIdSDK / IDentityMediumSDK / IDentityLiteSDK flavours user needs to use below API call method for FingerPrint Capture.
// start FingerPrint Capture, presenting it from view controller(self)

IDentitySDK.fingerPrintCapture(from: self) { fingerPrintResult in
    switch fingerPrintResult {
        case .success(let fingerPrintData):
            // Review successful response from the server
            print(fingerPrintData)
        case .failure(let error):
            // Handle error
            print(error.localizedDescription)
    }
}


12) Voice Capture.

For Voice Capture you need to use below method from a UIViewController. If successful, call submit to send the result to the server.

  • IDentityVideoIdSDK / IDentityMediumSDK / IDentityLiteSDK : For IDentityVideoIdSDK / IDentityMediumSDK / IDentityLiteSDK flavours user needs to use below API call method for Voice Capture.
// start Voice Capture, presenting it from view controller(self)

IDentitySDK.voiceCapture(from: self) { voiceResult in
    switch voiceResult {
        case .success(let url):
            // Review successful recording file URL 
            print(url)
        case .failure(let error):
            // Handle error
            print(error.localizedDescription)
    }
}


13) Video Capture.

For Video Capture you first need to successfully complete the ID Validation flow from item 2) above before passing the front and back DetectedData items from the ValidateIdResult to the below method presented from a UIViewController.

  • IDentityVideoIdSDK : For IDentityVideoIdSDK flavour user needs to use below API call method for Video Capture.
// Text for the user to read aloud during video recording.
let text = "..."

// Start Video Capture, presenting it from view controller(self)

IDentitySDK.videoIDCapture(from: self, front: lastValidateIdResult.front, back: lastValidateIdResult.back, text: text) { result in
    switch result {
    case .success(let videoIdResult):
        // Copy or move the video from its temporary location to the documents folder.
        // (The temporary video will be removed once this method returns.)
        let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
        let url = documentDirectory.appendingPathComponent("video.mp4")
        try? FileManager.default.moveItem(at: videoIdResult.videoURL, to: url)

        // Review successful video ID result.
        print(videoIdResult)
    case .failure(let error):
        // Handle error.
        print(error.localizedDescription)
    }
}


Generic Final Submit.

Generic Final Submit is used to make API calls for custom configurations for a client

// Submit the XML request by passing additionalDictionary in genericDictionary, Here is the sample genericDictionary which needs to be pass in `genericAPICall`.

let additionDictionary = ["Service_ID" : "",
                          "verificationResultId": ""] as NSMutableDictionary

let genericDictionary = ["additionalDictionary" : additionDictionary,
                         "clearFormKey" : "N",
                         "countryCode" : "",
                         "imageType" : "",
                         "faceImageType" : "",
                         "ProductId" : "",
                         "ProductName" : "Identity_Validation_and_Face_Matching"] as [String : Any]

IDentitySDK.genericApiCall(genericDataDictionary: genericDictionary) { response in
    switch response {
    case .success(let responseDictionary):
        // Handle successful response
        print(responseDictionary)
    case .failure(let error):
        // Handle error
        print(error.localizedDescription)
    }
}

Optional Customizations

  • Before starting an ID Capture flow, optionally adjust the following IDCapture static properties:
//IDCapture Customization
IDCapture.options.frontRealnessThreshold = 0.5
IDCapture.options.backRealnessThreshold = 0.3
IDCapture.options.frontDocumentConfidence = 0.7
IDCapture.options.backDocumentConfidence = 0.7
IDCapture.options.documentComponentConfidence = 0.5
IDCapture.options.documentBackComponentConfidence = 0.7
IDCapture.options.glareThreshold = 0.5
IDCapture.options.fingerThreshold = 0.5
IDCapture.options.lowerWidthThresholdTolerance = 0.3
IDCapture.options.upperWidthThresholdTolerance = 0.05
IDCapture.options.isDebugMode = true
IDCapture.options.enableInstructionScreen = true
IDCapture.options.isIdInstructionAnimationEnabled = true
IDCapture.options.idCaptureInstructionAnimationImages = [UIImage(named: "IdInstruction1")!, UIImage(named: "IdInstruction2")!]
IDCapture.options.idInstructionAnimationDuration = 1
IDCapture.options.enableRealId = true
IDCapture.options.uploadIdData = true
IDCapture.options.capture4K = true
IDCapture.options.focusThreshold = 0.2
IDCapture.options.barcodeCropPadding = 0.1
IDCapture.options.isBarcodeRecoveryEnabled = true
IDCapture.options.missingBarcodeTimeInterval = 5
IDCapture.options.barcodeRecoveryMoveCloserTimeInterval = 10
IDCapture.options.barcodeRecoveryCaptureTimeInterval = 5
IDCapture.options.enablePassportNFC = false
IDCapture.options.showPassportNFCReadProgress = true
IDCapture.options.passportNFCReadChunkSize = 0xFF
IDCapture.options.performIdCaptureBeforeSelfie = false
IDCapture.options.passportNFCPhotoMatchThreshold = 0.97
IDCapture.options.cameraScreenBackButtonIsHidden = false
IDCapture.options.separateIdCardCaptureSequence = false
IDCapture.options.isIDCapturePreviewEnabled = false
IDCapture.options.isIdCaptureProgressBarEnabled = true
IDCapture.options.idCaptureProgressBarLineWidth = 10.0
IDCapture.options.wrongDocumentTypeHandlingMode = .manualCapture /.autoCapture / .exit
IDCapture.options.allowOverrideWrongDocumentTypeAfterSec = 8
IDCapture.options.wrongDocumentTypeWarningDelayInSec = 5
IDCapture.options.consecutiveFakeIdCaptureLimit = 3
IDCapture.options.idCaptureOrientationMode = .horizontal / .vertical / .dynamic
IDCapture.options.enableDynamicBothSideCapture = false

//IDCapture Camera Screen UI Customization
IDCapture.strings.closeButtonText = "Cancel"
IDCapture.strings.captureFront = "Capture Front Side"
IDCapture.strings.captureBack = "Capture Back Side"
IDCapture.strings.moveAway = "Move ID Away"
IDCapture.strings.moveCloser = "Move ID Closer"
IDCapture.strings.makeSurePhotoTextVisible = "Make Sure Photo & Text are Visible in ID"
IDCapture.strings.makeSureBarcodeVisible = "Make sure Barcode is visible"
IDCapture.strings.alignRectangle = "Align ID inside Rectangle"
IDCapture.strings.flipToBack = "Flip To Back side"
IDCapture.strings.backImageDetected = "ID Back image detected, please flip your ID."
IDCapture.strings.frontImageDetected = "ID Front image detected, please flip your ID."
IDCapture.strings.idCardBackDetectedHoldStill = "ID card back detected. Hold still..."
IDCapture.strings.idCaptureWarningMessage = "We are having trouble identifying the correct side of your ID"
IDCapture.strings.faceDoesNotMatch = "Face does not match"
IDCapture.strings.tooMuchGlare = "Too Much Glare"
IDCapture.strings.useFront = "Scan the front of ID"
IDCapture.strings.scanBarcode = "Scan the barcode"
IDCapture.strings.frontBackMismatch = "ID front and back do not match. Please try again."
IDCapture.strings.autofillPrompt = "Place the barcode or machine-readable zone of your ID in the rectangle."
IDCapture.strings.notInFocus = "Not in focus"
IDCapture.strings.documentDetectedHoldStill = "Document detected, hold still..."
IDCapture.strings.glareDetected = "Move Away From Direct Light"
IDCapture.strings.removeFinger = "Remove Finger"
IDCapture.strings.captureAnywayButtonText = "Capture Anyway"
IDCapture.strings.exitButtonText = "Exit"
IDCapture.colors.backgroundColor = .clear
IDCapture.colors.overlayTopViewColor = .white
IDCapture.colors.closeButtonColor = .white
IDCapture.colors.closeButtonTextColor = .black
IDCapture.colors.closeButtonImageTintColor = .white
IDCapture.colors.captureLabelColor = .white
IDCapture.colors.captureLabelTextColor = .clear
IDCapture.colors.successLabelBackgroundColor = .green
IDCapture.colors.successLabelTextColor = .white
IDCapture.colors.errorLabelBackgroundColor = .red
IDCapture.colors.errorLabelTextColor = .white
IDCapture.colors.warningLabelBackgroundColor = .yellow
IDCapture.colors.warningLabelTextColor = .black
IDCapture.colors.infoLabelBackgroundColor = .black
IDCapture.colors.infoLabelTextColor = .white
IDCapture.colors.captureAnywayButtonColor = .blue
IDCapture.colors.captureAnywayButtonTextColor = .white
IDCapture.colors.exitButtonColor = .blue
IDCapture.colors.exitButtonTextColor = .white
IDCapture.colors.idCaptureProgressBarColor = .green
IDCapture.fonts.closeButtonTextFont = UIFont.systemFont(ofSize: 20)
IDCapture.fonts.captureLabelFont = UIFont.boldSystemFont(ofSize: 14)
IDCapture.fonts.labelFont = UIFont.systemFont(ofSize: 14)
IDCapture.fonts.warningLabelFont = UIFont.systemFont(ofSize: 14)
IDCapture.fonts.captureAnywayButtonTextFont = UIFont.systemFont(ofSize: 17)
IDCapture.fonts.exitButtonTextFont = UIFont.systemFont(ofSize: 17)
IDCapture.layout.captureLabelPosition = .center
IDCapture.layout.labelPosition = .top
IDCapture.images.closeButtonImage = UIImage(named: "Close")
IDCapture.images.silhouetteImage = UIImage(named: "IdOverlay")
IDCapture.images.frontSilhouetteImage = UIImage(named: "IdFrontOverlay")
IDCapture.images.backSilhouetteImage = UIImage(named: "IdBackOverlay")
IDCapture.images.bottomInfoImage = UIImage(named: "IdiInfo")
IDCapture.style.captureAnywayButton = .style(borderWidth: 2, borderColor: .red, cornerRadius: 10, clipsToBounds: true)
IDCapture.style.exitButton = .style(borderWidth: 2, borderColor: .red, cornerRadius: 10, clipsToBounds: true)

//IDCapture Preview Screen UI Customization
IDCapture.strings.previewScreenTitleIdFront = "ID Capture Successful"
IDCapture.strings.previewScreenTitleIdBack = "ID Capture Successful"
IDCapture.strings.previewScreenRetryBtnText = "Retry"
IDCapture.strings.previewScreenDoneBtnText = "Done"
IDCapture.colors.previewScreenBackgroundColor = .white
IDCapture.colors.previewScreenTopViewColor = .white
IDCapture.colors.previewScreenTitleLabelColor = .white
IDCapture.colors.previewScreenTitleTextColor = .black
IDCapture.colors.previewScreenRetryBtnTextColor = .white
IDCapture.colors.previewScreenRetryBtnBackgroundColor = .black
IDCapture.colors.previewScreenDoneBtnTextColor = .white
IDCapture.colors.previewScreenDoneBtnBackgroundColor = .black
IDCapture.fonts.previewScreenTitleLabelFont = UIFont.systemFont(ofSize: 14)
IDCapture.fonts.previewScreenRetryBtnFont = UIFont.systemFont(ofSize: 14)
IDCapture.fonts.previewScreenDoneBtnFont = UIFont.systemFont(ofSize: 14)
IDCapture.style.previewScreenRetryButton = .style(borderWidth: 2, borderColor: .red, cornerRadius: 10, clipsToBounds: true)
IDCapture.style.previewScreenDoneButton = .style(borderWidth: 2, borderColor: .red, cornerRadius: 10, clipsToBounds: true)

//IDCapture Instruction Screen UI Customization
IDCapture.options.instructionScreenBackButtonIsHidden = false
IDCapture.strings.instructionScreenText = "Lorem ipsum text"
IDCapture.strings.instructionScreenButtonText = "Continue"
IDCapture.colors.instructionScreenBackgroundColor = .white
IDCapture.colors.instructionScreenBackButtonColor = .orange
IDCapture.colors.instructionScreenBackButtonImageTintColor = .orange
IDCapture.colors.instructionScreenTextBackgroundColor = .gray
IDCapture.colors.instructionScreenLabelTextColor = .black
IDCapture.colors.instructionScreenImageTintColor = .white
IDCapture.colors.instructionScreenButtonBackgroundColor = .gray
IDCapture.colors.instructionScreenButtonTextColor = .white
IDCapture.fonts.instructionScreenLabelFont = UIFont.systemFont(ofSize: 20)
IDCapture.fonts.instructionScreenButtonFont = UIFont.systemFont(ofSize: 20)
IDCapture.images.instructionScreenImage = UIImage(named: "IDCaptureImage")
IDCapture.images.instructionBackButtonImage = UIImage(named: "IDCaptureImage")
IDCapture.style.instructionScreenContinueButton = .style(borderWidth: 2, borderColor: .red, cornerRadius: 25, clipsToBounds: true)

//IDCapture Retry Screen UI Customization
IDCapture.strings.retryScreenText = "RealID not Detected. Please try again"
IDCapture.strings.retryButtonText = "Retry"
IDCapture.strings.cancelButtonText = "Cancel"
IDCapture.colors.retryScreenBackgroundColor = .white
IDCapture.colors.retryScreenLabelTextColor = .black
IDCapture.colors.retryScreenImageTintColor = .green
IDCapture.colors.retryScreenRetryButtonBackgroundColor = .white
IDCapture.colors.retryScreenRetryButtonTextColor = .black
IDCapture.colors.retryScreenCancelButtonBackgroundColor = .white
IDCapture.colors.retryScreenCancelButtonTextColor = .black
IDCapture.fonts.retryScreenLabelFont = UIFont.systemFont(ofSize: 16)
IDCapture.fonts.retryScreenRetryButtonFont = UIFont.systemFont(ofSize: 14)
IDCapture.fonts.retryScreenCancelButtonFont = UIFont.systemFont(ofSize: 14)
IDCapture.images.retryScreenImage = UIImage(named: "IdRetryImage")
IDCapture.style.retryScreenRetryButton = .style(borderWidth: 2, borderColor: .red, cornerRadius: 10, clipsToBounds: true)
IDCapture.style.retryScreenCancelButton = .style(borderWidth: 2, borderColor: .red, cornerRadius: 10, clipsToBounds: true)

//IDCapture NFC Screen UI Customization
IDCapture.strings.nfcScreenScanInstructions = "Place the back of your phone over the ID or passport. Slowly move your phone up and down along the page. Once the reading begins, do not move your phone until the process completes."
IDCapture.strings.nfcScreenLoadingText = "Reading Data"
IDCapture.strings.nfcScreenSuccessTitle = "ID Read Successfully"
IDCapture.strings.nfcErrorScreenErrorText = "Unable to read the NFC chip. Please try again."
IDCapture.strings.nfcErrorScreenRetryButtonText = "RETRY"
IDCapture.strings.nfcErrorScreenSkipButtonText = "SKIP"
IDCapture.colors.nfcErrorScreenBackgroundColor = .white
IDCapture.colors.nfcErrorScreenErrorTextColor = .black
IDCapture.colors.nfcErrorScreenImageTintColor = .black
IDCapture.colors.nfcErrorScreenRetryButtonTextColor = .white
IDCapture.colors.nfcErrorScreenRetryButtonBackgroundColor = .black
IDCapture.colors.nfcErrorScreenSkipButtonTextColor = .black
IDCapture.colors.nfcErrorScreenSkipButtonBackgroundColor = .white
IDCapture.fonts.nfcErrorScreenErrorTextFont = UIFont.boldSystemFont(ofSize: 20)
IDCapture.fonts.nfcErrorScreenRetryButtonTextFont = UIFont.systemFont(ofSize: 14)
IDCapture.fonts.nfcErrorScreenSkipButtonTextFont = UIFont.systemFont(ofSize: 14)
IDCapture.images.nfcErrorScreenImage = UIImage(named: "NfcErrorImage")
IDCapture.style.nfcErrorScreenRetryButton = .style(borderWidth: 2, borderColor: .red, cornerRadius: 10, clipsToBounds: true)
IDCapture.style.nfcErrorScreenSkipButton = .style(borderWidth: 2, borderColor: .red, cornerRadius: 10, clipsToBounds: true)

  • Before starting a Selfie Capture flow, optionally adjust the following SelfieCapture static properties:
//SelfieCapture Customization
SelfieCapture.options.minFaceWidth = 0.6
SelfieCapture.options.eyeOpenProbability = 0.4
SelfieCapture.options.minHeadEulerAngle = -10
SelfieCapture.options.maxHeadEulerAngle = 10
SelfieCapture.options.minRelativeNoseHeight = 0.48
SelfieCapture.options.maxRelativeNoseHeight = 0.67
SelfieCapture.options.labelsConfidenceThreshold = 0.79
SelfieCapture.options.faceMaskProbabilityThreshold = 0.98
SelfieCapture.options.liveFaceProbabilityThreshold = 0.9
SelfieCapture.options.consecutiveFakeFaceLimit = 3
SelfieCapture.options.lightIntensityThreshold = 0.05
SelfieCapture.options.focusThreshold = 0.2
SelfieCapture.options.isDebugMode = true
SelfieCapture.options.enableInstructionScreen = true
SelfieCapture.options.capture4K = false
SelfieCapture.options.uploadFaceData = true
SelfieCapture.options.ovalScaleMultiplier = 0.7
SelfieCapture.options.cameraPosition = .front
SelfieCapture.options.showToggleCamera = false
SelfieCapture.options.cameraScreenBackButtonIsHidden = false
SelfieCapture.options.isSelfieCapturePreviewEnabled = false

//SelfieCapture Camera Screen UI Customization
SelfieCapture.strings.captureSelfie = "Capture Selfie"
SelfieCapture.strings.multipleFacesDetected = "Multiple Faces Detected"
SelfieCapture.strings.closeButtonText = "Cancel"
SelfieCapture.strings.alignOval = "Align your face inside oval"
SelfieCapture.strings.notInFocus = "Face Not In Focus"
SelfieCapture.strings.moveAway = "Move Face Away"
SelfieCapture.strings.moveCloser = "Move Face Closer"
SelfieCapture.strings.leftEyeClosed = "Left eye are closed"
SelfieCapture.strings.rightEyeClosed = "right eye are closed"
SelfieCapture.strings.faceMaskDetected = "Face mask detected"
SelfieCapture.strings.sunglassesDetected = "Sunglasses Detected"
SelfieCapture.strings.removeHat = "Hat Detected"
SelfieCapture.strings.removeHand = "Remove hand"
SelfieCapture.strings.removeScarf = "Remove Scarf"
SelfieCapture.strings.fakeFace = "Fake face Detected"
SelfieCapture.strings.realFace = "Real face Detected"
SelfieCapture.strings.straightenHead = "Make Sure your head is straight"
SelfieCapture.strings.moveFaceUp = "Move face Up"
SelfieCapture.strings.moveFaceDown = "Move face Down"
SelfieCapture.strings.capturingFace = "Capturing Face"
SelfieCapture.strings.tooMuchLight = "Too much light around face"
SelfieCapture.colors.backgroundColor = .white
SelfieCapture.colors.overlayTopViewColor = .white
SelfieCapture.colors.closeButtonColor = .clear
SelfieCapture.colors.closeButtonTextColor = .black
SelfieCapture.colors.closeButtonImageTintColor = .white
SelfieCapture.colors.captureLabelColor = .white
SelfieCapture.colors.captureLabelTextColor = .clear
SelfieCapture.colors.successLabelBackgroundColor = .green
SelfieCapture.colors.errorLabelBackgroundColor = .red
SelfieCapture.colors.successLabelTextColor = .white
SelfieCapture.colors.errorLabelTextColor = .white
SelfieCapture.fonts.captureLabelFont = UIFont.systemFont(ofSize: 20)
SelfieCapture.fonts.labelFont = UIFont.systemFont(ofSize: 20)
SelfieCapture.fonts.closeButtonTextFont = UIFont.systemFont(ofSize: 20)
SelfieCapture.layout.captureLabelPosition = .top
SelfieCapture.layout.labelPosition = .center
SelfieCapture.images.closeButtonImage = UIImage(named: "Close")
SelfieCapture.images.silhouetteImage = UIImage(named: "SelfieOverlay")
SelfieCapture.images.bottomInfoImage = UIImage(named: "Selfieinfo")

//IDCapture Preview Screen UI Customization
SelfieCapture.strings.previewScreenTitle = "Selfie Capture Successfull"
SelfieCapture.strings.previewScreenRetryBtnText = "Retry"
SelfieCapture.strings.previewScreenDoneBtnText = "Done"
SelfieCapture.colors.previewScreenBackgroundColor = .clear
SelfieCapture.colors.previewScreenTopViewColor = .clear
SelfieCapture.colors.previewScreenTitleLabelColor = .clear
SelfieCapture.colors.previewScreenTitleTextColor = .black
SelfieCapture.colors.previewScreenRetryBtnTextColor = .white
SelfieCapture.colors.previewScreenRetryBtnBackgroundColor = .gray
SelfieCapture.colors.previewScreenDoneBtnTextColor = .white
SelfieCapture.colors.previewScreenDoneBtnBackgroundColor = .gray
SelfieCapture.fonts.previewScreenTitleLabelFont = UIFont.systemFont(ofSize: 20)
SelfieCapture.fonts.previewScreenRetryBtnFont = UIFont.systemFont(ofSize: 20)
SelfieCapture.fonts.previewScreenDoneBtnFont = UIFont.systemFont(ofSize: 20)
SelfieCapture.style.previewScreenRetryButton = .style(borderWidth: 2, borderColor: .red, cornerRadius: 10, clipsToBounds: true)
SelfieCapture.style.previewScreenDoneButton = .style(borderWidth: 2, borderColor: .red, cornerRadius: 10, clipsToBounds: true)

//SelfieCapture Instruction Screen UI Customization
SelfieCapture.options.instructionScreenBackButtonIsHidden = false
SelfieCapture.strings.instructionScreenText = "Lorem ipsum text"
SelfieCapture.strings.instructionScreenButtonText = "Continue"
SelfieCapture.colors.instructionScreenBackgroundColor = .white
SelfieCapture.colors.instructionScreenBackButtonColor = .clear
SelfieCapture.colors.instructionScreenBackButtonImageTintColor = .gray
SelfieCapture.colors.instructionScreenTextBackgroundColor = .orange
SelfieCapture.colors.instructionScreenLabelTextColor = .black
SelfieCapture.colors.instructionScreenImageTintColor = .white
SelfieCapture.colors.instructionScreenButtonBackgroundColor = .gray
SelfieCapture.colors.instructionScreenButtonTextColor = .white
SelfieCapture.fonts.instructionScreenLabelFont = UIFont.systemFont(ofSize: 20)
SelfieCapture.fonts.instructionScreenButtonFont = UIFont.systemFont(ofSize: 20)
SelfieCapture.images.instructionScreenImage = UIImage(named: "SelfieCaptureImage")
SelfieCapture.images.instructionBackButtonImage = UIImage(named: "BackButtonImage")
SelfieCapture.style.instructionScreenContinueButton = .style(borderWidth: 2, borderColor: .red, cornerRadius: 25, clipsToBounds: true)

//SelfieCapture Retry Screen UI Customization
SelfieCapture.strings.retryScreenText = "Live face not Detected. Please try again"
SelfieCapture.strings.retryButtonText = "Retry"
SelfieCapture.strings.cancelButtonText = "Cancel"
SelfieCapture.colors.retryScreenBackgroundColor = .white
SelfieCapture.colors.retryScreenLabelTextColor = .black
SelfieCapture.colors.retryScreenImageTintColor = .blue
SelfieCapture.colors.retryScreenRetryButtonBackgroundColor = .white
SelfieCapture.colors.retryScreenRetryButtonTextColor = .black
SelfieCapture.colors.retryScreenCancelButtonBackgroundColor = .white
SelfieCapture.colors.retryScreenCancelButtonTextColor = .black
SelfieCapture.fonts.retryScreenLabelFont = UIFont.systemFont(ofSize: 20)
SelfieCapture.fonts.retryScreenRetryButtonFont = UIFont.systemFont(ofSize: 14)
SelfieCapture.fonts.retryScreenCancelButtonFont = UIFont.systemFont(ofSize: 14)
SelfieCapture.images.retryScreenImage = UIImage(named: "SelfieRetryImage")
SelfieCapture.style.retryScreenRetryButton = .style(borderWidth: 2, borderColor: .red, cornerRadius: 10, clipsToBounds: true)
SelfieCapture.style.retryScreenCancelButton = .style(borderWidth: 2, borderColor: .red, cornerRadius: 10, clipsToBounds: true)

  • Before starting either Capture flow, optionally adjust the following DocumentCapture static properties:
//DocumentCapture Customization
DocumentCapture.options.lowerWidthThresholdTolerance = 0.3
DocumentCapture.options.upperWidthThresholdTolerance = 0.05
DocumentCapture.options.isDebugMode = true
DocumentCapture.options.enableInstructionScreen = true
DocumentCapture.options.capture4K = true
DocumentCapture.options.documentCaptureFrameWidth = 400
DocumentCapture.options.documentCaptureFrameHeight = 600
DocumentCapture.options.documentFileSizeLimit = 2.0
DocumentCapture.options.cameraScreenBackButtonIsHidden = false
DocumentCapture.options.showPreviewScreen = true

//DocumentCapture Camera Screen UI Customization
DocumentCapture.strings.uploadImage = "Upload image"
DocumentCapture.strings.uploadPDF = "Upload PDF"
DocumentCapture.strings.documentPreview = "Document Preview"
DocumentCapture.strings.closeButtonText = "Cancel"
DocumentCapture.strings.continueButtonText = "Done"
DocumentCapture.strings.captureDocument = "Capture Document"
DocumentCapture.strings.moveAway = "Move ID Away"
DocumentCapture.strings.moveCloser = "Move ID Closer"
DocumentCapture.strings.alignRectangle = "Align ID inside Rectangle"
DocumentCapture.colors.overlayTopViewColor = .white
DocumentCapture.colors.backgroundColor = .clear
DocumentCapture.colors.closeButtonTextColor = .black
DocumentCapture.colors.closeButtonColor = .white
DocumentCapture.colors.closeButtonImageTintColor = .white
DocumentCapture.colors.successLabelBackgroundColor = .green
DocumentCapture.colors.errorLabelBackgroundColor = .red
DocumentCapture.colors.successLabelTextColor = .white
DocumentCapture.colors.errorLabelTextColor = .white
DocumentCapture.colors.captureLabelColor = .white
DocumentCapture.colors.captureLabelTextColor = .clear
DocumentCapture.fonts.closeButtonTextFont = UIFont.systemFont(ofSize: 20)
DocumentCapture.fonts.captureLabelFont = UIFont.boldSystemFont(ofSize: 14)
DocumentCapture.fonts.labelFont = UIFont.systemFont(ofSize: 14)
DocumentCapture.layout.captureLabelPosition = .top
DocumentCapture.layout.labelPosition = .top
DocumentCapture.images.closeButtonImage = UIImage(named: "Close")
DocumentCapture.images.silhouetteImage = UIImage(named: "IdOverlay")
DocumentCapture.images.bottomInfoImage = UIImage(named: "IdiInfo")

//DocumentCapture Instruction Screen UI Customization
DocumentCapture.options.instructionScreenBackButtonIsHidden = false
DocumentCapture.strings.instructionScreenText = "Lorem ipsum text"
DocumentCapture.strings.instructionScreenButtonText = "Continue"
DocumentCapture.colors.instructionScreenBackgroundColor = .blue
DocumentCapture.colors.instructionScreenBackButtonColor = .clear
DocumentCapture.colors.instructionScreenBackButtonImageTintColor = .orange
DocumentCapture.colors.instructionScreenTextBackgroundColor = .orange
DocumentCapture.colors.instructionScreenLabelTextColor = .red
DocumentCapture.colors.instructionScreenImageTintColor = .white
DocumentCapture.colors.instructionScreenButtonBackgroundColor = .yellow
DocumentCapture.colors.instructionScreenButtonTextColor = .green
DocumentCapture.fonts.instructionScreenLabelFont = UIFont.systemFont(ofSize: 20)
DocumentCapture.fonts.instructionScreenButtonFont = UIFont.systemFont(ofSize: 20)
DocumentCapture.images.instructionScreenImage = UIImage(named: "DocCaptureImage")
DocumentCapture.images.instructionBackButtonImage = UIImage(named: "BackImage")
DocumentCapture.style.instructionScreenContinueButton = .style(borderWidth: 2, borderColor: .red, cornerRadius: 25, clipsToBounds: true)

//DocumentCapture Retry Screen UI Customization
DocumentCapture.strings.retryScreenText = "RealID not Detected. Please try again"
DocumentCapture.strings.retryButtonText = "Retry"
DocumentCapture.strings.cancelButtonText = "Cancel"
DocumentCapture.colors.retryScreenBackgroundColor = .white
DocumentCapture.colors.retryScreenLabelTextColor = .black
DocumentCapture.colors.retryScreenImageTintColor = .green
DocumentCapture.colors.retryScreenRetryButtonBackgroundColor = .white
DocumentCapture.colors.retryScreenRetryButtonTextColor = .black
DocumentCapture.colors.retryScreenCancelButtonBackgroundColor = .white
DocumentCapture.colors.retryScreenCancelButtonTextColor = .black
DocumentCapture.fonts.retryScreenLabelFont = UIFont.systemFont(ofSize: 16)
DocumentCapture.fonts.retryScreenRetryButtonFont = UIFont.systemFont(ofSize: 14)
DocumentCapture.fonts.retryScreenCancelButtonFont = UIFont.systemFont(ofSize: 14)
DocumentCapture.images.retryScreenImage = UIImage(named: "IdRetryImage")
DocumentCapture.style.retryScreenRetryButton = .style(borderWidth: 2, borderColor: .red, cornerRadius: 10, clipsToBounds: true)
DocumentCapture.style.retryScreenCancelButton = .style(borderWidth: 2, borderColor: .red, cornerRadius: 10, clipsToBounds: true)

  • Before starting either Capture flow, optionally adjust the following SignatureCapture static properties:
//SignatureCapture Customization
SignatureCapture.options.isEnableDigitalSignature = true
SignatureCapture.options.signatureStrokeWidth = 2

//SignatureCapture Screen UI Customization
SignatureCapture.strings.titleText = "Sign"
SignatureCapture.strings.clearButtonText = "Clear"
SignatureCapture.strings.doneButtonText = "Done"
SignatureCapture.colors.titleLabelColor = .clear
SignatureCapture.colors.titleLabelTextColor = .black
SignatureCapture.colors.backButtonColor = .clear
SignatureCapture.colors.backButtonTintColor = .systemBlue
SignatureCapture.colors.backgroundColor = .white
SignatureCapture.colors.signatureStrokeColor = .black
SignatureCapture.colors.clearButtonColor = .gray
SignatureCapture.colors.clearButtonTextColor = .white
SignatureCapture.colors.doneButtonColor = .gray
SignatureCapture.colors.doneButtonTextColor = .white
SignatureCapture.fonts.titleLabelTextFont = UIFont.systemFont(ofSize: 18)
SignatureCapture.fonts.clearButtonTextFont = UIFont.systemFont(ofSize: 14)
SignatureCapture.fonts.doneButtonTextFont = UIFont.systemFont(ofSize: 14)
SignatureCapture.images.closeButtonImage = UIImage(named: "BackImage")
SignatureCapture.style.clearButton = .style(borderWidth: 2, borderColor: .red, cornerRadius: 25, clipsToBounds: true)
SignatureCapture.style.doneButton = .style(borderWidth: 2, borderColor: .red, cornerRadius: 25, clipsToBounds: true)

  • Before starting either Capture flow, optionally adjust the following FingerPrintCapture static properties:
//FingerPrintCapture InstructionScreen Customization
FingerPrintCapture.colors.instructionScreenBackgroundColor = .gray
FingerPrintCapture.colors.instructionScreenBackButtonColor = .clear
FingerPrintCapture.colors.instructionScreenBackButtonTintColor = .black
FingerPrintCapture.colors.instructionScreenImageTintColor = .clear
FingerPrintCapture.colors.instructionScreenLeftHandButtonColor = .white
FingerPrintCapture.colors.instructionScreenRightHandButtonColor = .white
FingerPrintCapture.images.instructionScreenImage = UIImage(named: "fingerPrintInstructionImage")
FingerPrintCapture.images.instructionScreenLeftHandButtonImage = UIImage(named: "leftHandImage")
FingerPrintCapture.images.instructionScreenRightHandButtonImage = UIImage(named: "rightHandImage")

//FingerPrintCapture Camera Screen UI Customization
FingerPrintCapture.options.enableInstructionScreen = false
FingerPrintCapture.options.isDebugEnabled = true
FingerPrintCapture.options.isCaptureLeftHand = true
FingerPrintCapture.options.cameraZoom = 1.0
FingerPrintCapture.options.captureIndexFinger = true
FingerPrintCapture.options.captureMiddleFinger = false
FingerPrintCapture.options.captureRingFinger = false
FingerPrintCapture.options.captureBabyFinger = false
FingerPrintCapture.options.keepIndexFinger = true
FingerPrintCapture.options.keepMiddleFinger = false
FingerPrintCapture.options.keepRingFinger = false
FingerPrintCapture.options.keepBaby = false
FingerPrintCapture.options.minIndexThrshold = 40
FingerPrintCapture.options.minMiddleThrshold = 40
FingerPrintCapture.options.minRingThrshold = 40
FingerPrintCapture.options.minBabyThrshold = 40
FingerPrintCapture.options.maxIndexThrshold = 100
FingerPrintCapture.options.maxMiddleThrshold = 100
FingerPrintCapture.options.maxRingThrshold = 100
FingerPrintCapture.options.maxBabyThrshold = 70
FingerPrintCapture.strings.moveCloser = "Move Closer"
FingerPrintCapture.strings.moveAway = "Move Away"
FingerPrintCapture.strings.incorrectHand = "Incorrect Hand"
FingerPrintCapture.strings.holdSteady = "Hold Steady"
FingerPrintCapture.strings.capturingDetail = "Capturing Details"
FingerPrintCapture.strings.fingerTooClose = "Too Close"
FingerPrintCapture.strings.fingerTooFar = "Too Far"

  • Before starting either Capture flow, optionally adjust the following VoiceCapture static properties:
//VoiceCapture Customization
VoiceCapture.options.maxRecordingTime = 15

//VoiceCapture Screen UI Customization
VoiceCapture.strings.closeButtonText = "Close"
VoiceCapture.strings.deleteLabelText = "Delete"
VoiceCapture.strings.stopLabelText = "Stop"
VoiceCapture.strings.playLabelText = "Play"
VoiceCapture.strings.recordingLabelText = "Recording"
VoiceCapture.strings.pauseLabelText = "Pause"
VoiceCapture.strings.saveLabelText = "Save"
VoiceCapture.colors.closeButtonColor = .label
VoiceCapture.colors.closeButtonTextColor = .label
VoiceCapture.colors.closeButtonImageTintColor = .label
VoiceCapture.colors.backgroundColor = .systemBackground
VoiceCapture.colors.timerLabelTextColor = .label
VoiceCapture.colors.deleteButtonImageTintColor = .label
VoiceCapture.colors.stopButtonImageTintColor = .label
VoiceCapture.colors.playButtonImageTintColor = .label
VoiceCapture.colors.recordingButtonImageTintColor = .red
VoiceCapture.colors.pauseButtonImageTintColor = .label
VoiceCapture.colors.saveButtonImageTintColor = .label
VoiceCapture.colors.deleteLabelTextColor = .label
VoiceCapture.colors.stopLabelTextColor = .label
VoiceCapture.colors.playLabelTextColor = .label
VoiceCapture.colors.recordingLabelTextColor = .label
VoiceCapture.colors.pauseLabelTextColor = .label
VoiceCapture.colors.saveLabelTextColor = .label
VoiceCapture.fonts.closeButtonTextFont = UIFont.systemFont(ofSize: 18)
VoiceCapture.fonts.timerLabelFont = UIFont.systemFont(ofSize: 66)
VoiceCapture.fonts.buttonLabelFont = UIFont.systemFont(ofSize: 12)
VoiceCapture.images.closeButtonImage = UIImage(named: "closeButtonImage")
VoiceCapture.images.deleteButtonImage = UIImage(named: "deleteButtonImage")
VoiceCapture.images.stopButtonImage = UIImage(named: "stopButtonImage")
VoiceCapture.images.playButtonImage = UIImage(named: "playButtonImage")
VoiceCapture.images.recordingButtonImage = UIImage(named: "recordingButtonImage")
VoiceCapture.images.pauseButtonImage = UIImage(named: "pauseButtonImage")
VoiceCapture.images.saveButtonImage = UIImage(named: "saveButtonImage")
  • Before starting either Capture flow, optionally adjust the following VideoCapture static properties:
//VideoCapture Customization
VideoCapture.options.idToSelfieMatchThreshold = 0.9
VideoCapture.options.idToIdPhotoMatchThreshold = 0.9
VideoCapture.options.frontLevenshteinThreshold = 0.25
VideoCapture.options.backLevenshteinThreshold = 0.45
VideoCapture.options.passportLevenshteinThreshold = 0.45
VideoCapture.options.readTextCountdownSeconds = 10
VideoCapture.options.readTextWordMatchThreshold = 0.5
VideoCapture.options.frontRealnessThreshold = 0.5
VideoCapture.options.backRealnessThreshold = 0.3
VideoCapture.options.isDebugMode = false
VideoCapture.options.enableRealId = false
VideoCapture.strings.faceDoesNotMatch = "Face does not match"
VideoCapture.strings.voiceDoesNotMatch = "Voice does not match text. Please try again"
VideoCapture.strings.liveFaceLost = "Live Face Lost. Please try again"
VideoCapture.strings.idDoesNotMatch = "ID does not match"
VideoCapture.strings.doneButton = "Done"
VideoCapture.colors.readingTextColor = .black
VideoCapture.colors.readingTextSpokenWordColor = .yellow
VideoCapture.colors.readingTextBackgroundColor = .white

SDK Version History

v11.1.19.2.5 (22nd October 2026)

  • Dynamic ID Capture & Barcode Handling: Enabled flexible two-sided ID capture that automatically detects the front and back of an ID in any order, while seamlessly processing barcode data on either side.
  • Dynamic ID Orientation & Auto-Correction: Introduced a .dynamic capture mode that automatically adapts capture guidelines for horizontal or vertical IDs in real time and automatically rotates the final captured image to an upright orientation.
  • NFC Support: Added optional NFC chip reading capabilities for supported IDs and passports through the dedicated IDentityMediumNFC framework, allowing integrators to include or exclude NFC functionality based on application requirements.
  • NFC Data Extraction & Modular Framework: Added support for extracting NFC chip data and artifacts, including face images and digital signatures, through the modular NFC framework.
  • Server Payload & Swagger v4 Support: Updated API data models to Swagger v4 specifications to support transmitting extracted NFC chip artifacts, including face images and digital signatures, directly to the backend server.
  • iOS Medium SDK Size Reduction: Reduced SDK size by replacing the third-party MLKit text recognition dependency with lightweight OCR models, which can be embedded in the app or downloaded from the server.
  • Swift Package Manager (SPM) Support (iOS): Added SPM integration support for the Medium SDK. Lite and Liveness already support SPM.

v11.1.13.2.3 (23 July 2026)

  • Added a maximum retry limit for ID and selfie capture.
  • Added a conditional ID success preview screen.
  • Added a conditional selfie success preview screen.
  • Added barcode cropping support.
  • Added a barcode recovery flow.
  • Added on-device AAMVA parsing.
  • Added support for mandatory geolocation enforcement.
  • Added support for vertical ID capture orientation.
  • Implemented image sequence animations for the Vertical ID capture instruction screen.
  • Implemented image sequence animations for the ID capture instruction screen.
  • Added model availability checks before launching Selfie Capture and ID Capture workflows. Users are now presented with clear error messages if the required models have not been downloaded.
  • Added support for Swift Package Manager (SPM), enabling seamless integration of LiteSDK and LivenessSDK.
  • Updated the SDK initialization endpoint.

v11.1.7.2.7 (28 April 2026)

  • Added customizable properties
  • Updated DocumentDetect model with ID back-side prediction
  • Reduced overall SDK package size
  • Introduced a timeout timer for capture to improve user flow and prevent indefinite waiting.
  • Added support for separate front and back ID capture flow for improved control and user experience.

v11.1.1.2.2 (15 January 2026)

  • implemented server-side response for Autofill Service.
  • UI Enhancements.

v10.1.24.2.3 (04 December 2025)

  • Added event logging capability within the SDK
  • Implemented improved handling for token expiration scenarios
  • Updated SDK to ensure compatibility with iOS 26 and Xcode 26
  • Added support for standalone signature capture with Improved UI
  • Integrated the Biometric signature library into the SDK.
  • Enabled more efficient multi-document workflows in custom product

v10.1.18.2.1 (11 November 2025)

  • Updated the default maximum allowed fake face capture count from 15 to 10.

v10.1.16.2.2 (25 August 2025)

  • Updated new encryption and decryption logic.
  • Ability to submit request on custom product.
  • Updated iOS SDK Minimum Deployment Target to iOS 15.6.

v10.1.4.2.4 (26 February 2025)

  • Reduced the overall size of SDK.
  • Added configuration options to change the sequence of ID and Selfie capture.
  • Added support for the face mask detection model in the Medium version of the Android SDK.
  • Updated all default AI models to the latest versions.

v9.6.24.2.5 (05 December 2024)

  • Improved capture quality with model updates that notify users of obstructions over key ID information.

v9.6.22.2.9 (18 November 2024)

  • Integrated the latest swagger V4 API version. This includes updates to model download based on V4, updates to the new initialization process, as well as ensuring backward compatibility.
  • Added the selfie image in the response.
  • Added support for an initialization parameter that will enable / disable Location / GPS capture.
  • Improved ID capture guidance messages to inform the user to hold still once the document is detected to ensure a higher quality capture.
  • Added configuration support to allow selfie capture with the back camera.
  • Added support for additional date and timestamp capture as Exif for ID capture and Selfie capture image.
  • QR code for the test applications supports the new initialization process.
  • Update to support multiple security enhancements including the removal of outdated/unused libraries.

Bug

Bug fixes and performance improvements.
  • Updated all default AI models to the latest versions.

v9.6.4.2.2 (31 May 2024)

  • Improved user experience for IDCapture. When rectangle turn green, showing message ‘document detected, hold still…’

v9.6.4.2.1 (26 February 2024)

  • Added Apple Privacy Policy - Spring 2024 Mandate
  • Updated Doc-Detect model to determine if ID or Passport capture
  • Updated all default AI models to the latest versions.

v9.6.3.2.2 (29 January 2024)

  • Updated SDK support for additional flags (sendProcessedImagesInResponse and sendInputImagesInResponse)
  • Added ID extracted profession and profession non English data in response
  • Updated all default AI models to the latest versions.

v9.5.15.2.5 (06 November 2023)

  • Added face Focus Model
  • Updated Embedded model with Production tags models
  • Improved Fingerprint Capture feature for triple camera
  • Added Voice Capture feature

v9.5.9.2.4 (08 August 2023)

Bug

Bug Fixes for Passport NFC detection

Bug

Bug fixes and performance improvements.

v9.5.7.2.5(07 July 2023)

  • Added Passport NFC feature
  • Minor bug fixes

v9.5.3.2.3 (15 May 2023)

  • Enhanced capture of passports.
  • Improved Video ID processing procedures
  • Reduced default selfie silhouette size during liveness detection

v9.5.2.2.3 (25 April 2023)

  • Downloading all models from server
  • Updated focus model to be downloaded from server and updated default focus threshold.
  • Enhancements added to improve handling of Video ID

v9.4.8.2.1 (10 March 2023)

  • Added VideoIDCapture support
  • Added SignatureCapture support
  • Added FingerPrintCapture support

v9.3.10.2.26

  • Added spanish language support
  • Now fitting instead of filling the camera preview to better support the 600px height requirement.
  • Implemented new AES/GCM/NoPadding algorithm.
  • Handle the CAN BC DL barcode XSLT
  • Added additional customer response data parameters like state and postalCode.
  • Alerting the user when multiple faces are detected during selfie capture.
  • Updated instruction screen for IDCapture & SelfieCapture

v9.3.4.2.8

  • Added a minimum focus threshold so that if a classified ID is not above the required focus threshold it will show “Not In Focus” to the user for 15 seconds before attempting to fallback to the minimum focus threshold.

v9.3.4.2.6

  • Added functionality to download updated encrypted Focus Model from server.

v9.3.4.2.5

  • Added embeded Focus Model

v9.3.3.32

  • Added IDentitySDK.pluginName property to add it in Metadata.

v9.3.3.31

  • Added Document Detect confidence in Metadata
  • Added frontDocumentConfidence & backDocumentConfidence default values to 0.85

v9.3.2.31

  • Added Document Capture as a additional feature
  • Added properties to customize elements on SelfieCapture camera screen.
  • Added properties to customize elements on IDCapture camera screen.
  • Added properties to customize elements on SelfieCapture instruction screen.
  • Added properties to customize elements on IDCapture instruction screen.
  • Added properties to customize elements on DocumentCapture instruction screen.

v9.3.1.50

  • Added properties to customize Images on SelfieCapture camera screen & Retry screen.
  • Added properties to customize Images on IdCapture camera screen & Retry screen.

v9.3.1.49

  • Autofill.
  • Added SDK UI Customization.
  • Instruction screens for selfie and ID capture.
  • Replcae .framework file with .xcframework file which has frameworks for device as well as for simulator.

v9.1.7.31

  • Live face Check
  • ID Validation
  • ID Validation and face match
  • Enroll Biometric
  • Enroll Customer with ID validation
  • Customer Verification
  • Customer Biometric Verification