Back

Android Native

This is integration guide document for Android platform as a part of eKYC service provided by FinOS Technology VN.
Document version : v1.0.0
SDK version : v4

SDK Setup

Prerequisite

Add config to gradle on project level

maven { 
									url = 's3://finos.mvnrepository-dev' 
									credentials(AwsCredentials) { 
										accessKey = AWS_ACCESS_KEY_ID 
										secretKey = AWS_SECRET_ACCESS_KEY 
									} 
								} 
								
  • AWS_ACCESS_KEY_ID , AWS_SECRET_ACCESS_KEY : FinOS will provide

NOTE

  • In case android studio latest version, put config above in dependencyResolutionManagement on settings.gradle
  • In case android studio version <  Chipmunk version, put config above  in allprojects on build.gradle

Init SDK

FinOSNetworkSDK.initialize(config: Map<String, Any>)
						

With config:

							
								
								val config = mutableMapOf<String, Any>()
								
config["environment"] = FinOsEnv.SANDBOX
config["timeout"]= 30

Use OCR Feature

Add OCR lib to gradle

implementation(group: 'android.ekyc_v4', name: 'finos_network', version: "1.0.15.trunk_noSSL", ext: 'aar') { transitive = true}
						
implementation(group: 'android.ekyc_v4', name: 'finos_ocr', version: "1.0.15.trunk_noSSL", ext: 'aar'){ transitive = true}

Call function OCR from SDK

FinOSDocCaptureConfigs(this).apply { 
							setDocCaptureAPIHeaders(mapOf("X-FinOS-Api-Key" to "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx")) 
							setShouldShowInstructionScreen(true) 
							setDocumentType(FinOSDocCaptureConfigs.DocumentType.CARD) 
							setDocumentSide(FinOSDocCaptureConfigs.DocumentSide.FRONT) 
							... [Ref to Table of Func Customization]
							startOCR { response -> 
								// handle response here   
							}} 
						

Table Of Func Customization

