Guia Detalhado de Uso
Aprofunde seu entendimento e personalize com precisão, com explicações completas que orientam cada etapa do processo.
📑 Sumário
- 📌 Visão Geral
- ✅ Requisitos de Compatibilidade
- ⚙️ Instalação
- 🔌 Criação do provedor de Liveness
4.1 ✅ Provedores Disponíveis
4.2 🧩 Provedor: IProov
4.3 🧩 Provedor: Facetec - 📦 Estrutura das Classes Importantes
5.1 Core SDK
5.2 Facetec
5.3 Iproov - 🔍 Principais Classes e Métodos de Chamada
- 📱 Fluxo de Telas
7.1 Telas Oiti
7.2 Telas iProov
7.3 Telas Facetec - 🧪 Ambiente de Testes
- 🛠️ Boas Práticas
- 📜 Changelogs e Versões
- 🔗 Links externos
📌 Visão Geral
O Certiface SDK é um SDK modular e extensível, responsável por oferecer verificação facial remota (Liveness Detection) via múltiplos provedores de biometria.
Sua arquitetura foi desenvolvida com foco em segurança, personalização e abstração de provedores, permitindo que novos fornecedores sejam incorporados no futuro com impacto mínimo na integração.
Atualmente temos suporte ao provedor IProov, mas em breve outros serão incorporados ao SDK.
✅ Requisitos de Compatibilidade
-
Target mínimo: iOS 13.0
-
Versão do Swift: 5+
-
Linguagem base: Swift (interoperável com Objective-C)
-
Gerenciador de dependência: CocoaPods
-
Ambientes suportados:
hml
: Homologaçãoprd
: Produção
⚙️ Instalação
Passo 1: Caso você não possua um arquivo Podfile
no seu projeto, basta executar o comando abaixo na raiz do projeto que um novo arquivo desse será criado:
pod init
Passo 2: No início do Podfile
, inclua a linha abaixo:
source 'https://github.com/oititec/ios-artifactory.git'
Passo 3: Em seguida, adicione as dependências necessárias:
pod 'CertifaceSDK', '~> x.y.z'
Substitua
x.y.z
pela versão mais recente fornecida pela Oiti.
Passo 4: Execute o comando de instalação dos pods:
pod install
🔌 Criação do provedor de Liveness
O CertifaceSDK
utiliza o padrão de fábrica para criar instâncias específicas de cada provedor de Liveness:
let manager = CertifaceSDKFactory.createLivenessManager(for: .iproov)
✅ Provedores Disponíveis
Provedor | Identificador Enum | Suporte |
---|---|---|
IProov | LivenessProvider.iproov | ✅ Suporte Atual |
Facetec | CertifaceSDK.LivenessProvider.facetec | 🔜 Suporte Atual |
[Novo Provedor] | em breve | 🔜 Planejado |
🧩 Provedor: IProov
Este é o provedor atualmente integrado ao SDK. Ele oferece uma jornada de verificação baseada em luz e detecção passiva.
🚀 Execução da Jornada
Após criar o LivenessManagerOptions
fornecendo a AppKey, o ambiente de execução, as telas customizadas e a customização do IProov, inicie a jornada com:
import CertifaceSDK
// MARK: - Implementação
final class ContentViewController: UIViewController {
func executeLiveness() {
let options = LivenessManagerOptions
.builder(appKey: "APP_KEY", environment: .hml)
.build()
let manager = CertifaceSDKFactory.createLivenessManager(for: .iproov)
manager.start(at: self, options: options, callback: self)
}
}
extension ContentViewController: LivenessCallback {
func onSuccess(_ result: LivenessResult) {
// Código ...
}
func onError(_ error: LivenessError) {
// Código ...
}
}
🎨 Personalização Visual
Utilize o builder da classe IProovLivenessCustomization
para configurar a interface do fluxo.
UIViews customizadas
O SDK permite customizar completamente as telas presentes na jornada (exceto a tela de Liveness), para tal é necessário que as UIViews estejam em conformidade com os protocolos destinados a cada tela:
import CertifaceSDK
// MARK: - Views customizadas
final class LivenessCustomInstructionViewImpl: UIView, LivenessCustomInstructionView {
var backButton: UIButton!
var continueButton: UIButton!
func changeLoadingVisibility(to visibility: Visibility) {
// Código ...
}
}
final class CustomCameraPermissionViewImpl: UIView, CustomCameraPermissionView {
var backButton: UIButton!
var checkPermissionButton: UIButton!
var openSettingsButton: UIButton!
var closeButton: UIButton!
func showBottomSheet(visibility: CertifaceSDK.Visibility) {
// Código ...
}
}
final class IProovCustomLoadingViewImpl: IProovCustomLoadingView {
// Código ...
}
final class IProovCustomResultViewImpl: IProovCustomResultView {
func display(for resultType: IProovResultLayoutType) {
// Código ...
}
}
// MARK: - Implementação
final class ContentViewController: UIViewController {
func executeLiveness() {
let customization = IProovCustomization.builder()
.setCustomInstructionView(LivenessCustomInstructionViewImpl())
.setCustomCameraPermissionView(CustomCameraPermissionViewImpl())
.setLoadingView(IProovCustomLoadingViewImpl())
.setResultView(IProovCustomResultViewImpl())
.build()
let options = LivenessManagerOptions
.builder(appKey: "APP_KEY", environment: .hml)
.setIProovCustomization(customization)
.build()
let manager = CertifaceSDKFactory.createLivenessManager(for: .iproov)
manager.start(at: self, options: options, callback: self)
}
}
extension ContentViewController: LivenessCallback {
func onSuccess(_ result: LivenessResult) {
// Código ...
}
func onError(_ error: LivenessError) {
// Código ...
}
}
Aparência customizada
O SDK permite customizar somente as características das telas da jornada mantendo a estrutura padrão:
import CertifaceSDK
// MARK: - Implementação
final class ContentViewController: UIViewController {
func executeLiveness() {
let customization = IProovCustomization.builder()
.setInstructionCustomization { instructionBuilder in
instructionBuilder
.setBackgroundColor(.purple)
.setBackButtonIcon(UIImage(systemName: "trash") ?? UIImage())
.setBackButtonColor(forContent: .red, background: .green, border: .white)
.setContextImage(UIImage(systemName: "person") ?? UIImage())
.setBottomSheetColor(.cyan)
.setBottomSheetCornerRadius(10)
.setTitleText("Titulo aqui", color: .brown)
.setCaptionText("Subtitulo aqui", color: .systemPink)
.setFirstInstructionIcon(UIImage(systemName: "star") ?? UIImage())
.setFirstInstructionTitleText("Descrição do ambiente", color: .darkGray)
.setSecondInstructionIcon(UIImage(systemName: "house") ?? UIImage())
.setSecondInstructionTitleText(
"Descrição para uso de accessórios",
color: .magenta
)
.setContinueButtonText("Iniciar")
.setContinueButtonColor(
forContent: .lightGray,
background: .systemPink,
border: .white
)
}
.setCameraPermissionCustomization { cameraPermissionBuilder in
cameraPermissionBuilder
.setCameraPermissionBackgroundColor(.systemPink)
.setCameraPermissionBackButtonIcon(UIImage(systemName: "pencil") ?? UIImage())
.setCameraPermissionBackButtonColors(
forIcon: .white,
background: .black,
border: .blue
)
.setCameraPermissionImage(UIImage(systemName: "person.fill"), color: .cyan)
.setCameraPermissionTitle(
withText: "Permissão de câmera customizada",
color: .white
)
.setCameraPermissionCaption(
withText: "Descrição da permissão de câmera",
color: .purple
)
.setCameraPermissionCheckPermissionButton(withText: "Averiguar")
.setCameraPermissionCheckPermissionButtonNormalStateColors(
forText: .red,
background: .blue,
border: .white
)
.setCameraPermissionBottomSheetShape(withColor: .green, cornerRadius: 0)
.setCameraPermissionBottomSheetTitle(
withText: "Hora de ir para os ajustes",
color: .blue
)
.setCameraPermissionBottomSheetCaption(
withText: "Ou será que não?",
color: .orange
)
.setCameraPermissionOpenSettingsButton(withText: "Pular para ajustes")
.setCameraPermissionOpenSettingsButtonNormalStateColors(
forText: .orange,
background: .darkGray,
border: .blue
)
.setCameraPermissionCloseButton(withText: "Fechar tudo")
.setCameraPermissionCloseButtonNormalStateColors(
forText: .magenta,
background: .cyan,
border: .red
)
}
.setLivenessCustomization { livenessBuilder in
livenessBuilder
.setBackgroundColor(.red)
.setPromptColors(forText: .green, backgroundColor: .white)
.setHeader(withText: "HEADER", textColor: .yellow, backgroundColor: .blue)
.setPromptRoundedCorners(enabled: false)
.setLAOvalStrokeColors(forCapturing: .cyan, completed: .systemPink)
.setGPAOvalStrokeColors(forNotReady: .yellow, completed: .blue)
.setFilter(withStyle: .vibrant, color: .purple, backgroundColor: .orange)
}
.setLoadingCustomization { loadingBuilder in
loadingBuilder
.setLoadingBackgroundColor(.brown)
.setLoadingSpinner(withColor: .red, width: 10.7, scaleFactor: 5)
}
.setResultCustomization { resulBuilder in
resulBuilder
.setResultBackgroundColor(.red, forResultType: .success)
.setResultImage(nil, forResultType: .success)
.setResultMessage("SUCCESS", forResultType: .success)
.setResultMessageColor(.blue, forResultType: .success)
.setResultBackgroundColor(.blue, forResultType: .error)
.setResultImage(nil, forResultType: .error)
.setResultMessage("ERROR", forResultType: .error)
.setResultMessageColor(.red, forResultType: .error)
}
.build()
let options = LivenessManagerOptions
.builder(appKey: "APP_KEY", environment: .hml)
.setIProovCustomization(customization)
.build()
let manager = OitiSDKFactory.createLivenessManager(for: .iproov)
manager.start(at: self, options: options, callback: self)
}
}
extension ContentViewController: LivenessCallback {
func onSuccess(_ result: LivenessResult) {
// Código ...
}
func onError(_ error: LivenessError) {
// Código ...
}
}
🧩 Provedor: Facetec
A FaceTec oferece um fluxo de verificação com detecção ativa (movimentos, rotação de rosto), com alta personalização visual e textual.
🚀 Execução da Jornada
import CertifaceSDK
// MARK: - Implementação
final class ContentViewController: UIViewController {
func executeLiveness() {
let options = LivenessManagerOptions
.builder(appKey: "APP_KEY", environment: .hml)
.build()
let manager = CertifaceSDKFactory.createLivenessManager(for: .facetec)
manager.start(at: self, options: options, callback: self)
}
}
extension ContentViewController: LivenessCallback {
func onSuccess(_ result: LivenessResult) {
// Código ...
}
func onError(_ error: LivenessError) {
// Código ...
}
}
🎨 Personalização Visual
Personalize a interface usando FacetecCustomization
:
Nota: Propriedades fora dos blocos configuram globalmente a Facetec; dentro dos blocos são específicas de cada tela.
import CertifaceSDK
// MARK: - Implementação
final class ContentViewController: UIViewController {
func executeLiveness() {
let customization = FacetecCustomization.builder()
.setCustomInstructionView(CustomInstructionView())
.setCustomCameraPermissionView(CustomCameraPermissionViewImpl())
.build()
let options = LivenessManagerOptions
.builder(appKey: "APP_KEY", environment: .hml)
.setFacetecCustomization(customization)
.build()
let manager = CertifaceSDKFactory.createLivenessManager(for: .facetec)
manager.start(at: self, options: options, callback: self)
}
}
extension ContentViewController: LivenessCallback {
func onSuccess(_ result: LivenessResult) {
// Código ...
}
func onError(_ error: LivenessError) {
// Código ...
}
}
Aparência customizada
import CertifaceSDK
// MARK: - Implementação
final class ContentViewController: UIViewController {
func executeLiveness() {
let customization = FacetecCustomization.builder()
.setInstructionCustomization { instructionBuilder in
instructionBuilder
.setBackgroundColor(.purple)
.setBackButtonIcon(UIImage(systemName: "trash") ?? UIImage())
.setBackButtonColor(forContent: .red, background: .green, border: .white)
.setContextImage(UIImage(systemName: "person") ?? UIImage())
.setBottomSheetColor(.cyan)
.setBottomSheetCornerRadius(10)
.setTitleText(
"Titulo aqui 2",
color: .brown
)
.setCaptionText(
"Subtitulo aqui",
color: .systemPink
)
.setFirstInstructionIcon(UIImage(systemName: "star") ?? UIImage())
.setFirstInstructionTitleText(
"Descrição do ambiente",
color: .darkGray
)
.setSecondInstructionIcon(UIImage(systemName: "house") ?? UIImage())
.setSecondInstructionTitleText(
"Descrição para uso de accessórios",
color: .magenta
)
.setContinueButtonText("Iniciar")
.setContinueButtonColor(forContent: .lightGray, background: .systemPink, border: .white)
}
.setCameraPermissionCustomization { cameraPermissionBuilder in
cameraPermissionBuilder
.setCameraPermissionBackgroundColor(.systemPink)
.setCameraPermissionBackButtonIcon(UIImage(systemName: "pencil") ?? UIImage())
.setCameraPermissionBackButtonColors(forIcon: .white, background: .black, border: .blue)
.setCameraPermissionImage(UIImage(systemName: "person.fill"), color: .cyan)
.setCameraPermissionTitle(
withText: "Permissão de câmera customizada",
color: .white
)
.setCameraPermissionCaption(
withText: "Descrição da permissão de câmera",
color: .purple
)
.setCameraPermissionCheckPermissionButton(withText: "Averiguar")
.setCameraPermissionCheckPermissionButtonNormalStateColors(
forText: .red,
background: .blue,
border: .white
)
.setCameraPermissionBottomSheetShape(withColor: .green, cornerRadius: 0)
.setCameraPermissionBottomSheetTitle(
withText: "Hora de ir para os ajustes",
color: .blue
)
.setCameraPermissionBottomSheetCaption(
withText: "Ou será que não?",
color: .orange
)
.setCameraPermissionOpenSettingsButton(withText: "Pular para ajustes")
.setCameraPermissionOpenSettingsButtonNormalStateColors(
forText: .orange,
background: .darkGray,
border: .blue
)
.setCameraPermissionCloseButton(withText: "Fechar tudo")
.setCameraPermissionCloseButtonNormalStateColors(
forText: .magenta,
background: .cyan,
border: .red
)
}
.setLoadingCustomization { loadingBuilder in
loadingBuilder
.setLoadingBackgroundColor(.brown)
.setLoadingSpinner(withColor: .red, width: 10.7, scaleFactor: 5)
}
.setLivenessDefaultTheme(customizeLivenessTheme)
.setLivenessLowLightTheme(customizeLivenessTheme)
.setLivenessTexts([
// Ready
.readyHeader1: "ready_title_1",
.readyHeader2: "ready_title_2",
.readyMessage1: "ready_message_1",
.readyMessage2: "ready_message_2.",
.readyButton: "ready_button",
// feedback
.feedbackCenterFace: "feedback_center_face",
.feedbackFaceNotFound: "feedback_no_face",
.feedbackFaceNotLookingStraightAhead: "feedback_straight_ahead",
.feedbackFaceNotUpright: "feedback_upright",
.feedbackHoldSteady: "feedback_hold",
.feedbackMovePhoneAway: "feedback_move_away",
.feedbackMovePhoneCloser: "feedback_move_closer",
.feedbackMovePhoneToEyeLevel: "feedback_move_eye_level",
.feedbackUseEvenLighting: "feedback_even_lighting",
.feedbackFrameYourFace: "feedback_start",
.feedbackPositionFaceStraightInOval: "feedback_look_forward",
.feedbackHoldSteady1: "feedback_hold_3",
.feedbackHoldSteady2: "feedback_hold_2",
.feedbackHoldSteady3: "feedback_hold_1",
.feedbackNeutralExpression: "feedback_no_smile",
.feedbackBrightenYourEnvironment: "feedback_too_dark",
.feedbackRemoveDarkGlasses: "feedback_remove_glasses",
.feedbackConditionsTooBright: "feedback_too_bright",
// Upload
.resultUploadMessage: "upload_message",
.resultSuccessMessage: "upload_all_right_message",
// Retry
.retryHeader: "retry_header",
.retrySubheader: "retry_subheader",
.retryMessageSmile: "retry_message_smile",
.retryMessageLightning: "retry_message_lighting",
.retryMessageContrast: "retry_message_contrast",
.retryYourPicture: "retry_your_image",
.retryIdealPicture: "retry_ideal_image",
.retryButton: "retry_again_button",
])
.build()
let options = LivenessManagerOptions
.builder(appKey: "APP_KEY", environment: .hml)
.setFacetecCustomization(customization)
.build()
let manager = OitiSDKFactory.createLivenessManager(for: .facetec)
manager.start(at: self, options: options, callback: self)
}
func customizeLivenessTheme(in themeBuilder: Liveness3DThemeBuilder) -> Liveness3DThemeBuilder {
// Ready
themeBuilder
.setReadyScreenHeader(color: .green, font: UIFont(name: "Jersey20-Regular", size: 20))
.setReadyScreenMessage(color: .brown, font: UIFont(name: "Jacquard24-Regular", size: 20))
.setReadyScreenTextBackground(color: .systemPink, cornerRadius: 10)
// Result
themeBuilder
.setResultScreenMessage(color: .blue, font: UIFont(name: "Jacquard24-Regular", size: 20))
.setResultScreenAnimationStyle(
.blob(appearance: BlobAnimationAppearance(
blobColor: .blue,
checkmarkForegroundColor: .purple,
checkmarkBackgroundColor: .yellow
)),
scale: 1.5
)
.setResultScreenUploadProgressBar(display: true, fillColor: .red, trackColor: .green)
// Retry
themeBuilder
.setRetryScreenHeader(color: .systemPink, font: UIFont(name: "Jersey20-Regular", size: 20))
.setRetryScreenCaption(color: .red, font: UIFont(name: "Jacquard24-Regular", size: 20))
.setRetryScreenImageBorder(color: .systemBlue, width: 10, cornerRadius: 10)
// Feedback
themeBuilder
.setFeedbackMessage(color: .systemPink, font: UIFont(name: "Jacquard24-Regular", size: 20))
.setFeedbackBar(
backgroundColor: .yellow,
cornerRadius: 10,
shadow: .init(
color: .purple,
opacity: 0.5,
radius: 3,
offset: CGSize(width: 2, height: 5),
insets: UIEdgeInsets(top: 3, left: 1.5, bottom: 3.7, right: 7.5)
)
)
// Guidance
themeBuilder
.setGuidanceFonts(
header: UIFont(name: "Jacquard24-Regular", size: 20),
subtext: UIFont(name: "Jacquard24-Regular", size: 20)
)
.setGuidanceButtonFont(UIFont(name: "Jersey20-Regular", size: 20))
.setGuidanceButtonTextColors(normal: .white, highlight: .red, disabled: .black)
.setGuidanceButtonBackgroundColors(normal: .purple, highlight: .gray, disabled: .blue)
.setGuidanceButtonBorder(color: .white, width: 10, cornerRadius: 10)
// Frame
themeBuilder
.setFrameBackgroundColor(.lightGray)
.setFrameBorder(color: .cyan, width: 14, cornerRadius: 10)
.setFrameShadow(.init(
color: .red,
opacity: 0.8,
radius: 10,
offset: CGSize(width: 10, height: 20),
insets: UIEdgeInsets(top: 3, left: 1.5, bottom: 3.7, right: 7.5)
))
// Oval
themeBuilder
.setOvalStroke(.black, width: 10)
.setOvalProgress(color1: .purple, color2: .green, width: 10, offset: 2)
// Overlay
themeBuilder
.setOverlayBrandImage(UIImage(systemName: "house") ?? UIImage())
.setOverlayBackgroundColor(.green)
// Cancel button
themeBuilder
.setCancelButton(icon: UIImage(systemName: "pencil"), location: .topRight)
return themeBuilder
}
}
extension ContentViewController: LivenessCallback {
func onSuccess(_ result: LivenessResult) {
// Código ...
}
func onError(_ error: LivenessError) {
// Código ...
}
}
📦 Estrutura das Classes Importantes
Core SDK
- CertifaceSDKFactory: Inicialização e gerenciamento.
- LivenessManagerOptions: Configuração com AppKey e ambiente.
- LivenessProvider: Enum de provedores.
- LivenessCallback: Interface de callbacks.
- LivenessResult: Resultado do liveness.
- LivenessError: Enum de erro capturado no liveness.
- LivenessManager: Gerencia o fluxo de liveness.
Facetec
- FacetecCustomization: Personalização visual do fluxo.
- FacetecCustomizationBuilder: Construtor da personalização visual do fluxo.
IProov (Provedor Específico)
- IProovCustomization: Personalização visual do fluxo.
- IProovCustomizationBuilder: Construtor da personalização visual do fluxo.
As estruturas específicas só devem ser utilizadas se o provedor selecionado for o IProov.
🔍 Principais Classes e Métodos de Chamada
Método / Classe | Descrição |
---|---|
CertifaceSDKFactory.createLivenessManager(for:) | Cria um gerenciador do provedor escolhido. |
[Provedor]Customization.builder() | Prepara a aparência do fluxo. |
LivenessManager.start(at:options:callback:) | Inicia o fluxo de captura e validação. |
LivenessCallback.onSuccess(_:) | Retorno de Sucesso. |
LivenessCallback.onError(_:) | Retorno de Erro. |
📱 Fluxo de Telas
Nesta seção você encontra informações sobre a customização das telas envolvidas nos fluxos de liveness, separadas por provedor:
Telas Oiti: Telas genéricas, reutilizadas por todos os provedores. Permitem alto nível de personalização (cores, textos, layout, etc). Telas IProov: A maior parte das telas é controlada pelo SDK do IProov, mas é possível aplicar personalizações oferecidas pelo produto. A tela de resultado é fornecida pela Oiti e pode ser customizada. Telas Facetec: As telas fazem parte do SDK da FaceTec e só podem ser personalizadas dentro dos limites oferecidos pelo próprio produto.
📱 Telas Oiti
Tela Inicial/Instruções: Tela que apresenta as instruções iniciais ao usuário antes do início do processo de verificação facial:

