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 -

Feature/Flavours Identity SDK IdentityMedium SDK IdentityLite SDK
1. Document Detect On Device On Device On Device
2. Rotate, crop etc. On Device On Server On Server
3. Document Realness On Device On Server On Server
4. Document Classification On Device On Server On Server
5. MRZ/Barcode reading On Device On Device On Server
6. OCR from front On Server On Server On Server
7. Face detect On Device On Device On Device
8. Liveness detect On Device On Device On Device
9. Detect hats and sunglasses On Device On Server On Server


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

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

Step 1: Get SDK initialization Credentials

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

Step 2: Create Podfile

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

Step 3: Add IDentity 2.0 SDK to your app

Add SDK using podfile :

As per SDK flavour which you choose to integrate, add the following pod in your podfile which you have created in Step-2

  • IDentity 2.0 pod.

    pod 'IDentitySDK2.0'
    pod 'FingerPrintCapture' (Optional) : If developer required this feature they can use this framework.
    pod 'SignatureCapture' (Optional) : If developer required this feature they can use this framework.
    pod 'VoiceCapture' (Optional) : If developer required this feature they can use this framework.
    
  • IDentityMedium 2.0 pod

    pod 'IDentityMediumSDK2.0'
    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.
    
  • IDentityLite 2.0 pod.

    pod 'IDentityLiteSDK2.0'
    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.
    
Add SDK manually :

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

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

    • IDentitySDK_Swift.xcframework
    • IDCapture_Swift.xcframework
    • SelfieCapture_Swift.xcframework
    • SignatureCapture_Swift.xcframework (Optional) : If developer required this feature they can use this framework.
    • FingerPrintCapture_Swift.xcframework (Optional) : If developer required this feature they can use this framework.
    • VoiceCapture_Swift.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
    • 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.
  • Download IDentityLiteSDK2.0 : Drag & drop following files in your project

    • IDentityLiteSDK.xcframework
    • IDCaptureLite.xcframework
    • SelfieCaptureLite.xcframework
    • 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.

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.

Step 4: Add Required Dependencies

As per SDK flavour which you choose to integrate, add the following dependencies in your podfile which you have created in Step-2

  • IDentitySDK2.0 dependencies.
pod 'TensorFlowLiteSwift', '~> 2.7.0'
pod 'GoogleMLKit/TextRecognition'
pod 'GoogleMLKit/FaceDetection'
pod 'GoogleMLKit/ImageLabeling'
pod 'GZIP'
pod 'OpenSSL-Universal', '1.1.180'
  • IDentityMediumSDK2.0 dependencies.
pod 'TensorFlowLiteSwift', '~> 2.7.0'
pod 'GoogleMLKit/TextRecognition'
pod 'GoogleMLKit/FaceDetection'
pod 'GZIP'
  • IDentityLiteSDK2.0 dependencies.
pod 'TensorFlowLiteSwift', '~> 2.7.0'
pod 'GoogleMLKit/FaceDetection'
pod 'GZIP'

Step 5: Steps to reduce size of your app bundle (Optional steps)

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|
    applicationTargets = [
    'Pods-APP_TARGET',
    ] 

    host_targets = installer.aggregate_targets.select { |aggregate_target|
    applicationTargets.include? aggregate_target.name
    }

    # We only want to remove pods from Application targets, not libraries
    host_targets.each do |host_target|
        host_target.xcconfigs.each do |config_name, config_file|
            puts "> Removing #{config_name} #{host_target.name} OTHER_LDFLAGS ..."
            pods = ['MLImage', 'MLKitCommon', 'MLKitFaceDetection', 'MLKitImageLabeling', 'MLKitImageLabelingCommon', 'MLKitObjectDetectionCommon','MLKitVision','MLKitVisionKit', 'TensorFlowLiteC', 'TensorFlowLiteTaskTextC']

            pods.each do |pod|
                 puts "- #{pod}"
                 config_file.frameworks.delete(pod)
            end
            xcconfig_path = host_target.xcconfig_path(config_name)
            config_file.save_as(xcconfig_path)
        end
    end
