Comment on page
Customization
This page presents a guide to layout customization in the iOS SDKs. The guide uses DocumentDetector as an example.
The Storyboard and xibs approach has been discontinued, but if you want to access the documentation, click here.
- 1.Create a
YourClass.swift
class and extend it fromDocumentOverlayView
,PassiveOverlayView
orFaceAuthOverlayView
. - 2.Override the
init()
method and call the constructor of the parent class:
class YourClass: DocumentOverlayView {
override init() {
super.init()
}
}r
3. In the
DocumentOverlayView
class (or the corresponding SDK), you can access:frame
:CGRect
, with the dimensions of the device screen;viewController
:DocumentDetectorViewController?
, for calling SDK methods.
4. Now build your elements using the ViewCode approach. To add an element to the view, use the
self.addSubview(_ UIView)
method:class YourClass: DocumentOverlayView {
override init() {
super.init()
let example = UIView()
example.backgroundColor = UIColor.white
example.layer.cornerRadius = 8
self.addSubview(self.example)
}
}
5. To get UI updates, such as status changes, button visibility and masks, for example, override the methods below:
class YourClass: DocumentOverlayView {
...
// MARK: - State methods
public override func loading(status: Bool){
//Indicates the "loading" status.
// The 'status' variable will be 'true' according to the SDK opening, image capture, requests to the backend...
}
public override func readyToCapture(status: Bool){
// indicates that the SDK is ready to capture, after performing all validations of sensors, framing, face, etc. }
public override func stepDoneSuccessfully(status: Bool){
//Indicates that the capture step ended successfully
}
public override func validationFailure(status: Bool, id: ValidationFailure?){
// The 'status' variable indicates whether there are any failures in the sensor checks, quality, framing, face distance, etc.
// Most validation failures generate the "error mask" status
// The variable 'id' indicates what type of error occurred. See the table below
}
public override func captureMode(status: CaptureMode){
// Indicates the capture mode enabled. May vary between AUTOMATIC and MANUAL
}
public override func mask(status: Mask, visibility: Bool){
// The variable 'visibility' indicates the visibility of the mask
if(visibility){
switch type {
case .normal:
// Display the normal state mask
break
case .success:
// Present the mask of success
break
case .error:
// Display the error mask
break
default:
// Display the normal state mask
break;
}
}
}
// MARK: - Visibility methods
// Only available for DocumentDetector
public override func popup(visibility: Bool){
// Indicates the visibility of the step initialization popup
}
public override func manualCaptureButton(visibility: Bool){
// Indicates visibility of the manual capture button
}
// Only available for DocumentDetector and PassiveFaceLiveness
public override func preview(visibility: Bool){
// Indicates the visibility of the Preview (post-capture) screen
}
public override func status(message: String, visibility: Bool) {
// Use to indicate the message that should be displayed according to the states of the SDK
}
public override func currentStep(name: String){
// Indicates the name of the current step
}
// MARK: - Deprecated methods. We do not recommend using them because in future versions they will be removed
public override func show(loading show: Bool) {
// Use to indicate "loading" state
}
public override func show(message text: String) {
// Present the messages to the user
}
open func show(stepName text: String) {
// Indicates the name of the current step
}
public override func show(mask type: Mask) {
switch type {
case .normal:
// Display the normal state mask
break
case .success:
// Present the mask of success
break
case .error:
// Display the error mask
break
default:
// Display the normal state mask
break;
}
}
public override func show(manualCaptureButton hidden: Bool) {
// Show or disable the manual capture button
}
public override func setCurrentAction(text: String, checked: Bool){
// Present the current step with the `text' attribute
}
public override func setLastAction(text: String){
// The `text` attribute returns the last step taken. It can be used to display the capture steps already performed.
}
}
6. For implementation of the close button, the
cancelButtonClick
method must be called. This method triggers the documentDetectorControllerDidCancel
delegate and cancels the capture:@objc func closeButtonClick(sender: UIButton!) {
self.viewController.cancelButtonClick()
}
7. For the manual capture button, the
clickButtonManualCapture
method should be called:@objc func manualButtonClick(sender: UIButton!) {
self.viewController?.clickButtonManualCapture()
}
8. Finally, in
DocumentDetector.Builder
use the method, .setOverlay(overlay: DocumentOverlayView)
.
Each SDK contains a number of validation errors that can occur while running. These mostly generate the "error mask" state and prevent the capture from being performed:
Error | Description | SDK |
SENSOR_LUMINOSITY_FAILURE | Brightness sensor. The environment is too dark | DocumentDetector, PassiveFaceLiveness |
SENSOR_ORIENTATION_FAILURE | Orientation sensor. Device is not in the correct position | DocumentDetector, PassiveFaceLiveness |
SENSOR_STABILITY_FAILURE | Stability sensor. The device is in motion | DocumentDetector, PassiveFaceLiveness, FaceAuthenticator |
FRAMING_FAILURE | Document or face framing | DocumentDetector, PassiveFaceLiveness, FaceAuthenticator |
FACE_NOT_FOUND | No face was found | PassiveFaceLiveness, FaceAuthenticator |
FACE_TOO_FAR | Very distant face. | PassiveFaceLiveness, FaceAuthenticator |
MULTIPLE_FACES_FAILURE | Multiple faces detected. | PassiveFaceLiveness, FaceAuthenticator |
QUALITY_FAILURE | Quality of the document capture is too low. | DocumentDetector |
LIVENESS_FAILURE | Error in the proof of life. It is a probable fraud attempt | PassiveFaceLiveness, FaceAuthenticator |
Soon.
Last modified 1yr ago