Nº | Métodos | Descrição | Exemplo | |
---|---|---|---|---|
1 | setBackButtonIcon(_:) | Ícone exibido no botão voltar | UIImage(named: "icon") | |
1 | setBackButtonColor(forContent:background:border:) | Define a cor do botão voltar | UIColor.red , UIColor.purple ,UIColor.blue | |
2 | setBackgroundColor(_:) | Define a cor de fundo de tela | UIColor.red | |
2 | setContextImage(_:) | Define a imagem de contexto na tela | UIImage(named: "icon") | |
3 | setTitleText(_:color:font:) | Define o título da tela de instruções | "Title" , UIColor.red , UIFont(name: "font", size: .zero) | |
4 | setFirstInstructionIcon(_:) | Define o ícone da primeira instrução | UIImage(named: "icon") | |
5 | setSecondInstructionIcon(_:) | Define o ícone da segunda instrução | UIImage(named: "icon") | |
6 | setBottomSheetColor(_:) | Define a cor do fundo da barra inferior | UIImage(named: "icon") | |
6 | setBottomSheetCornerRadius(_:) | Define o raio de canto da barra inferior | CGFloat(10) | |
7 | setCaptionText(_:color:font:) | Define o texto de legenda ou instrução adicional | "Caption" , UIColor.red , UIFont(name: "font", size: .zero) | |
8 | setFirstInstructionTitleText(_:color:font:) | Define o título da primeira instrução | "Title" , UIColor.red , UIFont(name: "font", size: .zero) | |
9 | setSecondInstructionTitleText(_:color:font:) | Define o título da segunda instrução | "Title" , UIColor.red , UIFont(name: "font", size: .zero) | |
10 | setContinueButtonText(_:font:) | Define o texto do botão de continuar | "Title" , UIFont(name: "font", size: .zero) | |
10 | setContinueButtonColor(forContent:background:border:) | Define a cor do texto do botão de continuar | UIColor.red , UIColor.purple , UIColor.blue |
Tela de Permissão de Câmera: Exibida quando o usuário ainda não concedeu permissão de acesso à câmera:

Nº | Métodos | Descrição | Exemplo |
---|---|---|---|
1 | setCameraPermissionBackButtonIcon(_:) | Define o ícone do botão de voltar. | UIImage(named: "icon") |
1 | setCameraPermissionBackButtonColors(forIcon:background:border:) | Altera cores do botão de voltar (ícone, fundo, borda). | UIColor.red , UIColor.purple , UIColor.blue |
2 | setCameraPermissionImage(_:color:) | Configura imagem ilustrativa e cor. | UIImage(named: "image") , UIColor.red |
3 | setCameraPermissionTitle(withText:color:font:) | Define título, cor e fonte. | "Title" , UIColor.red , UIFont(name: "font", size: .zero) |
4 | setCameraPermissionCaption(withText:color:font:) | Define legenda, cor e fonte. | "Caption" , UIColor.red , UIFont(name: "font", size: .zero) |
5 | setCameraPermissionCheckPermissionButton(withText:font:) | Define texto e fonte do botão de checar permissão. | "Button" , UIFont(name: "font", size: .zero) |
5 | setCameraPermissionCheckPermissionButtonNormalStateColors(forText:background:border:) | Define cores normais do botão (texto, fundo, borda). | UIColor.red , UIColor.purple , UIColor.blue |
6 | setCameraPermissionBottomSheetShape(withColor:cornerRadius:) | Define cor e cantos do bottom sheet. | UIColor.red , CGFloat(10) |
6 | setCameraPermissionBottomSheetTitle(withText:color:font:) | Define título do bottom sheet. | "Title" , UIFont(name: "font", size: .zero) |
6 | setCameraPermissionBottomSheetCaption(withText:color:font:) | Define legenda do bottom sheet. | "Caption" , UIFont(name: "font", size: .zero) |
6 | setCameraPermissionOpenSettingsButton(withText:font:) | Define botão de abrir configurações. | "Button" , UIFont(name: "font", size: .zero) |
6 | setCameraPermissionOpenSettingsButtonNormalStateColors(forText:background:border:) | Personaliza cores normais do botão abrir configurações. | UIColor.red , UIColor.purple , UIColor.blue |
6 | setCameraPermissionBackgroundColor(_:) | Define a cor de fundo da tela de permissão. | UIColor.red |
0 | setCameraPermissionCloseButton(withText:font:) | Define botão de fechar. | UIFont(name: "font", size: .zero) |
0 | setCameraPermissionCloseButtonNormalStateColors(forText:background:border:) | Personaliza cores normais do botão fechar. | UIColor.red , UIColor.purple , UIColor.blue |
Tela de Processamento: Feedback visual durante verificação.