end

Step 6: Install pod

Run pod install to install above mentioned dependencies.

Step 7: Add Permissions


Usage

1) Initialize the SDK with your LOGIN_ID, PASSWORD, MERCHANT_ID, InitializeApiBaseUrl & ApiBaseUrl:

  • To integrate IDentitySDK import Following frameworks.
//For IdentitySDK flavours import Following
import IDentitySDK_Swift
import IDCapture_Swift
import SelfieCapture_Swift
import SignatureCapture_Swift (Its optional framework as per business requirement)
import FingerPrintCapture_Swift (Its optional framework as per business requirement)
import VoiceCapture_Swift (Its optional framework as per business requirement)
  • To integrate IDentityMediumSDK import Following frameworks.
//For `IdentityMediumSDK` flavours import Following Medium SDKs
import IDentityMediumSDK
import IDCaptureMedium
import SelfieCaptureMedium
import SignatureCaptureMedium (Its optional framework as per business requirement)
import FingerPrintCaptureMedium (Its optional framework as per business requirement)
import VoiceCaptureMedium (Its optional framework as per business requirement)
  • To integrate IDentityLiteSDK import Following frameworks.
//For IdentityLiteSDK flavours import Following Lite SDKs
import IDentityLiteSDK
import IDCaptureLite
import SelfieCaptureLite
import SignatureCaptureLite (Its optional framework as per business requirement)
import FingerPrintCaptureLite (Its optional framework as per business requirement)
import VoiceCaptureLite (Its optional framework as per business requirement)

As per requirement once you importing above frameworks, you need to Call the following method.

//Start SDK Initialization using following method.
let loginId = ""  // LOGIN_ID provided by IDmission
let password = "" // PASSWORD provided by IDmission
let merchantId = "" // MERCHANT_ID provided by IDmission

//Before Initialization of SDK pass the url values to following `IDentitySDK` static properties.
IDentitySDK.initializeApiBaseUrl = "https://kyc.idmission.com/"
IDentitySDK.apiBaseUrl = "https://api.idmission.com/"

IDentitySDK.initializeSDK(loginId: loginId, password: password, merchantId: merchantId) { error in
    if let error = error {
        // Handle Error
    } else {
        // Success!
    }
}

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


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.

  • IDentitySDK / IDentityMediumSDK / IDentityLiteSDK : For all flavours user need to use below API call for Live Face Check
// Start live face capture, presenting it from view controller

IDentitySDK.liveFaceCheck(from: self) { result in
    switch result {
        case .success(let liveFaceCheckResult):

            // submit the successful result to the server
            liveFaceCheckResult.submit { 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)
    }
}


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.

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

