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.
Quick Links to get started with IDentity SDK for iOS
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
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', :git => 'https://github.com/krzyzanowskim/OpenSSL.git', :tag => '1.1.2301'
- 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
- Add an
NSCameraUsageDescription
key to the app’sInfo.plist
to allow camera access. - Add an
NFCReaderUsageDescription
key to the app’sInfo.plist
to allow NFC reader access. - Add an
NSMicrophoneUsageDescription
key to the app’sInfo.plist
to allow microphone access. - Add an
NSSpeechRecognitionUsageDescription
key to the app’sInfo.plist
to allow speech recognition access. - Add an
NSLocationWhenInUseUsageDescription
key to the app’sInfo.plist
to allow GPS location access.
Step 8: Add API Required Reasons
Add the following dependency API required reasons to the app’s PrivacyInfo.xcprivacy
file:
- File Timestamp:
C617.1
,3B52.1
- System Boot Time:
35F9.1
- Disk Space:
E174.1
- User Defaults:
CA92.1
,1C8F.1
,C56D.1
SDK Initialization
1) Generate Access Token :
Tokens are to be obtained on your server and sent to the client in the initialize call.
Login Credentials required for token generation.
The following details are required to generate a token:
- Auth_url : Authentication url for the given environment
- client_id : Client ID generated for the specific company
- client_secret : Client credentials/secret generated for the specific company
- Username : Integ user name
- Password: Password of the Integ user
All company login details needed are provided upon sign up on the Identity Portal.
Token Generation using RESTful API
Token Generation Sample Request:
curl --location --request POST 'https://auth.idmission.com/auth/realms/identity/protocol/openid-connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'client_id=XXXXXXX' \
--data-urlencode 'client_secret=XXXXXXXX' \
--data-urlencode 'username=XXXXXXXX' \
--data-urlencode 'password=XXXXXXXXX' \
--data-urlencode 'scope=api_access'
Sample Response - Token Generation:
{
"access_token": "eyJhbGciO....5gNZx03Myb8ZuyY2gu3u-8KgGmULBs9mkPcg",
"expires_in": 18000,
"refresh_expires_in": 0,
"token_type": "Bearer",
"session_state": "e0b689e8-e7c6-47b7-bf9d-1349ea813c96",
"scope": "email profile api_access"
}
The following details are the response parameters
- access_token : Access Token value
- expires_in : Access token expires time in seconds
- refresh_expires_in : Refresh access token expires time in seconds
- token_type : Token type
- session_state : session state value
- scope : Token scope
2) Initialize the SDK :
While Initializing the SDK, first import
below frameworks as per requirement
- 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 done with importing above frameworks, You need to Call the following SDK Initialization API.
Token obtained from server needs to be passed in initialize call as below
//Parameter for SDK initialization API.
let language = Language.en //Optional: Default is `.en`
let isGPSEnabled = true //Optional: Default is `true`
let isUpdateModelsData = true //Optional: Default is `true`
let accessToken = "****" //Required: Use same AccessToken generated in Previous steps.
//Before Initialization of SDK pass the url values to following `IDentitySDK` static properties.
IDentitySDK.apiBaseUrl = "https://api.idmission.com/"
//Start SDK Initialization using following method.
IDentitySDK.initializeSDK(language: language,
isGPSEnabled: isGPSEnabled,
isUpdateModelsData: isUpdateModelsData,
accessToken: accessToken) { 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 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 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/auto) 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 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 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.
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 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 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/auto) 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 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 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.
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 = PersonalCustomerEnrollBiometricsRequestData(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 PersonalCustomerEnrollBiometricsRequestData
& AdditionalCustomerEnrollBiometricRequestData
documentation contains information on the various capture options that can be set.
5) Enroll Customer with ID validation.
For Enroll Customer with ID validation
you need to use below respective methods of SDK Flavours with personalData & the default options from a UIViewController
. If successful, call submit
to send the result to the server.
- 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 = PersonalCustomerCommonRequestEnrollData(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 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/auto) values with personalData & the default options, presenting it from view controller(self)
let personalData = PersonalCustomerCommonRequestEnrollData(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 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 = PersonalCustomerCommonRequestEnrollData(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 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 PersonalCustomerCommonRequestEnrollData
& AdditionalCustomerWFlagCommonData
documentation contains information on the various capture options that can be set.
6) Customer Verification.
For Customer Verification
you need to use below method with personalData from a UIViewController
. If successful, call submit
to send the result to the server.
- 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)
}
}
Please refer PersonalCustomerVerifyData
documentation for more details.
7) Customer Biometric Verification.
For Customer Biometric Verification
you need to use below method of from a UIViewController
. If successful, call submit
to send the result to the server.
- 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 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)
}
}
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 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)
}
}
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 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)
}
}
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 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)
}
}
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 forVoice Capture
.
// start Voice Capture, presenting it from view controller(self)
IDentitySDK.voiceCapture(from: self) { voiceResult in
switch voiceResult {
case .success(let url):
// Review successful recording file URL
print(url)
case .failure(let error):
// Handle error
print(error.localizedDescription)
}
}
13) Video Capture.
For Video Capture
you first need to successfully complete the ID Validation
flow from item 2) above before passing the front
and back
DetectedData
items from the ValidateIdResult
to the below method presented from a UIViewController
.
- 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)
}
}
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.glareThreshold = 0.3
IDCapture.options.fingerThreshold = 0.3
IDCapture.options.lowerWidthThresholdTolerance = 0.3
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.2
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.strings.documentDetectedHoldStill = "Document detected, hold still..."
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 = 15
SelfieCapture.options.lightIntensityThreshold = 0.05
SelfieCapture.options.focusThreshold = 0.2
SelfieCapture.options.isDebugMode = true
SelfieCapture.options.enableInstructionScreen = true
SelfieCapture.options.capture4K = false
SelfieCapture.options.uploadFaceData = true
SelfieCapture.options.ovalScaleMultiplier = 0.7
SelfieCapture.options.cameraPosition = .front
SelfieCapture.options.showToggleCamera = false
//SelfieCapture 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.3
DocumentCapture.options.upperWidthThresholdTolerance = 0.05
DocumentCapture.options.isDebugMode = true
DocumentCapture.options.enableInstructionScreen = true
DocumentCapture.options.capture4K = true
DocumentCapture.options.documentCaptureFrameWidth = 400
DocumentCapture.options.documentCaptureFrameHeight = 600
DocumentCapture.options.documentFileSizeLimit = 2.0
//DocumentCapture 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.24.2.5 (03 December 2024)
- Improved capture quality with model updates that notify users of obstructions over key ID information.
v 9.6.22.2.9 (18 November 2024)
- Integrated the latest swagger V4 API version. This includes updates to model download based on V4, updates to the new initialization process, as well as ensuring backward compatibility.
- Added the selfie image in the response.
- Added support for an initialization parameter that will enable / disable Location / GPS capture.
- Improved ID capture guidance messages to inform the user to hold still once the document is detected to ensure a higher quality capture.
- Added configuration support to allow selfie capture with the back camera.
- Added support for additional date and timestamp capture as Exif for ID capture and Selfie capture image.
- QR code for the test applications supports the new initialization process.
- Update to support multiple security enhancements including the removal of outdated/unused libraries.
Bug
Bug fixes and performance improvements.- Updated all default AI models to the latest versions.
v 9.6.4.2.2 (31 May 2024)
- Improved user experience for IDCapture. When rectangle turn green, showing message ‘document detected, hold still…’
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 detectionBug
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
andpostalCode
. - 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