Nº | Métodos | Descrição | Exemplo |
---|---|---|---|
1 | setLoadingSpinner(withColor:width:scaleFactor:) | Configura cor, largura e escala do spinner. | UIColor.red , CGFloat(10), Int(2) |
2 | setLoadingBackgroundColor(_:) | Define a cor de fundo da tela de carregamento. | UIColor.red |
📱 Telas iProov
Tela do IProov: Executa a verificação de liveness.

Nº | Métodos | Descrição | Exemplo |
---|---|---|---|
1 | setBackButtonIconColor(_:) | Define a cor aplicada ao ícone do botão de voltar. | UIColor.red |
1 | setBackButtonIcon(_:) | Define o ícone usado no botão de voltar. | UIImage(named: "image") |
1 | setBackButtonBackgroundColor(_:) | Define a cor de fundo do botão de voltar. | UIColor.red |
1 | setBackButtonBorderColor(_:) | Define a cor da borda do botão de voltar. | UIColor.red |
2 | setContextImage(_:) | Define a imagem exibida na área de contexto. | UIImage(named: "image") |
3 | setTitle(_:) | Define o título principal exibido na tela. | "Text" |
3 | setTitleFont(_:) | Define a fonte usada no título principal | UIFont(name: "font", size: .zero) |
3 | setTitleColor(_:) | Define a cor do texto do título principal. | UIColor.red |
3 | setCaption(_:) | Define o subtítulo ou legenda exibida abaixo do título. | "Text" |
3 | setCaptionFont(_:) | Define a fonte usada no subtítulo/legenda. | UIFont(name: "font", size: .zero) |
3 | setCaptionColor(_:) | Define a cor do texto do subtítulo/legenda. | UIColor.red |
4 | setFirstInstructionIcon(_:) | Define o ícone exibido na primeira instrução. | UIImage(named: "image") |
4 | setFirstInstructionTitle(_:) | Define o texto da primeira instrução exibida para o usuário. | "Text" |
4 | setFirstInstructionTitleFont(_:)) | Define a fonte usada no texto da primeira instrução. | UIFont(name: "font", size: .zero) |
4 | setFirstInstructionTitleColor(_:) | Define a cor do texto da primeira instrução. | UIColor.red |
4 | setSecondInstructionIcon(_:) | Define o ícone exibido na segunda instrução. | UIImage(named: "image") |
4 | setSecondInstructionTitle(_:) | Define o texto da segunda instrução exibida para o usuário. | "Text" |
4 | setSecondInstructionTitleFont(_:) | Define a fonte usada no texto da segunda instrução. | UIFont(name: "font", size: .zero) |
4 | setSecondInstructionTitleColor(_:) | Define a cor do texto da segunda instrução. | UIColor.red |
5 | setBackgroundColor(_:) | Define a cor de fundo da tela principal. | UIColor.red |
5 | setBottomSheetColor(_:) | Define a cor de fundo do bottom sheet | UIColor.red |
5 | setBottomSheetCornerRadius(_:) | Define o arredondamento dos cantos do bottom sheet. | CGFloat(10) |
6 | setContinueButtonText(_:) | Define o texto exibido no botão de continuar. | "Text" |
6 | setContinueButtonFont(_:) | Define a fonte usada no texto do botão de continuar. | UIFont(name: "font", size: .zero) |
6 | setContinueButtonTextColor(_:) | Define a cor do texto do botão de continuar. | UIColor.red |
6 | setContinueButtonBackgroundColor(_:) | Define a cor de fundo do botão de continuar. | UIColor.red |
6 | setContinueButtonBorderColor(_:) | Define a cor da borda do botão de continuar. | UIColor.red |
Tela de Processamento: Exibida durante o processamento do liveness coletado:

Nº | Métodos | Descrição | Exemplo |
---|---|---|---|
1 | setSpinnerColor(_:) | Define a cor do spinner. | UIColor.red |
1 | setSpinnerWidth(_:) | Define a largura da linha ou borda do spinner. | CGFloat(0) |
1 | setSpinnerScaleFactor(_:) | Define o fator de escala do spinner, ou seja, seu tamanho relativo ao padrão. | Int(0) |
2 | setBackgroundColor(_:) | Define a cor de fundo da tela. | UIColor.red |
Tela de Resultado: Exibida ao final do processamento do liveness coletado:

Nº | Métodos | Descrição | Exemplo |
---|---|---|---|
1 | setSuccessImage(UIImage(named: "doc.text.magnifyingglass")) | Define a imagem exibida na tela de sucesso. | UIColor |
2 | setSuccessMessage(_:) | Define a mensagem de sucesso exibida ao usuário. | "Text" |
2 | setSuccessMessageColor(_:) | Define a cor do texto da mensagem de sucesso. | UIColor.red |
2 | setMessageFont(_:) | Define a fonte usada nas mensagens. | UIFont(name: "font", size: .zero) |
2 | setErrorMessage(_:) | Define a mensagem de erro exibida ao usuário. | "Text" |
2 | setErrorMessageColor(_:) | Define a cor do texto da mensagem de erro. | UIColor.red |
3 | setRetryBackgroundColor(_:) | Define a cor de fundo da área de retry. | UIColor.red |
3 | setRetryImage(UIImage(named: "phone") ?? UIImage()) | Define a imagem exibida na tela de retry. | UIColor |
3 | setRetryMessageColor(_:) | Define a cor do texto da mensagem de retry. | UIColor.red |
3 | setRetryButtonText(_:) | Define o texto exibido no botão de retry. | "Text" |
3 | setRetryButtonTextFont(_:) | Define a fonte usada no texto do botão de retry. | UIFont(name: "font", size: .zero) |
3 | setRetryButtonTextColor(_:) | Define a cor do texto do botão de retry. | UIColor.red |
3 | setRetryButtonBackgroundColor(_:) | Define a cor de fundo do botão de retry. | UIColor.red |
3 | setRetryButtonBorderColor(_:) | Define a cor da borda do botão de retry. | UIColor.red |
4 | setSuccessBackgroundColor(_:) | Define a cor de fundo da tela de sucesso. | UIColor.red |
4 | setErrorBackgroundColor(_:) | Define a cor de fundo da tela de erro. | UIColor.red |
4 | setErrorImage(UIImage(named: "pencil")) | Define a imagem exibida na tela de erro. | UIColor.red |
📱 Telas Facetec
Exemplo de Customização de Textos
Nesta seção, vamos explorar detalhadamente como personalizar os textos da Facetec para refletir a linguagem e o tom desejados pelo seu aplicativo. A seguir, você verá tabelas e imagens ilustrativas que mostram onde cada texto personalizado aparece na interface, ajudando a entender o impacto de cada configuração visualmente.
Para consultar exemplos de customização visual da Facetec: Clique Aqui
Ready Screen