let options =  AdditionalCustomerWFlagCommonDataV3()
IDentitySDK.idValidation(from: self, options: options) { result in
    switch result {
        case .success(let validateIdResult):

            // submit the successful result to the server 
            validateIdResult.submit { 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 user 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 options = AdditionalCustomerWFlagCommonDataV3()
IDentitySDK.idValidation(from: self, options: options, captureBack: captureBack) { result in
    switch result {
        case .success(let validateIdResult):

            // submit the successful result to the server
            validateIdResult.submit { 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 options = AdditionalCustomerWFlagCommonDataV3()
IDentitySDK.idValidation(from: self, options: options, idType: idType, idCountry: idCountry, idState: idState) { result in
    switch result {
        case .success(let validateIdResult):

            // submit the successful result to the server
            validateIdResult.submit { 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 AdditionalCustomerWFlagCommonDataV3 documentation contains information on the various capture options that can be set.


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.

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

let options =  AdditionalCustomerWFlagCommonDataV3()
IDentitySDK.idValidationAndMatchFace(from: self, options: options) { result in
    switch result {
        case .success(let validateIdMatchFaceResult):

            // submit the successful result to the server 
            validateIdMatchFaceResult.submit { 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 user 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 options = AdditionalCustomerWFlagCommonDataV3()
IDentitySDK.idValidationAndMatchFace(from: self, options: options, captureBack: captureBack) { result in
    switch result {
        case .success(let validateIdMatchFaceResult):

            // submit the successful result to the server
            validateIdMatchFaceResult.submit { 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 options = AdditionalCustomerWFlagCommonDataV3()
IDentitySDK.idValidationAndMatchFace(from: self, options: options, idType: idType, idCountry: idCountry, idState: idState) { result in
    switch result {
        case .success(let validateIdMatchFaceResult):

            // submit the successful result to the server
            validateIdMatchFaceResult.submit { 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 AdditionalCustomerWFlagCommonDataV3 documentation contains information on the various capture options that can be set.


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.

  • IDentitySDK / IDentityMediumSDK / IDentityLiteSDK : 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 personalData = PersonalCustomerCommonRequestDataV3(uniqueNumber: uniqueNumber)
let options = AdditionalCustomerEnrollBiometricRequestDataV3()
IDentitySDK.customerEnrollBiometrics(from: self, personalData: personalData, options: options) { result in
    switch result {
        case .success(let customerEnrollBiometricsResult):

            // submit the successful result to the server
            customerEnrollBiometricsResult.submit { 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 AdditionalCustomerEnrollBiometricRequestDataV3 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.

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

let personalData = PersonalCustomerCommonRequestDataV3(uniqueNumber: uniqueNumber)
let options = AdditionalCustomerWFlagCommonDataV3()
IDentitySDK.idValidationAndCustomerEnroll(from: self, personalData: personalData, options: options) { result in
    switch result {
        case .success(let customerEnrollResult):

            // submit the successful result to the server
            customerEnrollResult.submit { 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 user 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 personalData = PersonalCustomerCommonRequestDataV3(uniqueNumber: uniqueNumber)
let options = AdditionalCustomerWFlagCommonDataV3()
IDentitySDK.idValidationAndCustomerEnroll(from: self, personalData: personalData, options: options, captureBack: captureBack) { result in
    switch result {
        case .success(let customerEnrollResult):

            // submit the successful result to the server
            customerEnrollResult.submit { 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 personalData = PersonalCustomerCommonRequestDataV3(uniqueNumber: uniqueNumber)
let options = AdditionalCustomerWFlagCommonDataV3()
IDentitySDK.idValidationAndCustomerEnroll(from: self, 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.submit { 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 AdditionalCustomerWFlagCommonDataV3 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.

  • IDentitySDK / IDentityMediumSDK / IDentityLiteSDK : 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 personalData = PersonalCustomerVerifyData(uniqueNumber: uniqueNumber)
IDentitySDK.customerVerification(from: self, personalData: personalData) { result in  
    switch result {
        case .success(let customerVerificationResult):

            // submit the successful result to the server
            customerVerificationResult.submit { 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 AdditionalCustomerWFlagCommonDataV3 documentation contains information on the various capture options that can be set.


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.

  • IDentitySDK / IDentityMediumSDK / IDentityLiteSDK : 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)

IDentitySDK.identifyCustomer(from: self) { result in
    switch result {
        case .success(let customerIdentifyResult):

            // submit the successful result to the server
            customerIdentifyResult.submit { 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)
    }
}


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.

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

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

            // submit the successful result to the server
            autofillResult.submit { 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.

  • IDentitySDK / IDentityMediumSDK / IDentityLiteSDK : For IDentitySDK / 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, 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.

  • IDentitySDK / IDentityMediumSDK / IDentityLiteSDK : For IDentitySDK / 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.

  • IDentitySDK / IDentityMediumSDK / IDentityLiteSDK : For IDentitySDK / 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.

  • IDentitySDK / IDentityMediumSDK / IDentityLiteSDK : For IDentitySDK / 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)
    }
}

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.lowerWidthThresholdTolerance = 0.2
IDCapture.options.upperWidthThresholdTolerance = 0.05
IDCapture.options.isDebugMode = true
IDCapture.options.enableInstructionScreen = true
IDCapture.options.enableRealId = true
IDCapture.options.uploadIdData = true
IDCapture.options.capture4K = true
IDCapture.options.focusThreshold = 0.3
IDCapture.options.enablePassportNFC = false
IDCapture.options.passportNFCPhotoMatchThreshold = 0.97

//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.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.colors.overlayTopViewColor = .white
IDCapture.colors.closeButtonTextColor = .black
IDCapture.colors.closeButtonColor = .white
IDCapture.colors.closeButtonImageTintColor = .white
IDCapture.colors.successLabelBackgroundColor = .green
IDCapture.colors.errorLabelBackgroundColor = .red
IDCapture.colors.successLabelTextColor = .white
IDCapture.colors.captureLabelColor = .white
IDCapture.colors.captureLabelTextColor = .clear
IDCapture.colors.errorLabelTextColor = .white
IDCapture.colors.backgroundColor = .clear
IDCapture.fonts.closeButtonTextFont = UIFont.systemFont(ofSize: 20)
IDCapture.fonts.captureLabelFont = UIFont.boldSystemFont(ofSize: 14)
IDCapture.fonts.labelFont = UIFont.systemFont(ofSize: 14)
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 Instruction Screen UI Customization
IDCapture.strings.instructionScreenText = "Lorem ipsum text"
IDCapture.strings.instructionScreenButtonText = "Continue"
IDCapture.colors.instructionScreenBackgroundColor = .white
IDCapture.colors.instructionScreenTextBackgroundColor = .gray
IDCapture.colors.instructionScreenBackButtonImageTintColor = .orange
IDCapture.colors.instructionScreenImageTintColor = .white
IDCapture.colors.instructionScreenLabelTextColor = .black
IDCapture.colors.instructionScreenButtonTextColor = .white
IDCapture.colors.instructionScreenButtonBackgroundColor = .gray
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 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.retryScreenButtonTextColor = .green
IDCapture.colors.retryScreenButtonBackgroundColor = .clear
IDCapture.fonts.retryScreenLabelFont = UIFont.systemFont(ofSize: 16)
IDCapture.fonts.retryScreenButtonFont = UIFont.systemFont(ofSize: 14)
IDCapture.images.retryScreenImage = UIImage(named: "IdRetryImage")

  • 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.79
SelfieCapture.options.liveFaceProbabilityThreshold = 0.9
SelfieCapture.options.consecutiveFakeFaceLimit = 10
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 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.fakeFace = "Fake face Detected"
SelfieCapture.strings.realFace = "Real face Detected"
SelfieCapture.strings.straightenHead = "Make Sure your head is straight"
SelfieCapture.strings.moveFaceDown = "Move face Down"
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.closeButtonTextColor = .black
SelfieCapture.colors.closeButtonColor = .clear
SelfieCapture.colors.closeButtonImageTintColor = .white
SelfieCapture.colors.successLabelBackgroundColor = .green
SelfieCapture.colors.errorLabelBackgroundColor = .red
SelfieCapture.colors.successLabelTextColor = .white
SelfieCapture.colors.errorLabelTextColor = .white
SelfieCapture.fonts.labelFont = UIFont.systemFont(ofSize: 20)
SelfieCapture.fonts.closeButtonTextFont = UIFont.systemFont(ofSize: 20)
SelfieCapture.layout.labelPosition = .top
SelfieCapture.images.closeButtonImage = UIImage(named: "Close")
SelfieCapture.images.silhouetteImage = UIImage(named: "SelfieOverlay")
SelfieCapture.images.bottomInfoImage = UIImage(named: "Selfieinfo")

//SelfieCapture Instruction Screen UI Customization
SelfieCapture.strings.instructionScreenText = "Lorem ipsum text"
SelfieCapture.strings.instructionScreenButtonText = "Continue"
SelfieCapture.colors.instructionScreenBackgroundColor = .white
SelfieCapture.colors.instructionScreenTextBackgroundColor = .orange
SelfieCapture.colors.instructionScreenBackButtonImageTintColor = .gray
SelfieCapture.colors.instructionScreenImageTintColor = .white
SelfieCapture.colors.instructionScreenLabelTextColor = .black
SelfieCapture.colors.instructionScreenButtonTextColor = .white
SelfieCapture.colors.instructionScreenButtonBackgroundColor = .gray
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 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.retryScreenButtonTextColor = .blue
SelfieCapture.colors.retryScreenButtonBackgroundColor = .clear
SelfieCapture.fonts.retryScreenLabelFont = UIFont.systemFont(ofSize: 20)
SelfieCapture.fonts.retryScreenButtonFont = UIFont.systemFont(ofSize: 20)
SelfieCapture.images.retryScreenImage = UIImage(named: "SelfieRetryImage")

  • Before starting either Capture flow, optionally adjust the following DocumentCapture static properties:
//DocumentCapture Customization
DocumentCapture.options.lowerWidthThresholdTolerance = 0.4
DocumentCapture.options.upperWidthThresholdTolerance = 0.1
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 Camera Screen UI Customization
DocumentCapture.string.uploadImage = "Upload image"
DocumentCapture.string.uploadPDF = "Upload PDF"
DocumentCapture.string.documentPreview = "Document Preview"
DocumentCapture.strings.closeButtonText = "Cancel"
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.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.successLabelTextColor = .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.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.strings.instructionScreenText = "Lorem ipsum text"
DocumentCapture.strings.instructionScreenButtonText = "Continue"
DocumentCapture.colors.instructionScreenBackgroundColor = .blue
DocumentCapture.colors.instructionScreenBackButtonImageTintColor = .orange
DocumentCapture.colors.instructionScreenImageTintColor = .white
DocumentCapture.colors.instructionScreenLabelTextColor = .red
DocumentCapture.colors.instructionScreenButtonTextColor = .green
DocumentCapture.colors.instructionScreenButtonBackgroundColor = .yellow
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 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.retryScreenButtonTextColor = .green
DocumentCapture.colors.retryScreenButtonBackgroundColor = .clear
DocumentCapture.fonts.retryScreenLabelFont = UIFont.systemFont(ofSize: 16)
DocumentCapture.fonts.retryScreenButtonFont = UIFont.systemFont(ofSize: 14)
DocumentCapture.images.retryScreenImage = UIImage(named: "IdRetryImage")

  • Before starting either Capture flow, optionally adjust the following SignatureCapture static properties:
//SignatureCapture Customization
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)

  • Before starting either Capture flow, optionally adjust the following FingerPrintCapture static properties:
//FingerPrintCapture InstructionScreen Customization
FingerPrintCapture.images.instructionScreenImage = UIImage(named: "fingerPrintInstructionImage")
FingerPrintCapture.images.instructionScreenLeftHandButtonImage = UIImage(named: "leftHandImage")
FingerPrintCapture.images.instructionScreenRightHandButtonImage = UIImage(named: "rightHandImage")
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 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.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")
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)

SDK Version History

v 9.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.

v 9.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.

v 9.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

v 9.5.9.2.4 (08 August 2023)

Bug

Bug Fixes for Passport NFC detection

Bug

Bug fixes and performance improvements.

v 9.5.7.2.5(07 July 2023)

  • Added Passport NFC feature
  • Minor bug fixes

v 9.5.3.2.3 (15 May 2023)

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

v 9.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

v 9.4.8.2.1 (10 March 2023)

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

v 9.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

v 9.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.

v 9.3.4.2.6

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

v 9.3.4.2.5

  • Added embeded Focus Model

v 9.3.3.32

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

v 9.3.3.31

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

v 9.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.

v 9.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.

v 9.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.

v 9.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