Screen Name Func Description Note
Capture Doc Screen fun setDocumentType(documentType: FinOSEkycDocumentType) Define type of document to extract data
fun setDocumentSide(documentSide: FinOSEkycDocumentSide) Set side of document to extract data
fun setDocCaptureAPIHeaders(Map? headers) Add headers paramters to API [X-FinOS-Api-Key] is param for authorization
fun setDocCaptureAPIParams(Map? params) Set parameters in payload of API
fun setShouldShowFlashIcon(shouldShowFlashIcon: Boolean) Allow showing flash icon Data type : Boolean (Default : false)
fun setDocCaptureButtonFlashTintColor(color: String) Set color of button flash Default : #0091F2
fun setDocCaptureAppBarColor(color: String) Set color if app bar
fun setDocCaptureTitle(title: String) Set text title Default is ID Front Side/ID Back Side it’s depends on document type
fun setDocCaptureTitleTextColor(color: String) Set text color of title Default : #ffffffff
fun setDocCaptureTitleTextSize(size: float) Set font size of text title Default is style TextViewHeader 20f
fun setDocCaptureDescription(description: String) Set text of description Default : Please place the front side of ID card in the center/Please place the back side of ID card in the center
fun setDocCaptureDescriptionTextColor(color: String) Set text color of description Default : #ffffffff
fun setDocCaptureDescriptionTextSize(size: float) Set font size of text description Default is style TextViewSubtitle 17f
fun setDocCaptureButtonCaptureTintColor(color: String) Set color of button capture Default : #ffffffff
fun setDocCaptureButtonSwitchCameraTintColor(color: String) Set color of button switch camera Default : #ffffffff
fun setShouldShowSwitchCameraButton(enable: Boolean) Allow showing switch camera button Default : false
fun setDocCaptureCameraSide(cameraSide: CameraSide) Set camera side Front/Back Default : Back
fun setShouldShowReviewScreen(shouldShowReviewScreen: Boolean) Allow showing review screen Default : false
fun setShouldShowInstructionScreen(shouldShowInstructionScreen: Boolean) Allow showing instruction screen Default : false
fun start(callback: Callback) Start OCR document (open capture doc screen)
fun setImageCompressRatio(ratio: Float) Set compress ratio for image before sending to server Range 0 -> 1 (Default 0.5)
Review Screen fun setDocReviewButtonBackTintColor(color: String)
fun setDocReviewAppBarColor(color: String)
fun setDocReviewTitle(title: String) Set text for title of screen Default : Review Your Document
fun setDocReviewTitleTextColor(color: String) Set color for text title Default : #000000
fun setDocReviewTitleTextSize(size: float) Set font size of text title Default : 20f
fun setDocReviewDescription(description: String) Set text for description Default : Make sure the lighting is good and letters are clearly visible.
fun setDocReviewDescriptionTextColor(color: String) Set color for text description Default : #000000
fun setDocReviewDescriptionTextSize(size: float) Set font size for text description Default : 17f
fun setDocReviewButtonRetake(text: String) Set text for button retake Default : Retake
fun setDocReviewButtonRetakeColor(color: String) Set border of button retake Default : #0091F2
fun setDocReviewButtonRetakeTextColor(color: String) Set text color of button retake Default : #0091F2
fun setDocReviewButtonRetakeTextSize(size: float) Set font size text of button retake Default : 20f
fun setDocReviewButtonContinue(text: String) Set text of button continue Default : Continue
fun setDocReviewButtonContinueColor(color: String Set color of button continue Default : #0091F2
fun setDocReviewButtonContinueTextColor(color: String) Set text color of button continue Default : #ffffffff
fun setDocReviewButtonContinueTextSize(size: float) Set font size text of button continue Default : 20f
Loading screen fun setDocLoadingButtonBackTintColor(color: String) Set color of button back Default: #000000
fun setDocLoadingTitle(text: String) Set text title Default : Uploading your photos
fun setDocLoadingTitleTextColor(color: String) Set text color for title Default :#000000
fun setDocLoadingTitleTextSize(size: float) Set font size text for title Default : 20f
fun setDocLoadingDescription(text: String) Set text of description Default : This may take a few seconds, please wait
fun setDocLoadingDescriptionTextColor(color: String) Set text color of description Default : #000000
fun setDocLoadingDescriptionTextSize(size: float) Set font size text of description Default : 17f
fun setCustomLoading(view: View) Set a customize view of loading Android is fragment
Instruction Screen fun setDocInstructionButtonBackTintColor(color: String) Set color for button back Default: #000000
fun setDocInstructionAppBarColor(color: String)
fun setDocInstructionTitle(title: String) Set text title Default: ID Capture Tips
fun setDocInstructionTitleTextColor(color: String) Set text color for title Default : #000000
fun setDocInstructionTitleTextSize(size: float) Set font size for text title Default: 20f
fun setDocInstructionButtonContinue(text: String) Set text of button continue Default : Process
fun setDocInstructionButtonContinueColor(color: String) Set color of button continue Default : #0091F2
fun setDocInstructionButtonContinueTextColor(color: String) Set text color of button continue Default : #ffffffff
fun setDocInstructionButtonContinueTextSize(size: float) Set font size text of button continue Default : 20f
fun setCustomInstruction(view: View) Change content of instruction

Use Face Comparison Feature

Add lib to gradle

implementation(group: 'android.ekyc_v4', name: 'finos_network', version: "1.0.15.trunk_noSSL", ext: 'aar') { transitive = true       
						
						implementation(group: 'android.ekyc_v4', name: 'finos_liveness', version: "1.0.15.trunk_noSSL", ext: 'aar'){ transitive = true} 
						

Call function Face Compare from SDK

NetworkHelper.makeFaceMatchCall( 
							faceUri: String, 
							documentUri: String, 
							parameters: Map<String, String>?, 
							headers: Map<String, String?>, 
							result: ((response: Map<String, Any>?) -> Unit)? = null 
						) 
						
Parameters
Param Type Description
faceUri String URI of face image
documentUri String URI of document image
parameters Map<String, String?> Parameter of Payload
headers Map<String, String?> Parameter of header. Supported : X-FinOS-Api-Key (Authorization key provided by FinOS) - transactionId (unique value, presentative of transaction eKYC)
Example
NetworkHelper.makeFaceMatchCall( 
							faceUri!!, 
							documentUri!!, 
							null, 
							mapOf("X-FinOS-Api-Key" to "c84294ba-793d-4592-b844-1d59b9e52ba1", "transactionId" to "AWNF63M9201LAQNA") 
						) { data -> 
							//handle response here 
						} 
						

Use Liveness Check Feature

Add lib to gradle

implementation(group: 'android.ekyc_v4', name: 'finos_network', version: "1.0.15.trunk_noSSL", ext: 'aar') { transitive = true       
						
						implementation(group: 'android.ekyc_v4', name: 'finos_liveness', version: "1.0.15.trunk_noSSL", ext: 'aar'){ transitive = true} 
						

Call function Liveness Check from SDK

val faceConfigModel = FinOSFaceCaptureConfigs(this.applicationContext) 
							.apply { 
								setFaceCaptureAPIHeaders(mapOf("X-FinOS-Api-Key" to "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx")) 
								setLivenessMode(FinOSEkycLivenessMode.ACTIVE) 
								... [Ref to Table of Func Customization]
							} 
						faceConfigModel.start { response -> 
							//handle response here 
						} 
						

Table Of Func Customization

Screen Name Func Description Note
Face Detect Screen fun setFaceCaptureButtonBackTintColor(color: String) Set color of button back Default: #FFFFFF
fun setLivenessMode(livenessMode: FinOSEkycLivenessMode) Supported 2 mode : Active (Require user actions to detect liveness) - Passive (capture selfie and send to server process detection)
fun setFaceCaptureAPIHeaders(Map? headers) Add headers paramters to API [X-FinOS-Api-Key] is param for authorization
fun setFaceCaptureAPIParams(Map? params) Set parameters in payload of API
fun setFaceCaptureAppBarColor(color: String) Set color of app bar Default : #242828
fun setFaceCaptureTitle(title: String) Set text title Default: Face Detection
fun setFaceCaptureTitleTextColor(color: String) Set text color of title Default: #FFFFFF
fun setFaceCaptureTitleTextSize(size: float) Set font size of text title Default: 20f
fun setFaceCaptureProgressTrackColor(color: String) Set color of progress track Default: #FFFFFF
fun setFaceCaptureProgressIndicatorColor(color: String) Set color of progress indicator Default: #E7332D
fun setFaceCaptureActionStraight(text: String) Set text of action look straight Default: Look straight
fun setFaceCaptureActionSmile(text: String) Set text of action smile Default: Smile!
fun setFaceCaptureActionLeft(text: String) Set text of action turn left Default: Turn left
fun setFaceCaptureActionRight(text: String) Set text of action turn right Default: Turn right
fun setFaceCaptureActionUp(text: String) Set text of action head up Default: Head up
fun setFaceCaptureActionDown(text: String) Set text of action head down Default: Head down
fun setFaceCaptureActionFaceInCenter(text: String) Set text guide move face in the center of circle Default: Please move your face in the center of the frame
fun setFaceCaptureActionCaptureNow(text: String) Set text of capture action Default: Capture Now
fun setFaceCaptureActionTextColor(color: String) Set text color of capture action Default: #FFFFFF
fun setFaceCaptureActionTextSize(size: float) Set font size of text capture action Default: 17f
fun setFaceCaptureButtonCaptureTintColor(color: String) Set color of button capture Default: #0091F2
fun setFaceCaptureButtonSwitchCameraTintColor(color: String) Set color of button switch camera Default: #FFFFFF
fun setShouldShowSwitchCameraButton(enable: Boolean) Allow showing button switch camera Default : false
fun setFaceCaptureCameraSide(cameraSide: CameraSide) Set uses camera back or front camera Default : front
fun setShouldShowReviewScreen(shouldShowReviewScreen: Boolean) Allow showing review screen Default : false
fun setShouldShowInstructionScreen(shouldShowInstructionScreen: Boolean) Allow showing instruction screen Default : false
fun setImageCompressRatio(ratio: Float) Set image compress ratio range 0…1 Default : 0.5
Review Screen fun setFaceCaptureReviewButtonBackTintColor(color: String) Set color of button back Default: #000000
fun setFaceCaptureReviewAppBarColor(color: String) Set color of app bar Default: #FFFFFF
fun setFaceCaptureReviewTitle(title: String) Set text title Default : Review
fun setFaceCaptureReviewTitleTextColor(color: String) Set text color of text title Default: #000000
fun setFaceCaptureReviewTitleTextSize(size: float) Set font size of text title Default 20
fun setFaceCaptureReviewDescription(text: String) Set text of description Default : “”
fun setFaceCaptureReviewDescriptionTextColor(color: String) Set text color of description Default : #000000
fun setFaceCaptureReviewDescriptionTextSize(size: float) Set font size of description Default: 17
fun setFaceCaptureReviewButtonRetake(text: String) Set text of button retake Default: Retake
fun setFaceCaptureReviewButtonRetakeColor(color: String) Set color of button retake Default: #FFFFFF
fun setFaceCaptureReviewButtonRetakeTextColor(color: String) Set text color of button retake Default : #000000
fun setFaceCaptureReviewButtonRetakeTextSize(size: float) Set font size of text button retake Default 17
fun setFaceCaptureReviewButtonContinue(text: String) Set text of button continue Default : Continue
fun setFaceCaptureReviewButtonContinueColor(color: String) Set color of button continue Default : #0091F2
fun setFaceCaptureReviewButtonContinueTextColor(color: String) Set text color of button continue Default: #FFFFFF
fun setFaceCaptureReviewButtonContinueTextSize(size: float) Set font size of text button continue Default: 17
Loading Screen fun setFaceLoadingButtonBackTintColor(color: String) Set color of button back Default: #000000
fun setFaceLoadingTitle(text: String) Set text title Default : Face Loading
fun setFaceLoadingTitleTextColor(color: String) Set text color of title Default : #000000
fun setFaceLoadingTitleTextSize(size: float) Set font size of title Default : 17
fun setFaceLoadingDescription(text: String) Set text of description Default : Face Loading Desc
fun setFaceLoadingDescriptionTextColor(color: String) Set text color of description Default : #000000
fun setFaceLoadingDescriptionTextSize(size: float) Set font size of text description Default : 17
fun setCustomLoading(view: View) Set customize loading Android is fragment
fun setFaceInstructionAppBarColor(color: String) Set color of app bar Default: #FFFFFF
fun setFaceInstructionTitle(text: String) Set text of title Default: Face Recognition
fun setFaceInstructionTitleTextColor(color: String) Set text color of title Default: #000000
fun setFaceInstructionTitleTextSize(size: float) Set font size of text title Default: 20
fun setFaceInstructionButtonContinue(text: String) Set text of button continue Default: Process
fun setFaceInstructionButtonContinueColor(color: String) Set color of button continue Default: #0091F2
fun setFaceInstructionButtonContinueTextColor(color: String) Set text color of button continue Default: #FFFFFF
fun setFaceInstructionButtonContinueTextSize(size: float) Set font size of text button continue Default: 17
fun setCustomInstruction(view: View) Change content of instruction
fun setFaceInstructionButtonBackTintColor(color: String) Set color of button back Default: #000000
fun start(callback: Callback) start face capture

iOS Native

This is integration guide document for iOS platform as a part of eKYC service provided by FinOS Technology VN.
Document version : v1.0.0
SDK version : v4

SDK Setup

1. Environment Required

  • XCode 12.2 or later
  • Your project must target iOS 11 or later

2. Installation

  • You need download FinOS_Liveness.xcframework, FinOS_Network.xcframework, FinOS_OCR.xcframework and add them to your project
  • Add Camera Permissions
  • Add the import statement in all files using the frameworks:
import FinOS_OCR 
						import FinOS_Liveness 
						import FinOS_Network 
						

NOTE

To request the user for camera permissions, add this key-value pair in your application’s Info.plist file.
Key : Privacy - Camera Usage Description
Value : “Access to camera is needed for document and face capture”

Use OCR Feature

Define configuration

let docConfig = FinOSDocCaptureConfigs() docConfig.setDocumentType(FinOSEkycDocumentType.CARD) 
						docConfig.setDocumentSide(isFront ? FinOSEkycDocumentSide.FRONT : FinOSEkycDocumentSide.BACK) 
						docConfig.setShouldShowFlashIcon(true) 
						docConfig.setShouldShowReviewScreen(true) 
						docConfig.setShouldShowInstructionScreen(true) 
						docConfig.setDocReviewAppBarColor("#F9S0D8") 
						docConfig.setDocReviewButtonRetake("Retake") 
						docConfig.setTimeout(30) 
						docConfig.setEnvironment(.sandbox) 
						let customLoadingView = (Bundle.main.loadNibNamed("YourCustomViewName", owner: nil)?[0]) as? UIView
						let customInstructionView = (Bundle.main.loadNibNamed("YourCustomViewName", owner: nil)?[0]) as? UIView 
						docConfig.setCustomLoading(customLoadingView) 
						docConfig.setCustomInstruction(customInstructionView) 
						docConfig.setDocCaptureAPIHeaders(["X-FinOS-Api-Key": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx"]) 
						... [Ref to Table of Func Customization]
						

Call function OCR from SDK

FinOSOCR.shared.setConfig(config: docConfig) 
						FinOSOCR.shared.start { response in
									//TODO: Handle error and response
									//Example
									if response["error"] == nil {
										// let result = response["apiResult"] as? [String: Any]
										if isFront {
											//self?.originalFrontImageUri = response?["imageOriginalUri"] as? String ?? ""
											self.frontImageUri = response["imageCompressedUri"] as? String ?? ""
											self.frontResponseData = response["apiResult"] as? [String: Any]
										} else {
											//self?.originalBackImageUri = response?["imageOriginalUri"] as? String ?? ""
											self.backImageUri = response["imageCompressedUri"] as? String ?? ""
											self.backResponseData = response["apiResult"] as? [String: Any]
										}
										//TODO: handle responseData
									} else {
										let error = (response["error"] as? [String: Any] ?? [:]
										let message = error["message"] as? String ?? ""
										let errorCode = error["code"] as? Int
										//TODO: Display message
									}
								} 
						

Table Of Func Customization

Screen Name Func Description Note
Capture Doc Screen func setDocumentType(documentType: FinOSEkycDocumentType) Define type of document to extract data
func setDocumentSide(documentSide: FinOSEkycDocumentSide) Set side of document to extract data
func setDocCaptureAPIHeaders(Map? headers) Add headers paramters to API [X-FinOS-Api-Key] is param for authorization
func setDocCaptureAPIParams(Map? params) Set parameters in payload of API
func setShouldShowFlashIcon(shouldShowFlashIcon: Boolean) Allow showing flash icon Data type : Boolean (Default : false)
func setDocCaptureButtonFlashTintColor(color: String) Set color of button flash Default : #0091F2
func setDocCaptureAppBarColor(color: String) Set color if app bar
func setDocCaptureTitle(title: String) Set text title Default is ID Front Side/ID Back Side it’s depends on document type
func setDocCaptureTitleTextColor(color: String) Set text color of title Default : #ffffffff
func setDocCaptureTitleTextSize(size: float) Set font size of text title Default is style TextViewHeader 20f
func setDocCaptureDescription(description: String) Set text of description Default : Please place the front side of ID card in the center/Please place the back side of ID card in the center
func setDocCaptureDescriptionTextColor(color: String) Set text color of description Default : #ffffffff
func setDocCaptureDescriptionTextSize(size: float) Set font size of text description Default is style TextViewSubtitle 17f
func setDocCaptureButtonCaptureTintColor(color: String) Set color of button capture Default : #ffffffff
func setDocCaptureButtonSwitchCameraTintColor(color: String) Set color of button switch camera Default : #ffffffff
func setShouldShowSwitchCameraButton(enable: Boolean) Allow showing switch camera button Default : false
func setDocCaptureCameraSide(cameraSide: CameraSide) Set camera side Front/Back Default : Back
func setShouldShowReviewScreen(shouldShowReviewScreen: Boolean) Allow showing review screen Default : false
func setShouldShowInstructionScreen(shouldShowInstructionScreen: Boolean) Allow showing instruction screen Default : false
func start(callback: Callback) Start OCR document (open capture doc screen)
func setImageCompressRatio(ratio: Float) Set compress ratio for image before sending to server Range 0 -> 1 (Default 0.5)
Review Screen func setDocReviewButtonBackTintColor(color: String)
func setDocReviewAppBarColor(color: String)
func setDocReviewTitle(title: String) Set text for title of screen Default : Review Your Document
func setDocReviewTitleTextColor(color: String) Set color for text title Default : #000000
func setDocReviewTitleTextSize(size: float) Set font size of text title Default : 20f
func setDocReviewDescription(description: String) Set text for description Default : Make sure the lighting is good and letters are clearly visible.
func setDocReviewDescriptionTextColor(color: String) Set color for text description Default : #000000
func setDocReviewDescriptionTextSize(size: float) Set font size for text description Default : 17f
func setDocReviewButtonRetake(text: String) Set text for button retake Default : Retake
func setDocReviewButtonRetakeColor(color: String) Set border of button retake Default : #0091F2
func setDocReviewButtonRetakeTextColor(color: String) Set text color of button retake Default : #0091F2
func setDocReviewButtonRetakeTextSize(size: float) Set font size text of button retake Default : 20f
func setDocReviewButtonContinue(text: String) Set text of button continue Default : Continue
func setDocReviewButtonContinueColor(color: String Set color of button continue Default : #0091F2
func setDocReviewButtonContinueTextColor(color: String) Set text color of button continue Default : #ffffffff
func setDocReviewButtonContinueTextSize(size: float) Set font size text of button continue Default : 20f
Loading screen func setDocLoadingButtonBackTintColor(color: String) Set color of button back Default: #000000
func setDocLoadingTitle(text: String) Set text title Default : Uploading your photos
func setDocLoadingTitleTextColor(color: String) Set text color for title Default :#000000
func setDocLoadingTitleTextSize(size: float) Set font size text for title Default : 20f
func setDocLoadingDescription(text: String) Set text of description Default : This may take a few seconds, please wait
func setDocLoadingDescriptionTextColor(color: String) Set text color of description Default : #000000
func setDocLoadingDescriptionTextSize(size: float) Set font size text of description Default : 17f
func setCustomLoading(view: View) Set a customize view of loading Android is fragment
Instruction Screen func setDocInstructionButtonBackTintColor(color: String) Set color for button back Default: #000000
func setDocInstructionAppBarColor(color: String)
func setDocInstructionTitle(title: String) Set text title Default: ID Capture Tips
func setDocInstructionTitleTextColor(color: String) Set text color for title Default : #000000
func setDocInstructionTitleTextSize(size: float) Set font size for text title Default: 20f
func setDocInstructionButtonContinue(text: String) Set text of button continue Default : Process
func setDocInstructionButtonContinueColor(color: String) Set color of button continue Default : #0091F2
func setDocInstructionButtonContinueTextColor(color: String) Set text color of button continue Default : #ffffffff
func setDocInstructionButtonContinueTextSize(size: float) Set font size text of button continue Default : 20f
func setCustomInstruction(view: View) Change content of instruction

Use Face Comparison Feature

Define configuration

let config = FinOSNetworkConfigs() 
							config.setTimeout(5) 
							config.setEnvironment(FinOSEnvironment.sandbox.rawValue)
							
						FinOSNetwork.shared.setConfig(config)    
						

Call function Face Compare from SDK

// Note: Use the same transactionId when call liveness check and face comparison
						let transactionId = UUID().uuidString
						
						FinOSNetwork.shared.makeFaceMatchCall(
							faceUri: faceImageUri, 
							documentUri: docImageUri, 
							parameters: [:], 
							headers: ["X-FinOS-Api-Key": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx",  "transactionId": transactionId]) { response in 
								//TODO: Handle error and response
								//Example
								if response["error"] == nil {
									// Face compare success
									// let result = response["apiResult"] as? [String: Any]
									// TODO: Handle result
								} else {
									let error = (response["error"] as? [String: Any] ?? [:]
									let message = error["message"] as? String ?? ""
									let errorCode = error["code"] as? Int
									//TODO: Display message
								}
							} 
						
Parameters
Param Description
faceImageUri URI of face image
documentUri URI of document image
parameters Parameter of Payload
headers Parameter of header. Supported : X-FinOS-Api-Key (Authorization key provided by FinOS) - transactionId (unique value, presentative of transaction eKYC)

Use Liveness Check Feature

Define configuration

let config = FinOSFaceCaptureConfigs()         
							config.setShouldShowSwitchCameraButton(enable: true) 
							config.setLivenessMode(livenessMode: .active) 
							config.setFaceCaptureAPIHeaders(headers: ["X-FinOS-Api-Key": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx", "transactionId": transactionId])
							config.setTimeout(30) 
							config.setEnvironment(.sandbox) 
							... [Ref to Table of Func Customization]    
						FinOSLiveness.shared.setConfig(config: config) 
						

Call function Liveness Check from SDK

FinOSLiveness.shared.start { [weak self] response in
							//TODO: Handle error and response
							//Example
							if response?["error"] == nil {
								// let result = response["apiResult"] as? [String: Any]
								self?.faceImageUri = response?["imageCompressedUri"] as? String ?? ""
								self?.originalFaceImageUri = response?["imageOriginalUri"] as? String ?? ""
								//TODO: Display faceImageUri
							} else {
								let error = (response["error"] as? [String: Any] ?? [:]
								let message = error["message"] as? String ?? ""
								let errorCode = error["code"] as? Int
								//TODO: Display message
							} 
						} 
						

Table Of Func Customization

Screen Name Func Description Note
Face Detect Screen func setFaceCaptureButtonBackTintColor(color: String) Set color of button back Default: #FFFFFF
func setLivenessMode(livenessMode: FinOSEkycLivenessMode) Supported 2 mode : Active (Require user actions to detect liveness) - Passive (capture selfie and send to server process detection)
func setFaceCaptureAPIHeaders(Map? headers) Add headers paramters to API [X-FinOS-Api-Key] is param for authorization
func setFaceCaptureAPIParams(Map? params) Set parameters in payload of API
func setFaceCaptureAppBarColor(color: String) Set color of app bar Default : #242828
func setFaceCaptureTitle(title: String) Set text title Default: Face Detection
func setFaceCaptureTitleTextColor(color: String) Set text color of title Default: #FFFFFF
func setFaceCaptureTitleTextSize(size: float) Set font size of text title Default: 20f
func setFaceCaptureProgressTrackColor(color: String) Set color of progress track Default: #FFFFFF
func setFaceCaptureProgressIndicatorColor(color: String) Set color of progress indicator Default: #E7332D
func setFaceCaptureActionStraight(text: String) Set text of action look straight Default: Look straight
func setFaceCaptureActionSmile(text: String) Set text of action smile Default: Smile!
func setFaceCaptureActionLeft(text: String) Set text of action turn left Default: Turn left
func setFaceCaptureActionRight(text: String) Set text of action turn right Default: Turn right
func setFaceCaptureActionUp(text: String) Set text of action head up Default: Head up
func setFaceCaptureActionDown(text: String) Set text of action head down Default: Head down
func setFaceCaptureActionFaceInCenter(text: String) Set text guide move face in the center of circle Default: Please move your face in the center of the frame
func setFaceCaptureActionCaptureNow(text: String) Set text of capture action Default: Capture Now
func setFaceCaptureActionTextColor(color: String) Set text color of capture action Default: #FFFFFF
func setFaceCaptureActionTextSize(size: float) Set font size of text capture action Default: 17f
func setFaceCaptureButtonCaptureTintColor(color: String) Set color of button capture Default: #0091F2
func setFaceCaptureButtonSwitchCameraTintColor(color: String) Set color of button switch camera Default: #FFFFFF
func setShouldShowSwitchCameraButton(enable: Boolean) Allow showing button switch camera Default : false
func setFaceCaptureCameraSide(cameraSide: CameraSide) Set uses camera back or front camera Default : front
func setShouldShowReviewScreen(shouldShowReviewScreen: Boolean) Allow showing review screen Default : false
func setShouldShowInstructionScreen(shouldShowInstructionScreen: Boolean) Allow showing instruction screen Default : false
func setImageCompressRatio(ratio: Float) Set image compress ratio range 0…1 Default : 0.5
Review Screen func setFaceCaptureReviewButtonBackTintColor(color: String) Set color of button back Default: #000000
func setFaceCaptureReviewAppBarColor(color: String) Set color of app bar Default: #FFFFFF
func setFaceCaptureReviewTitle(title: String) Set text title Default : Review
func setFaceCaptureReviewTitleTextColor(color: String) Set text color of text title Default: #000000
func setFaceCaptureReviewTitleTextSize(size: float) Set font size of text title Default 20
func setFaceCaptureReviewDescription(text: String) Set text of description Default : “”
func setFaceCaptureReviewDescriptionTextColor(color: String) Set text color of description Default : #000000
func setFaceCaptureReviewDescriptionTextSize(size: float) Set font size of description Default: 17
func setFaceCaptureReviewButtonRetake(text: String) Set text of button retake Default: Retake
func setFaceCaptureReviewButtonRetakeColor(color: String) Set color of button retake Default: #FFFFFF
func setFaceCaptureReviewButtonRetakeTextColor(color: String) Set text color of button retake Default : #000000
func setFaceCaptureReviewButtonRetakeTextSize(size: float) Set font size of text button retake Default 17
func setFaceCaptureReviewButtonContinue(text: String) Set text of button continue Default : Continue
func setFaceCaptureReviewButtonContinueColor(color: String) Set color of button continue Default : #0091F2
func setFaceCaptureReviewButtonContinueTextColor(color: String) Set text color of button continue Default: #FFFFFF
func setFaceCaptureReviewButtonContinueTextSize(size: float) Set font size of text button continue Default: 17
Loading Screen func setFaceLoadingButtonBackTintColor(color: String) Set color of button back Default: #000000
func setFaceLoadingTitle(text: String) Set text title Default : Face Loading
func setFaceLoadingTitleTextColor(color: String) Set text color of title Default : #000000
func setFaceLoadingTitleTextSize(size: float) Set font size of title Default : 17
func setFaceLoadingDescription(text: String) Set text of description Default : Face Loading Desc
func setFaceLoadingDescriptionTextColor(color: String) Set text color of description Default : #000000
func setFaceLoadingDescriptionTextSize(size: float) Set font size of text description Default : 17
func setCustomLoading(view: View) Set customize loading Android is fragment
func setFaceInstructionAppBarColor(color: String) Set color of app bar Default: #FFFFFF
func setFaceInstructionTitle(text: String) Set text of title Default: Face Recognition
func setFaceInstructionTitleTextColor(color: String) Set text color of title Default: #000000
func setFaceInstructionTitleTextSize(size: float) Set font size of text title Default: 20
func setFaceInstructionButtonContinue(text: String) Set text of button continue Default: Process
func setFaceInstructionButtonContinueColor(color: String) Set color of button continue Default: #0091F2
func setFaceInstructionButtonContinueTextColor(color: String) Set text color of button continue Default: #FFFFFF
func setFaceInstructionButtonContinueTextSize(size: float) Set font size of text button continue Default: 17
func setCustomInstruction(view: View) Change content of instruction
func setFaceInstructionButtonBackTintColor(color: String) Set color of button back Default: #000000
func start(callback: Callback) start face capture

Flutter

This is integration guide document for Flutter as a part of eKYC service provided by FinOS Technology VN.
Document version : v1.0.0
SDK version : v4

SDK Setup

1. Environment Required

  • Flutter 3.0 or later
  • Your project must target Dart 2.17 or later

2. Installation

Setup Android

Setup in gradle on project level

maven {  
										url = 's3://finos.mvnrepository-dev'  
										credentials(AwsCredentials) {  
											accessKey aws_access_key  
											secretKey aws_secret_pass }  
										}  
									} 
									

NOTE

  • Make sure that the minimum SDK version is 21 or higher
  • Enable multidex
  • Setting aws_access_key and aws_secret_pass in gradle.properties or hard code at credentials configs
  • In case android studio latest version, put config above in dependencyResolutionManagement on settings.gradle
    -In case android studio version < Chipmunk version, put config above in allprojects on build.gradle
  • Proguard:
    -keep class finos.mobile.android.ekyc_v4** { ; }
    -keep class com.finos.mobile.android.ekyc_v4.liveness
    * { *; }

Setup iOS

Prerequisite

  • XCode 12
  • iOS version 11
  • Required AWS
  • 
    										
    sudo gem install bundler
    sudo gem install aws-sdk-s3
    sudo gem install aws-sdk
  • Add Camera Permissions :
    • To request the user for camera permissions, add this key-value pair in your application’s Info.plist file.
    • Key : Privacy - Camera Usage Description
    • Value : “Access to camera is needed for document and face capture”

Setup Flutter

Open pubspec.xml on level project, add config dependencies in repositories

finos_flutter_mobile_ekyc_v4_sdk:
									git
										url: https://oauth2:[Token]@git.devops.finos.asia/v1/flutter/libraries/ finos.flutter.mobile.ekyc_v4.fplugin.git
										ref: v1.0.0
									
Add the import statement in all files using the sdk:
import 'package:finos_flutter_mobile_ekyc_v4_core/finos_ekyc_common.dart'; 
									import 'package:finos_flutter_mobile_ekyc_v4_ocr_plugin/finos_flutter_mobile_ekyc_v4_ocr_plugin_sdk.dart'; 
									import 'package:finos_flutter_mobile_ekyc_v4_network_plugin/finos_flutter_mobile_ekyc_v4_network_plugin_sdk.dart'; 
									import 'package:finos_flutter_mobile_ekyc_v4_liveness_plugin/finos_flutter_mobile_ekyc_v4_liveness_plugin_liveness_sdk.dart'; 
									

Use OCR Feature

Define configuration

FinOSEycNetworkHelper.instance.initialize({'environment': FinOSEkycEnvironment.sandbox.toString()});
						FinOSDocsCapture.instance.initialize();
						FinOSDocsCapture.instance.setDocCaptureTitle("Capture Id card");
						FinOSDocsCapture.instance.setDocCaptureAPIHeaders({"X-FinOS-Api-Key": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx" }); 
						... [Ref to Table of Func Customization]
						

Call function OCR from SDK

final start = await FinOSDocsCapture.instance.start();
						

Table Of Func Customization

Screen Name Func Description Note
Capture Doc Screen setDocumentType(documentType: FinOSEkycDocumentType) Define type of document to extract data
setDocumentSide(documentSide: FinOSEkycDocumentSide) Set side of document to extract data
setDocCaptureAPIHeaders(Map? headers) Add headers paramters to API [X-FinOS-Api-Key] is param for authorization
setDocCaptureAPIParams(Map? params) Set parameters in payload of API
setShouldShowFlashIcon(shouldShowFlashIcon: Boolean) Allow showing flash icon Data type : Boolean (Default : false)
setDocCaptureButtonFlashTintColor(color: String) Set color of button flash Default : #0091F2
setDocCaptureAppBarColor(color: String) Set color if app bar
setDocCaptureTitle(title: String) Set text title Default is ID Front Side/ID Back Side it’s depends on document type
setDocCaptureTitleTextColor(color: String) Set text color of title Default : #ffffffff
setDocCaptureTitleTextSize(size: float) Set font size of text title Default is style TextViewHeader 20f
setDocCaptureDescription(description: String) Set text of description Default : Please place the front side of ID card in the center/Please place the back side of ID card in the center
setDocCaptureDescriptionTextColor(color: String) Set text color of description Default : #ffffffff
setDocCaptureDescriptionTextSize(size: float) Set font size of text description Default is style TextViewSubtitle 17f
setDocCaptureButtonCaptureTintColor(color: String) Set color of button capture Default : #ffffffff
setDocCaptureButtonSwitchCameraTintColor(color: String) Set color of button switch camera Default : #ffffffff
setShouldShowSwitchCameraButton(enable: Boolean) Allow showing switch camera button Default : false
setDocCaptureCameraSide(cameraSide: CameraSide) Set camera side Front/Back Default : Back
setShouldShowReviewScreen(shouldShowReviewScreen: Boolean) Allow showing review screen Default : false
setShouldShowInstructionScreen(shouldShowInstructionScreen: Boolean) Allow showing instruction screen Default : false
start(callback: Callback) Start OCR document (open capture doc screen)
setImageCompressRatio(ratio: Float) Set compress ratio for image before sending to server Range 0 -> 1 (Default 0.5)
Review Screen setDocReviewButtonBackTintColor(color: String)
setDocReviewAppBarColor(color: String)
setDocReviewTitle(title: String) Set text for title of screen Default : Review Your Document
setDocReviewTitleTextColor(color: String) Set color for text title Default : #000000
setDocReviewTitleTextSize(size: float) Set font size of text title Default : 20f
setDocReviewDescription(description: String) Set text for description Default : Make sure the lighting is good and letters are clearly visible.
setDocReviewDescriptionTextColor(color: String) Set color for text description Default : #000000
setDocReviewDescriptionTextSize(size: float) Set font size for text description Default : 17f
setDocReviewButtonRetake(text: String) Set text for button retake Default : Retake
setDocReviewButtonRetakeColor(color: String) Set border of button retake Default : #0091F2
setDocReviewButtonRetakeTextColor(color: String) Set text color of button retake Default : #0091F2
setDocReviewButtonRetakeTextSize(size: float) Set font size text of button retake Default : 20f
setDocReviewButtonContinue(text: String) Set text of button continue Default : Continue
setDocReviewButtonContinueColor(color: String Set color of button continue Default : #0091F2
setDocReviewButtonContinueTextColor(color: String) Set text color of button continue Default : #ffffffff
setDocReviewButtonContinueTextSize(size: float) Set font size text of button continue Default : 20f
Loading screen setDocLoadingButtonBackTintColor(color: String) Set color of button back Default: #000000
setDocLoadingTitle(text: String) Set text title Default : Uploading your photos
setDocLoadingTitleTextColor(color: String) Set text color for title Default :#000000
setDocLoadingTitleTextSize(size: float) Set font size text for title Default : 20f
setDocLoadingDescription(text: String) Set text of description Default : This may take a few seconds, please wait
setDocLoadingDescriptionTextColor(color: String) Set text color of description Default : #000000
setDocLoadingDescriptionTextSize(size: float) Set font size text of description Default : 17f
setCustomLoading(view: View) Set a customize view of loading Android is fragment
Instruction Screen setDocInstructionButtonBackTintColor(color: String) Set color for button back Default: #000000
setDocInstructionAppBarColor(color: String)
setDocInstructionTitle(title: String) Set text title Default: ID Capture Tips
setDocInstructionTitleTextColor(color: String) Set text color for title Default : #000000
setDocInstructionTitleTextSize(size: float) Set font size for text title Default: 20f
setDocInstructionButtonContinue(text: String) Set text of button continue Default : Process
setDocInstructionButtonContinueColor(color: String) Set color of button continue Default : #0091F2
setDocInstructionButtonContinueTextColor(color: String) Set text color of button continue Default : #ffffffff
setDocInstructionButtonContinueTextSize(size: float) Set font size text of button continue Default : 20f
setCustomInstruction(view: View) Change content of instruction

Use Face Comparison Feature

Define configuration

FinOSEycNetworkHelper.instance.initialize({
							'environment': FinOSEkycEnvironment.sandbox.toString()
						});
						

Call function Face Compare from SDK

final result = await FinOSEycNetworkHelper.instance.makeFaceMatchCall(
							  faceUri: MyApp.faceUri,
							  documentUri: MyApp.documentUri,
							  parameters: params,
							  headers: headers);
						

Parameters

Param Description
faceUri URI of face image
documentUri URI of document image
parameters Parameter of Payload
headers Parameter of header. Supported : X-FinOS-Api-Key (Authorization key provided by FinOS) - transactionId (unique value, presentative of transaction eKYC)

Use Liveness Check Feature

Define configuration

FinOSEycNetworkHelper.instance.initialize({'environment': FinOSEkycEnvironment.sandbox.toString()});
						FinOSFaceCapture.instance.initialize();
						FinOSFaceCapture.instance.setFaceCaptureAPIHeaders({"X-FinOS-Api-Key": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx"});
						... [Ref to Table of Func Customization]
						

Table Of Func Customization

Screen Name Func Description Note
Face Detect Screen setFaceCaptureButtonBackTintColor(color: String) Set color of button back Default: #FFFFFF
setLivenessMode(livenessMode: FinOSEkycLivenessMode) Supported 2 mode : Active (Require user actions to detect liveness) - Passive (capture selfie and send to server process detection)
setFaceCaptureAPIHeaders(Map? headers) Add headers paramters to API [X-FinOS-Api-Key] is param for authorization
setFaceCaptureAPIParams(Map? params) Set parameters in payload of API
setFaceCaptureAppBarColor(color: String) Set color of app bar Default : #242828
setFaceCaptureTitle(title: String) Set text title Default: Face Detection
setFaceCaptureTitleTextColor(color: String) Set text color of title Default: #FFFFFF
setFaceCaptureTitleTextSize(size: float) Set font size of text title Default: 20f
setFaceCaptureProgressTrackColor(color: String) Set color of progress track Default: #FFFFFF
setFaceCaptureProgressIndicatorColor(color: String) Set color of progress indicator Default: #E7332D
setFaceCaptureActionStraight(text: String) Set text of action look straight Default: Look straight
setFaceCaptureActionSmile(text: String) Set text of action smile Default: Smile!
setFaceCaptureActionLeft(text: String) Set text of action turn left Default: Turn left
setFaceCaptureActionRight(text: String) Set text of action turn right Default: Turn right
setFaceCaptureActionUp(text: String) Set text of action head up Default: Head up
setFaceCaptureActionDown(text: String) Set text of action head down Default: Head down
setFaceCaptureActionFaceInCenter(text: String) Set text guide move face in the center of circle Default: Please move your face in the center of the frame
setFaceCaptureActionCaptureNow(text: String) Set text of capture action Default: Capture Now
setFaceCaptureActionTextColor(color: String) Set text color of capture action Default: #FFFFFF
setFaceCaptureActionTextSize(size: float) Set font size of text capture action Default: 17f
setFaceCaptureButtonCaptureTintColor(color: String) Set color of button capture Default: #0091F2
setFaceCaptureButtonSwitchCameraTintColor(color: String) Set color of button switch camera Default: #FFFFFF
setShouldShowSwitchCameraButton(enable: Boolean) Allow showing button switch camera Default : false
setFaceCaptureCameraSide(cameraSide: CameraSide) Set uses camera back or front camera Default : front
setShouldShowReviewScreen(shouldShowReviewScreen: Boolean) Allow showing review screen Default : false
setShouldShowInstructionScreen(shouldShowInstructionScreen: Boolean) Allow showing instruction screen Default : false
setImageCompressRatio(ratio: Float) Set image compress ratio range 0…1 Default : 0.5
Review Screen setFaceCaptureReviewButtonBackTintColor(color: String) Set color of button back Default: #000000
setFaceCaptureReviewAppBarColor(color: String) Set color of app bar Default: #FFFFFF
setFaceCaptureReviewTitle(title: String) Set text title Default : Review
setFaceCaptureReviewTitleTextColor(color: String) Set text color of text title Default: #000000
setFaceCaptureReviewTitleTextSize(size: float) Set font size of text title Default 20
setFaceCaptureReviewDescription(text: String) Set text of description Default : “”
setFaceCaptureReviewDescriptionTextColor(color: String) Set text color of description Default : #000000
setFaceCaptureReviewDescriptionTextSize(size: float) Set font size of description Default: 17
setFaceCaptureReviewButtonRetake(text: String) Set text of button retake Default: Retake
setFaceCaptureReviewButtonRetakeColor(color: String) Set color of button retake Default: #FFFFFF
setFaceCaptureReviewButtonRetakeTextColor(color: String) Set text color of button retake Default : #000000
setFaceCaptureReviewButtonRetakeTextSize(size: float) Set font size of text button retake Default 17
setFaceCaptureReviewButtonContinue(text: String) Set text of button continue Default : Continue
setFaceCaptureReviewButtonContinueColor(color: String) Set color of button continue Default : #0091F2
setFaceCaptureReviewButtonContinueTextColor(color: String) Set text color of button continue Default: #FFFFFF
setFaceCaptureReviewButtonContinueTextSize(size: float) Set font size of text button continue Default: 17
Loading Screen setFaceLoadingButtonBackTintColor(color: String) Set color of button back Default: #000000
setFaceLoadingTitle(text: String) Set text title Default : Face Loading
setFaceLoadingTitleTextColor(color: String) Set text color of title Default : #000000
setFaceLoadingTitleTextSize(size: float) Set font size of title Default : 17
setFaceLoadingDescription(text: String) Set text of description Default : Face Loading Desc
setFaceLoadingDescriptionTextColor(color: String) Set text color of description Default : #000000
setFaceLoadingDescriptionTextSize(size: float) Set font size of text description Default : 17
setCustomLoading(view: View) Set customize loading Android is fragment
setFaceInstructionAppBarColor(color: String) Set color of app bar Default: #FFFFFF
setFaceInstructionTitle(text: String) Set text of title Default: Face Recognition
setFaceInstructionTitleTextColor(color: String) Set text color of title Default: #000000
setFaceInstructionTitleTextSize(size: float) Set font size of text title Default: 20
setFaceInstructionButtonContinue(text: String) Set text of button continue Default: Process
setFaceInstructionButtonContinueColor(color: String) Set color of button continue Default: #0091F2
setFaceInstructionButtonContinueTextColor(color: String) Set text color of button continue Default: #FFFFFF
setFaceInstructionButtonContinueTextSize(size: float) Set font size of text button continue Default: 17
setCustomInstruction(view: View) Change content of instruction
setFaceInstructionButtonBackTintColor(color: String) Set color of button back Default: #000000
start(callback: Callback) start face capture

Result Object

Object Returned

Field Name Description
apiResult JSONObject response from OCR extracted fields data. Ref to [[apiResult] JSON example] for more details
imageCompressedUri URI of compressed image (device storage)
imageOriginalUri URI of original image (device storage)
error Error occured
[apiResult] JSON example
{
							"status": "success",
							"statusCode": "200",
							"result": {
								"details": [
									{
										"fieldsExtracted": {
											"province": {
												"value": "TỈNH HÀ NAM",
												"to-be-reviewed": "no"
											},
											"idNumber": {
												"value": "035197824382",
												"to-be-reviewed": "no"
											},
											"name": {
												"value": "HOÀNG THANH HẢI",
												"to-be-reviewed": "no"
											},
											"dob": {
												"value": "25-03-1997",
												"to-be-reviewed": "no"
											},
											"homeTown": {
												"value": "THÔN VỸ KHÁCH, LIÊM TÚC, THANH LIÊM, HÀ NAM",
												"to-be-reviewed": "no"
											},
											"permanentAddress": {
												"value": "LIÊM TÚC, THANH LIÊM, HÀ NAM",
												"province": "TỈNH HÀ NAM",
												"ward": "XÃ LIÊM TÚC",
												"district": "HUYỆN THANH LIÊM",
												"street": null,
												"to-be-reviewed": "no"
											},
											"gender": {
												"value": "F",
												"to-be-reviewed": "no"
											},
											"doi": {
												"value": "",
												"to-be-reviewed": "yes"
											},
											"doe": {
												"value": "25-03-2022",
												"to-be-reviewed": "no"
											},
											"nationality": {
												"value": "Việt Nam",
												"to-be-reviewed": "no"
											}
										},
										"qualityChecks": {
											"faceNotDetected": {
												"value": "no",
												"to-be-reviewed": "no"
											},
											"blur": {
												"value": "no",
												"to-be-reviewed": "no"
											},
											"glare": {
												"value": "no",
												"to-be-reviewed": "no"
											},
											"partialID": {
												"value": "no",
												"to-be-reviewed": "no"
											},
											"blackAndWhite": {
												"value": "no",
												"to-be-reviewed": "no"
											},
											"capturedFromScreen": {
												"value": "no",
												"to-be-reviewed": "no"
											},
											"cornerCut": {
												"value": "no",
												"to-be-reviewed": "no"
											}
										},
										"ruleChecks": {
											"idProvinceCodeInvalid": {
												"value": "no",
												"to-be-reviewed": "no"
											},
											"idDOBGenderCodeInvalid": {
												"value": "no",
												"to-be-reviewed": "no"
											},
											"expiredID": {
												"daysToExpiry": -42,
												"value": "yes"
											},
											"idNumberLengthMismatch": {
												"value": "no",
												"to-be-reviewed": "no"
											}
										},
										"tamperChecks": {
											"idNumberTampered": {
												"value": "no",
												"to-be-reviewed": "no"
											},
											"dobTampered": {
												"value": "no",
												"to-be-reviewed": "no"
											},
											"photoTampered": {
												"value": "no",
												"to-be-reviewed": "no"
											}
										},
										"type": "cccd_front"
									}
								],
								"summary": {
									"action": "manualReview",
									"details": [
										{
											"code": "061",
											"message": "National ID expired"
										}
									]
								}
							},
							"requestId": "1651715823842-ec68866d-a796-4b4d-b82b-9fc3ab4285ab",
							"transactionId": "test-postman"
						}
						

HTTP Code

Error Code Description Explanation Action
400 Invalid Request Something is wrong with the input Check the error message/API documentation
401 Authentication Error Credentials provided in the initialisation step are wrong Check credentials. If they seem correct, contact FinOS
404 Endpoint not found Endpoint sent to makeFaceMatchCall or makeOCRCall is not correct Check API documentation
422 Ocr fail ID not detected Check api document
423 No supported KYC document found Happens only in makeOCRCall Capture again with the correct document and ensure good image quality
429 Rate limit exceeded Happens when the number of API calls per minute has exceeded the rate limit Contact FinOS to revise the rate limit
501, 502 Server Error Internal server error has occurred Notify FinOS
503 Server Busy All API Calls Notify FinOS

FinOSError

Error Code at FinOSEkycError/FinOSError

Error Code Error Message Description
2 Internal SDK Error Occurs when an unexpected error has happened with the SDK
3 Operation Cancelled By User When the user taps on cancel button in capture page
4 Camera Permission Denied Occurs when the user has denied permission to access camera
5 Hardware Error Occurs when camera could not be initialised
6 Input Error Occurs when the input needed by the start method is not correct
11 Initialization Error Occurs when SDK has not been initialised properly
12 Network Error Occurs when the internet is either non-existent or very patchy
14 Internal Server Error Occurs when there is an error at the server
15 SSL Timeout Error Occurs when there is slow internet, or the certificate validation fails
22 Face Detection Error Occurs when a face couldn’t be detected in an image by the server
23 Face not clear Occurs when face captured is blurry
31 Instructions Module Not Included Occurs when setShouldShowInstructionPage is set to true but the instructions module is excluded in gradle