Nº | Identificador | Exemplos para uso de texto |
---|---|---|
1 | readyHeader1 | Prepare-se para seu |
2 | readyHeader2 | reconhecimento facial. |
3 | readyMessage1 | Posicione o seu rosto na moldura, aproxime-se |
4 | readyMessage2 | e toque em começar. |
5 | readyButton | Começar |
Feedback

Identificador | Exemplos para uso de texto |
---|---|
feedbackCenterFace | Centralize Seu Rosto |
feedbackFaceNotFound | Enquadre o Seu Rosto |
feedbackFaceNotLookingStraightAhead | Olhe Para Frente |
feedbackFaceNotUpright | Mantenha a Cabeça Reta |
feedbackHoldSteady | Segure Firme |
feedbackMovePhoneAway | Afaste-se |
feedbackMovePhoneCloser | Aproxime-se |
feedbackMovePhoneToEyeLevel | Telefone ao Nível dos Olhos |
feedbackUseEvenLighting | Ilumine Seu Rosto Uniformemente |
feedbackFrameYourFace | Encaixe Seu Rosto no Espaço Oval |
feedbackPositionFaceStraightInOval | Olhe Para Frente |
feedbackHoldSteady1 | Aguente Firme: 1 |
feedbackHoldSteady2 | Aguente Firme: 2 |
feedbackHoldSteady3 | Aguente Firme: 3 |
feedbackRemoveDarkGlasses | Tire Seus Óculos de Sol |
feedbackNeutralExpression | Fique neutro, Não Sorria |
feedbackEyesStraightAhead | Olhe para a frente |
feedbackConditionsTooBright | Ambiente Muito Iluminado |
feedbackBrightenYourEnvironment | Ambiente Muito Escuro |
Result Screen

