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.
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:
- Live face Check
- ID Validation
- ID Validation and face match
- Enroll Biometric
- Enroll Customer with ID validation
- Customer Verification
- Customer Biometric Verification
- Autofill
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
Please contact to sales@idmission.com for Login Credentials, which you will later pass to the SDK.
Add CocoaPods pod file to your project using pod init
command.
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 'VideoCapture' (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.
- 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.
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. -
VideoCapture_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.
-
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.
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.
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'
- 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'
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
Run pod install
to install above mentioned dependencies.
Add an NSCameraUsageDescription
key to the app's Info.plist
to allow camera access.
- Initialize the SDK with your
LOGIN_ID
,PASSWORD
,MERCHANT_ID
,TemplateModelBaseURL
&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 VideoCapture_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)
- 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)
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.templateModelBaseURL = "https://kyc.idmission.com/IDS/service/"
IDentitySDK.apiBaseURL = "https://api.idmission.com/v2/"
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.
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)
}
}
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 forID Validation
.
// For IDentitySDK : Start ID Validation with the default options, presenting it from view controller(self)
let options = AdditionalCustomerWFlagCommonData()
IDentitySDK.idValidation(from: self, options: options) { result in
switch result {
case .success(let validateIdResult):
// submit the successful result to the server
validateIdResult.submit { result, hostData 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 forID Validation
.
// For IDentityMediumSDK / IDentityLiteSDK : Start ID Validation using captureBack(true/false) values with the default options, presenting it from view controller(self)
let options = AdditionalCustomerWFlagCommonData()
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, hostData 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 = AdditionalCustomerWFlagCommonData()
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, hostData 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 AdditionalCustomerWFlagCommonData
documentation contains information on the various capture options that can be set.
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 forID Validation and face match
.
// For IDentitySDK : Start ID Validation and face match with the default options, presenting it from view controller(self)
let options = AdditionalCustomerWFlagCommonData()
IDentitySDK.idValidationAndMatchFace(from: self, options: options) { result in
switch result {
case .success(let validateIdMatchFaceResult):
// submit the successful result to the server
validateIdMatchFaceResult.submit { result, hostData 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 callID Validation and face match
.
// For IDentityMediumSDK / IDentityLiteSDK : Start ID Validation and face match using captureBack(true/false) values with the default options, presenting it from view controller(self)
let options = AdditionalCustomerWFlagCommonData()
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, hostData 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 = AdditionalCustomerWFlagCommonData()
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, hostData 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 AdditionalCustomerWFlagCommonData
documentation contains information on the various capture options that can be set.
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 = PersonalCustomerCommonRequestData(uniqueNumber: uniqueNumber)
let options = AdditionalCustomerEnrollBiometricRequestData()
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 AdditionalCustomerEnrollBiometricRequestData
documentation contains information on the various capture options that can be set.
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 forEnroll 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 = PersonalCustomerCommonRequestData(uniqueNumber: uniqueNumber)
let options = AdditionalCustomerWFlagCommonData()
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, hostData 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 callEnroll Customer with ID validation
.
// For IDentityMediumSDK / IDentityLiteSDK : Start Enroll Customer with ID validation using captureBack(true/false) values with personalData & the default options, presenting it from view controller(self)
let personalData = PersonalCustomerCommonRequestData(uniqueNumber: uniqueNumber)
let options = AdditionalCustomerWFlagCommonData()
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, hostData 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 = PersonalCustomerCommonRequestData(uniqueNumber: uniqueNumber)
let options = AdditionalCustomerWFlagCommonData()
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, hostData 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 AdditionalCustomerWFlagCommonData
documentation contains information on the various capture options that can be set.
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 AdditionalCustomerWFlagCommonData
documentation contains information on the various capture options that can be set.
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)
}
}
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 forautofill
.
// 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)
}
}
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 forDocument 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)
}
}
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 forSignature 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)
}
}
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 forFingerPrint 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)
}
}
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
.
-
IDentitySDK : For
IDentitySDK
flavour user needs to use below API call method forVideo 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)
}
}
- 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 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.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.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 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.readTextCountdownSeconds = 10
VideoCapture.options.readTextWordMatchThreshold = 0.5
VideoCapture.options.isDebugMode = false
VideoCapture.options.frontRealnessThreshold = 0.5
VideoCapture.options.backRealnessThreshold = 0.3
VideoCapture.options.enableRealId = false
//VideoCapture Screen UI Customization
VideoCapture.strings.faceDoesNotMatch = "Face does not match"
VideoCapture.strings.idDoesNotMatch = "ID does not match"
VideoCapture.strings.doneButton = "Done"
VideoCapture.colors.readingTextColor = .black
VideoCapture.colors.readingTextSpokenWordColor = .blue
VideoCapture.colors.readingTextBackgroundColor = .clear
- Enhanced capture of passports.
- Improved Video ID processing procedures
- Reduced default selfie silhouette size during liveness detection
- 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
- Added VideoIDCapture support
- Added SignatureCapture support
- Added FingerPrintCapture support
- 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
andpostalCode
. - Alerting the user when multiple faces are detected during selfie capture.
- Updated instruction screen for IDCapture & SelfieCapture
- 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.
- Added functionality to download updated encrypted Focus Model from server.
- Added embeded Focus Model
- Added IDentitySDK.pluginName property to add it in Metadata.
- Added Document Detect confidence in Metadata
- Added frontDocumentConfidence & backDocumentConfidence default values to 0.85
- 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.
- Added properties to customize Images on SelfieCapture camera screen & Retry screen.
- Added properties to customize Images on IdCapture camera screen & Retry screen.
- 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.
- Live face Check
- ID Validation
- ID Validation and face match
- Enroll Biometric
- Enroll Customer with ID validation
- Customer Verification
- Customer Biometric Verification