Customização
Essa página apresenta um guia para customização de layout nos SDK's iOS. O guia utiliza como exemplo a DocumentDetector
. A abordagem por Storyboard e xibs foi descontinuada, mas, caso queira acessar a documentação, clique aqui.
Customização de View
- Crie uma classe
YourClass.swift
e extenda deDocumentOverlayView
,PassiveOverlayView
ouFaceAuthOverlayView
. - Sobrescreva o método
init()
e realize a chamada ao construtor da classe pai:
class YourClass: DocumentOverlayView {
override init() {
super.init()
}
}
Na classe
DocumentOverlayView
(ou do SDK correspondente), é possível ter acesso a:frame: CGRect
, com as dimensões da tela do dispositivo;viewController: DocumentDetectorViewController?
, para chamadas aos métodos do SDK.
Agora, construa seus elementos utilizando a abordagem ViewCode. Para adicionar um elemento na view, utilize o método
self.addSubview(_ UIView)
:
class YourClass: DocumentOverlayView {
override init() {
super.init()
let example = UIView()
example.backgroundColor = UIColor.white
example.layer.cornerRadius = 8
self.addSubview(self.example)
}
}
5. Para obter atualizações de UI, como mudanças de status, visibilidade de botões e máscaras, por exemplo, sobrescreva os métodos abaixo:
class YourClass: DocumentOverlayView {
...
// MARK: - Métodos de estado
public override func loading(status: Bool){
// Indica o estado de "loading".
// A variável 'status' será 'true' de acordo com a abertura do SDK, captura de imagem, requisições para o backend...
}
public override func readyToCapture(status: Bool){
// Indica que o SDK está pronto para realizar a captura, após realizar todas as validações de sensores, enquadramento, face, etc
}
public override func stepDoneSuccessfully(status: Bool){
// Indica que o step de captura finalizou com sucesso
}
public override func validationFailure(status: Bool, id: ValidationFailure?){
// A variável 'status' indica se há alguma falha nas verificações de sensores, qualidade, enquandramento, distância da face, etc.
// A maioria das falhas de validação geram o status de "máscara de erro"
// A variável 'id' indica qual é o tipo de erro que ocorreu. Consulte a tabela abaixo
}
public override func captureMode(status: CaptureMode){
// Indica o modo de captura habilitado. Pode variar entre AUTOMATIC e MANUAL
}
public override func mask(status: Mask, visibility: Bool){
// A variável 'visibility' indica a visibilidade da máscara
if(visibility){
switch type {
case .normal:
// Apresente a máscara de estado normal
break
case .success:
// Apresente a máscara de sucesso
break
case .error:
// Apresente a máscara de erro
break
default:
// Apresente a máscara de estado normal
break;
}
}
}
// MARK: - Métodos de visibilidade
// Disponível apenas para DocumentDetector
public override func popup(visibility: Bool){
// Indica a visibilidade do popup de inicialização de step
}
public override func manualCaptureButton(visibility: Bool){
// Indica a visibilidade do botão de captura manual
}
// Disponível apenas para DocumentDetector e PassiveFaceLiveness
public override func preview(visibility: Bool){
// Indica a visibilidade da tela de Preview (pós captura)
}
public override func status(message: String, visibility: Bool) {
// Utilize para indicar a mensagem que deve ser exibida conforme os estados do SDK
}
public override func currentStep(name: String){
// Indica o nome do step atual
}
// MARK: - Métodos depreciados. Não recomendamos o uso pois em versões futuras serão removidos
public override func show(loading show: Bool) {
// Utilize para indicar estado de "loading"
}
public override func show(message text: String) {
// Apresente as mensagens ao usuário
}
open func show(stepName text: String) {
// Indica o nome do step atual
}
public override func show(mask type: Mask) {
switch type {
case .normal:
// Apresente a máscara de estado normal
break
case .success:
// Apresente a máscara de sucesso
break
case .error:
// Apresente a máscara de erro
break
default:
// Apresente a máscara de estado normal
}
}
public override func show(manualCaptureButton hidden: Bool) {
// Apresente ou desabilite o botão de captura manual
}
public override func setCurrentAction(text: String, checked: Bool){
// Apresente o step atual com o atributo `text`
}
public override func setLastAction(text: String){
// O atributo `text` retorna o último step realizado. Pode ser utilizado para apresentar as etapas de captura já realizadas.
}
}
6. Para implementação do botão de fechar, o método cancelButtonClick
deve ser chamado. Esse método aciona o delegate documentDetectorControllerDidCancel
e cancela a captura:
@objc func closeButtonClick(sender: UIButton!) {
self.viewController.cancelButtonClick()
}
7. Para o botão de captura manual, o método clickButtonManualCapture
deve ser chamado:
@objc func manualButtonClick(sender: UIButton!) {
self.viewController?.clickButtonManualCapture()
}
8. Por fim, em DocumentDetector.Builder
utilize o método, .setOverlay(overlay: DocumentOverlayView)
.
ValidationFailure
Cada SDK contém uma série de erros de validação que podem ocorrer enquanto são executados. Esses estados na maioria geram o estado de "máscara de erro" e impedem que a captura seja realizada:
Erro | Descrição | SDK |
---|---|---|
SENSOR_LUMINOSITY_FAILURE | Sensor de luminosidade. O ambiente está muito escuro | DocumentDetector, PassiveFaceLiveness |
SENSOR_ORIENTATION_FAILURE | Sensor de orientação. O dispositivo não está na posição correta | DocumentDetector, PassiveFaceLiveness |
SENSOR_STABILITY_FAILURE | Sensor de estabilidade. O dispositivo está em movimento | DocumentDetector, PassiveFaceLiveness, FaceAuthenticator |
FRAMING_FAILURE | Enquadramento de documento ou face | DocumentDetector, PassiveFaceLiveness, FaceAuthenticator |
FACE_NOT_FOUND | Nenhuma face foi encontrada | PassiveFaceLiveness, FaceAuthenticator |
FACE_TOO_FAR | Face muito distante. | PassiveFaceLiveness, FaceAuthenticator |
MULTIPLE_FACES_FAILURE | Múltiplas faces detectadas. | PassiveFaceLiveness, FaceAuthenticator |
QUALITY_FAILURE | Qualidade da captura do documento está muito baixa. | DocumentDetector |
LIVENESS_FAILURE | Erro na prova de vida. É uma provável tentativa de fraude | PassiveFaceLiveness, FaceAuthenticator |
Exemplo
Em breve.