Identificador | Exemplos para uso de texto |
---|---|
resultUploadMessage | Enviando... |
resultSuccessMessage | Sucesso |
Retry Screen

Nº | Identificador | Exemplos para uso de texto |
---|---|---|
1 | retryHeader | Vamos tentar novamente? |
2 | retrySubheader | Siga o exemplo de foto ideal abaixo: |
3 | retryMessageSmile | Expressão Neutra, Sem Sorrir. |
3 | retryMessageLightning | Evite reflexos e iluminação extrema. |
3 | retryMessageContrast: | Limpe Sua Câmera. |
4 | retryYourPicture | Sua foto. |
5 | retryIdealPicture | Foto ideal. |
6 | retryButton | Tentar novamente. |
🧪 Ambiente de Testes
Durante o desenvolvimento, utilize o ambiente hml
com AppKeys fornecidas pela equipe Oiti.
Evite o uso do ambiente de produção para testes manuais.
🛠️ Boas Práticas
- Use o padrão de fábrica para desacoplar a implementação dos provedores.
- Customize visualmente a interface conforme a identidade do seu app.
- Trate todos os retornos com UX amigável.
- Guarde logs e tokens apenas em ambiente seguro.
📜 Changelogs e Versões
Versão | Data | Descrição |
---|---|---|
0.5.0 | 02/07/2025 | Lançamento inicial do SDK |
0.6.0 | 12/08/2025 | Retentativa do IProov e integração da FaceTec |
Sempre consulte a documentação atualizada para obter os detalhes mais recentes.
🔗 Links externos
Updated 1 day ago