Customizações Sdk
Customização
Com objetivo de deixar a experiência de captura mais próxima da sua identidade visual, é possível realizar customizações de alguns componentes no layout da tela de Instrução e Câmera.
Formas de customização
Atualmente existem duas formas de customizar o SDK:
- Via
FortfaceCustomizer, usando a função de entradaFortfaceSDK.setCustomizer(customizer). - Via arquivo JSON, usando a função de entrada
FortfaceSDK.setCustomization("nome_do_arquivo").
As duas formas coexistem, mas o FortfaceCustomizer será depreciado futuramente. Para novas integrações, recomendamos usar a customização via JSON.
Tela de instrução

- Kotlin
- Java
- Switf
1-Tela
a.Visualização on/off
customizer.instructionScreen = true
2-Botão Voltar (X)
a.Imagem do ícone
customizer.cancelButton.image = *imagem de X
b.Visualização on/off
customizer.cancelButtonEnable = true
c.Posição
customizer.cancelPosition = CancelPosition.
3-Textos
a.Título
customizer.instructionTextFont.header = poppins_bold customizer.instructionMessage.setInstructionHeader("Dicas importantes para a foto do seu rosto!") customizer.instructionMessageColor.setHeaderTextColor("#332D41")
b.Itens
customizer.instructionTextFont.Int = poppins_regular customizer.instructionMessage.setInstructionNoItems("Deixe o rosto visível e retire itens como óculos e boné") customizer.instructionMessage.setInstructionPlace("Busque um local iluminado") customizer.instructionMessage.setInstructionExpression("Mantenha a sua expressão neutra") customizer.instructionMessage.setInstructionPosition("Posicione seu celular na altura do seu rosto") customizer.instructionMessageColor.setMessageTextColor("#332D41")
4-Ícones
a.Cor do ícone
customizer.instructionIcon.setColor("#00A594")
b.Cor do fundo do Ícone
customizer.instructionIcon.setBackgroundColor("#F1F1F1")
5-Botão Continuar
a.Cor do botão
customizer.InstructionButton.setColor("#00A594")
b.Cor do texto
customizer.InstructionButton.setTextColor("#FFFFFFFF")
c.Texto
customizer.instructionButton.setText("Continuar")
d.Fonte do texto
customizer.instructionButton.font = R.font.poppins_font_family
e.Borda Arredondada
customizer.InstructionButton.radius = 10
6-Fundo da tela
a.Cor do fundo
customizer.instructionBackground.setColor("#FAFAFA")
1-Tela
a.Visualização on/off
customizer.setInstructionScreen(true);
2-Botão Voltar (X)
a.Imagem do ícone
customizer.getCancelButton().setImage(com.google.android.material.R.drawable.ic_mtrl_chip_close_circle);
b.Visualização on/off
customizer.setCancelButtonEnable(true);
c.Posição
customizer.setCancelPosition(CancelPosition.Left);
3-Textos
a.Título
customizer.getInstructionTextFont().setHeader(R.font.poppins_bold); customizer.getInstructionMessage.setInstructionHeader("Dicas importantes para a foto do seu rosto!"); customizer.getInstructionMessageColor.setHeaderTextColor("#332D41")
b.Itens
customizer.getInstructionTextFont().setText(R.font.poppins_regular); customizer.getInstructionMessage.setInstructionNoItems("Deixe o rosto visível e retire itens como óculos e boné"); customizer.getInstructionMessage.setInstructionPlace("Busque um local iluminado"); customizer.getInstructionMessage.setInstructionExpression("Mantenha a sua expressão neutra"); customizer.getInstructionMessage.setInstructionPosition("Posicione seu celular na altura do seu rosto"); customizer.getInstructionMessageColor.setHeaderTextColor("#332D41")
4-Ícones
a.Cor do ícone
customizer.getInstructionIcon.setColor("#00A594");
b.Cor do fundo do Ícone
customizer.getInstructionIcon.setBackgroundColor("#F1F1F1");
5-Botão Continuar
a.Cor do botão
customizer.getInstructionButton().setColor("#00A594");
b.Cor do texto
customizer.getInstructionButton().setTextColor("#FFFFFF");
c.Texto
customizer.getInstructionButton().setText("Continuar");
d.Fonte do texto
customizer.instructionButton.setFont(R.font.poppins_font_family)
e.Borda Arredondada
customizer.getInstructionButton().setRadius(10);
6-Fundo da tela
a.Cor do fundo
customizer.getInstructionBackground().setColor("#FAFAFA");
1-Tela
a.Visualização on/off
customizer.showInstructions = true
2-Botão Voltar (X) (o mesmo para a tela de câmera)
a.Imagem do ícone
customizer.cancelButton.icon = UIImage(named: "ic_close")
b.Visualização on/off
customizer.cancelButtonenable = true
c.Posição
customizer.cancelButton.position = .
3-Textos
a.Título
customizer.instructionsMessages.title = "Dicas importantes\npara a foto\ndo seu rosto!" customizer.instructionMessageColor.headerTextColorResource = UIColor.white
b.Itens
customizer.instructionsMessages.familyFont = "Poppins-SemiBold" customizer.instructionsMessages.noItems = "Deixe o rosto visível\ne retire itens como\nóculos e boné" customizer.instructionsMessages.place = "Busque um local\niluminado" customizer.instructionsMessages.expression = "Mantenha a sua\nexpressão neutra" customizer.instructionsMessages.position = "Posicione seu celular\nna altura do seu rosto" customizer.instructionMessageColor.messageTextColorResource = UIColor.white
4-Ícones
a.Cor do ícone
customizer.instructionsIcon.color = UIColor(red: 0.00, green: 0.65, blue: 0.58, alpha: 1.00)
b.Cor do fundo do Ícone
customizer.instructionsIcon.background = .blue
5-Botão Continuar
a.Cor do botão
customizer.instructionsButton.color = UIColor(red: 0.00, green: 0.65, blue: 0.58, alpha: 1.00) // primary
b.Cor do texto
customizer.instructionsButton.textColor = UIColor.white
c.Texto
customizer.instructionsButton.textLabel = "Continuar"
d.Fonte do texto
customizer.instructionButton.font = "Poppins-SemiBold"
e.Borda Arredondada
customizer.instructionsButton.radius = 10
6-Fundo da tela
a.Cor do fundo
customizer.instructionsBackground.color = .white
Tela da Câmera - Captura Biométrica

- Kotlin
- Java
- Swift
1-Timeout
a.Tempo
customizer.cameraTimeout = 30
customizer.cameraMinStabilizationTime = 2
customizer.cameraMaxStabilizationTime = 3
customizer.brightnessValidationTimeout = 10
2-Botão Voltar (X)
a.Imagem do ícone
customizer.cancelButton.image = *imagem de X
b.Visualização on/off
customizer.cancelButtonEnable = true
c.Posição
customizer.cancelPosition = CancelPosition.Left
3-Mensagens de feedback
a.Fonte
customizer.cameraFont.cameraMessageFont = poppins_semibold
b.Textos
customizer.cameraMessage.setStartMessage("Enquadre o seu rosto dentro da forma oval")
customizer.cameraMessage.setFaceNoCenter("Centralize seu rosto")
customizer.cameraMessage.setFacePositioned("Aguarde a validação, tente não se mexer")
customizer.cameraMessage.setNoFace("Posicione seu rosto na área indicada")
customizer.cameraMessage.setFaceFar("Aproxime o seu rosto")
customizer.cameraMessage.setFaceNear("Afaste o seu rosto")
customizer.cameraMessage.setFaceCenterLeft("Mova a câmera\npara a esquerda")
customizer.cameraMessage.setFaceCenterRight("Mova a câmera\npara a direita")
customizer.cameraMessage.setFaceCenterUp("Mova a câmera\npara cima")
customizer.cameraMessage.setFaceCenterDown("Mova a câmera\npara baixo")
customizer.cameraMessage.setFacePitchIsUp("Abaixe seu rosto")
customizer.cameraMessage.setFacePitchIsDown("Levante seu rosto")
customizer.cameraMessage.setNoFaceYaw("Olhe para frente")
customizer.cameraMessage.setNoFaceRoll("Deixe sua cabeça reta")
customizer.cameraMessage.setFaceRollLeft("Incline sua cabeça para a esquerda")
customizer.cameraMessage.setFaceRollRight("Incline sua cabeça para a direita")
customizer.cameraMessage.setFaceBrightnessLow("Melhore a iluminação")
customizer.cameraMessage.setFaceBrightnessHigh("Diminua a luz no seu rosto")
A propriedade setNoFaceRoll é substituída pelas propriedades setFaceRollLeft e setFaceRollRight para usuários com leitores de tela ativos.
c.Cor
customizer.cameraColor.setMessageTextColor("#263238")
4-Status
customizer.cameraColor.setNeutralColor("#CDCDCD")
a.Alerta
customizer.cameraColor.setAlertColor("#FF9902")
b.Sucesso
customizer.cameraColor.setSuccessColor("#5FC213")
c.Luminosidade
customizer.cameraColor.setBrightnessAlertColor("#24B8C2")
5-Frames de mensagem
a.Visualização on/off
customizer.cameraFrameText.visible = true
6-Loading do status de sucesso
a.Cor
customizer.cameraLoading.setCameraLoadingColor("#5FC213")
7-Fundo da tela
a.Cor
customizer.cameraBackground.setColor(R.color.new_color_1)
8-Logo no rodapé
a.Imagem
customizer.cameraLogo.logo = R.drawable.ic_small_logo
9-Modo Modal
a.Ativação do modo modal
customizer.screenMode = ScreenMode.Modal
b.Fundo
customizer.modalBackground.setOverlayColor("#000000")
customizer.modalBackground.overlayOpacity = 0.2f
c.Orientação
customizer.screenOrientation = ScreenOrientation.Automatic
10-Ícone de Luminosidade
a.Imagem
customizer.cameraIcon.setHighBrightnessIcon(R.drawable.ic_brightness_high) customizer.cameraIcon.setLowBrightnessIcon(R.drawable.ic_brightness_low)
b.Cor
customizer.cameraIcon.setBackgroundColor("#F1F1F1")
1-Timeout
a.Tempo
customizer.setCameraTimeout(30);
customizer.setCameraMinStabilizationTime(2);
customizer.setCameraMaxStabilizationTime(3);
customizer.setBrightnessValidationTimeout(10);
2-Botão Voltar (X)
a.Imagem do ícone
customizer.getCancelButton().setImage(com.google.android.material.R.drawable.ic_mtrl_chip_close_circle);
b.Visualização on/off
customizer.setCancelButtonEnable(true);
c.Posição
customizer.setCancelPosition(CancelPosition.Left);
3-Mensagens de feedback
a.Fonte
customizer.getCameraFont().setCameraMessageFont(R.font.poppins_semibold);
b.Textos
customizer.cameraMessage.setStartMessage("Enquadre o seu rosto dentro da forma oval")
customizer.cameraMessage.setFaceNoCenter("Centralize seu rosto")
customizer.getCameraMessage().setFacePositioned("Aguarde a validação, tente não se mexer");
customizer.getCameraMessage().setNoFace("Posicione seu rosto na área indicada");
customizer.getCameraMessage().setFaceFar("Aproxime o seu rosto");
customizer.getCameraMessage().setFaceNear("Afaste o seu rosto");
customizer.getCameraMessage().setFaceCenterLeft("Mova a câmera\npara a esquerda");
customizer.getCameraMessage().setFaceCenterRight("Mova a câmera\npara a direita");
customizer.getCameraMessage().setFaceCenterUp("Mova a câmera\npara cima");
customizer.getCameraMessage().setFaceCenterDown("Mova a câmera\npara baixo");
customizer.getCameraMessage().setPitchIsUp("Abaixe seu rosto");
customizer.getCameraMessage().setPitchIsDown("Levante seu rosto");
customizer.getCameraMessage().setNoFaceYaw("Olhe para frente");
customizer.getCameraMessage().setNoFaceRoll("Deixe sua cabeça reta");
customizer.getCameraMessage().setFaceRollLeft("Incline sua cabeça para a esquerda");
customizer.getCameraMessage().setFaceRollRight("Incline sua cabeça para a direita");
customizer.getCameraMessage().setFaceBrightnessLow("Melhore a iluminação");
customizer.getCameraMessage().setFaceBrightnessHigh("Diminua a luz no seu rosto");
A propriedade setNoFaceRoll é substituída pelas propriedades setFaceRollLeft e setFaceRollRight para usuários com leitores de tela ativos.
c.Cor
customizer.getCameraColor().setMessageTextColor("#263238")
4-Status
customizer.getCameraColor().setNeutralColor("#CDCDCD");
a.Alerta
customizer.getCameraColor().setAlertColor("#FF9902");
b.Sucesso
customizer.getCameraColor().setSuccessColor("#5FC213");
c.Luminosidade
customizer.getCameraColor().setBrightnessAlertColor("#24B8C2");
5-Frames de mensagem
a.Visualização on/off
customizer.getCameraFrameText().setVisible(true);
6-Loading do status de sucesso
a.Cor
customizer.getCameraLoading().setCameraLoadingColor("#5FC213");
7-Fundo da tela
a.Cor
customizer.getCameraBackground().setColor("#FFEB3B");
8-Logo no rodapé
a.Imagem
customizer.getCameraLogo.setLogo(R.drawable.ic_small_logo);
9-Modo Modal
a.Ativação do modo modal
customizer.setScreenMode(ScreenMode.Modal);
b.Fundo
customizer.getModalBackground().setOverlayColor("#000000");
customizer.getModalBackground().setOverlayOpacity(0.4f);
c.Orientação
customizer.setScreenOrientation(ScreenOrientation.Automatic);
10-Ícone de Luminosidade
a.Imagem
customizer.cameraIcon.setHighBrightnessIcon(R.drawable.ic_brightness_high) customizer.cameraIcon.setLowBrightnessIcon(R.drawable.ic_brightness_low)
b.Cor
customizer.cameraIcon.setBackgroundColor("#F1F1F1")
1-Timeout
a.Tempo
customizer.cameraTimeout = 30
customizer.cameraMinStabilizationTime = 2.0
customizer.cameraMaxStabilizationTime = 5.0
customizer.brightnessMessageTimeout = 10.0
2-Botão Voltar (X)
a.Imagem do ícone
customizer.cancelButton.icon = ImageProvider.image(named: "ic_close")
b.Visualização on/off
customizer.cancelButtonenable = true
c.Posição
customizer.cancelButton.position = .left
3-Mensagens de feedback
a.Fonte
customizer.cameraMessages.familyFont = "Poppins-SemiBold"
b.Textos
customizer.cameraMessages.headerStart
customizer.cameraMessages.noFaceCenter
customizer.cameraMessages.headerStart = "Enquadre o seu rosto\ndentro da forma oval" customizer.cameraMessages.noFace = "Posicione seu rosto na\nárea indicada" customizer.cameraMessages.faceFar = "Aproxime o seu rosto" customizer.cameraMessages.faceNear = "Afaste o seu rosto" customizer.cameraMessages.noFaceCenter = "Centralize seu rosto" customizer.cameraMessages.facePitchIsUp = "Levante seu rosto" customizer.cameraMessages.facePitchIsDown = "Abaixe seu rosto" customizer.cameraMessages.noFaceYaw = "Olhe para frente" customizer.cameraMessages.noFaceRoll = "Deixe sua cabeça reta" customizer.cameraMessages.highBrightness = "Diminua a luz no\nseu rosto" customizer.cameraMessages.lowBrightness = "Aumente a luz no\nseu rosto" customizer.cameraMessages.faceCenterUp = "Mova a câmera\npara cima" customizer.cameraMessages.faceCenterDown = "Mova a câmera\npara baixo" customizer.cameraMessages.faceCenterRight = "Mova a câmera\npara a direita" customizer.cameraMessages.faceCenterLeft = Mova a câmera\npara a esquerda"
A propriedade noFaceRoll é substituída pelas propriedades setFaceRollLeft e setFaceRollRight para usuários com leitores de tela ativos.
Podemos também definir mensagens que serão lidas pela acessibilidade. Note que o texto exibido será o configurado nas variáveis acima. Isso pode ser útil quando o texto exibido é muito longo ou possui quebras e queremos que a mensagem de acessibilidade seja lida de forma fluida.
customizer.cameraMessages.positioned_accessibility = "Não se mexa" customizer.cameraMessages.faceCenterLeft_accessibility = Mova a câmera para a esquerda" customizer.cameraMessages.faceCenterRight_accessibility = "Mova a câmera para a direita" customizer.cameraMessages.faceCenterUp_accessibility = "Mova a câmera para cima" customizer.cameraMessages.faceCenterDown_accessibility = "Mova a câmera para baixo" customizer.cameraMessages.faceRollRight_accessibility = "Incline sua cabeça para a direita" customizer.cameraMessages.faceRollLeft_accessibility = "Incline sua cabeça para a esquerda" customizer.cameraMessages.highBrightness_accessibility = "Diminua a luz no seu rosto" customizer.cameraMessages.lowBrightness_accessibility = "Aumente a luz no seu rosto"
c.Cor
customizer.cameraColor.messageTextColorResource = UIColor(red: 0.39, green: 0.65, blue: 0.22, alpha: 1.00)
4-Status
a.Neutro
customizer.cameraColor.neutral = UIColor(red: 0.80, green: 0.80, blue: 0.80, alpha: 1.00)
b.Alerta
customizer.cameraColor.alert = UIColor(red: 1.00, green: 0.60, blue: 0.01, alpha: 1.00)
c.Sucesso
customizer.cameraColor.success = UIColor(red: 0.39, green: 0.65, blue: 0.22, alpha: 1.00)
d.Luminosidade
customizer.cameraColor.brightness = UIColor(red: 0.14, green: 0.72, blue: 0.76, alpha: 1.00)
5-Frames de mensagem
a.Visualização on/off
customizer.cameraFrameText.visible = true
6-Loading do status de sucesso
a.Cor
customizer.cameraColor.loadingBackground = UIColor(red: 0.40, green: 0.73, blue: 0.18, alpha: 1.00) // green-success customizer.cameraColor.loadingStroke = UIColor.white
7-Fundo da tela
a.Cor
customizer.cameraBackground.color = .white
8-Logo no rodapé
a.Imagem
customizer.cameraLogo.icon = ImageProvider.image(named: "fortface")
9-Modo Modal
a.Abertura do SDK em modal
customizer.screenMode.mode = .modal
b.Orientação
customizer.screenOrientation.mode = .automatic
10-Ícone de Luminosidade
a.Imagem
customizer.brightnessIcons.lowBrightness = ImageProvider.image(named: "ic_lowBrightness") customizer.brightnessIcons.highBrightness = ImageProvider.image(named: "ic_highBrightness")
b.Cor
customizer.cameraColor.brightness = UIColor(red: 0.14, green: 0.72, blue: 0.76, alpha: 1.00) customizer.cameraColor.brightnessBackground = UIColor(red: 0.95, green: 0.95, blue: 0.95, alpha: 1.00)
Tela da Câmera - Captura de Documentos

- Kotlin
- Java
- swift
1-Timeout máximo
customizer.cameraTimeout = 60
customizer.documentAutomaticCaptureTimeout = 20
2-Status dos frames
a.Neutro
customizer.document.setFrameNeutralColor("#F44336")
b.Sucesso
customizer.document.setFrameSuccessColor("#9C27B0")
3-Loading dos status de sucesso
a.Cor do fundo
customizer.document.setLoadingBackgroundColor("#F44336")
b.Cor do traço
customizer.document.setLoadingStrokeColor("#9C27B0")
4-Botão voltar (X)
a.Imagem do Ícone
customizer.cancelButton.image = *imagem de X
b.Visualização on/off
customizer.cancelButtonEnable = true
c.Posição
customizer.cancelPosition = CancelPosition.Left
5-Texto de posicionamento
a.Fonte
customizer.cameraFont.cameraMessageFont = R.font.poppins_semibold
b.Textos
customizer.docCameraMessage.setStartMessage("Encaixe seu documento\nna marcação")
customizer.docCameraMessage.setDocPositionedMessage("Mantenha seu celular parado")
customizer.docCameraMessage.setDocOutOfFrameMessage("Posicione seu documento\ndentro da área indicada")
customizer.docCameraMessage.setDocMisalignedMessage("Deixe seu documento reto")
customizer.docCameraMessage.setDocNotFoundMessage("Nenhum documento encontrado,\ntente posicionar novamente")
customizer.docCameraMessage.setDocFarMessage("Aproxime a câmera\ndo seu documento")
customizer.docCameraMessage.setDocNearMessage("Afaste a câmera\ndo seu documento")
customizer.docCameraMessage.setDocCapturedMessage("Não se mova")
customizer.docCameraMessage.setWrongFaceMessage("Mostre o verso do documento")
customizer.docCameraMessage.setDocTapToFocusMessage("Toque na tela para focar")
c. Cores
customizer.docCameraMessage.setFeedbackMessageColor("#FFFFFF")
6-Botão de captura
a.Cor do fundo
customizer.documentCameraButton.setColor("#00A594")
b.Cor do texto
customizer.documentCameraButton.setTextColor(R.color.white) customizer.documentCameraButton.setPressedColor("#00A594")
c.Fonte do texto
customizer.documentCameraButton.font = R.font.poppins_regular
d.Texto
customizer.docCameraMessage.setDocManualCaptureButtonMessage("Tirar foto")
7-Texto de confirmação
a.Fonte
customizer.cameraFont.cameraMessageFont = R.font.poppins_semibold
b. Texto
customizer.docCameraMessage.setDocPreviewMessage("Seu documento está\nnítido e legível?")
c. Cores
customizer.docCameraMessage.setDocPreviewMessageTextColor("#FFFFFF")
8-Botões de confirmação
a.Fonte
customizer.documentPreviewButtons.font = R.font.poppins_regular
b.Cor do texto
customizer.documentPreviewButtons.setAcceptTextColor(R.color.white) customizer.documentPreviewButtons.setCancelTextColor(R.color.white)
c.Cor de fundo
customizer.documentPreviewButtons.setAcceptColor("#367C14") customizer.documentPreviewButtons.setPressedColor("#26570E") customizer.documentPreviewButtons.setCancelColor("#B3261E") customizer.documentPreviewButtons.setPressedCancelColor("#B3261E")
d. Texto
customizer.docCameraMessage.setDocPreviewConfirmCapture("Sim, enviar")
customizer.docCameraMessage.setDocPreviewRetryCapture("Tirar nova foto")
1-Timeout máximo
customizer.setCameraTimeout(60);
customizer.documentAutomaticCaptureTimeout = (20);
2-Status dos frames
a.Neutro
customizer.getDocument().setFrameNeutralColor("#F44336");
b.Sucesso
customizer.getDocument().setFrameSuccessColor("#9C27B0");
3-Loading dos status de sucesso
a.Cor do fundo
customizer.getDocument().setLoadingBackgroundColor("#F44336");
b.Cor do traço
customizer.getDocument().setLoadingStrokeColor("#9C27B0");
4-Botão voltar (X)
a.Imagem do Ícone
customizer.getCancelButton().setImage(*imagem de X);
b.Visualização on/off
customizer.setCancelButtonEnable(true);
c.Posição
customizer.setCancelPosition(CancelPosition.Left);
5-Texto de posicionamento
a.Fonte
customizer.getCameraFont().setCameraMessageFont(R.font.poppins_semibold);
b.Textos
customizer.getDocCameraMessage().setStartMessage("Encaixe seu documento\nna marcação")
customizer.getDocCameraMessage().setDocPositionedMessage("Mantenha seu celular parado")
customizer.getDocCameraMessage().setDocOutOfFrameMessage("Posicione seu documento\ndentro da área indicada")
customizer.getDocCameraMessage().setDocMisalignedMessage("Deixe seu documento reto")
customizer.getDocCameraMessage().setDocNotFoundMessage("Nenhum documento encontrado,\ntente posicionar novamente")
customizer.getDocCameraMessage().setDocFarMessage("Aproxime a câmera\ndo seu documento")
customizer.getDocCameraMessage().setDocNearMessage("Afaste a câmera\ndo seu documento")
customizer.getDocCameraMessage().setDocCapturedMessage("Não se mova")
customizer.getDocCameraMessage().setWrongFaceMessage("Mostre o verso do documento")
customizer.getDocCameraMessage().setDocTapToFocusMessage("Toque na tela para focar")
customizer.getDocCameraMessage().setDocPreviewMessage("")
customizer.getDocCameraMessage().setDocPreviewConfirmCapture("")
customizer.getDocCameraMessage().setDocPreviewRetryCapture("")
c. Cores
customizer.getDocCameraMessage().setFeedbackMessageColor("#FFFFFF")
6-Botão de captura
a.Cor do fundo
customizer.getDocumentCameraButton().setColor("#00A594");
b.Cor do texto
customizer.getDocumentCameraButton().setTextColor(R.color.white); customizer.getDocumentCameraButton().setPressedColor("#00A594");
c.Fonte do texto
customizer.getDocumentCameraButton().setFont(R.font.poppins_regular);
d.Texto
customizer.getDocumentCameraButton().setDocManualCaptureButtonMessage("Tirar foto")
7-Texto de confirmação
a.Fonte
customizer.getCameraFont().setCameraMessageFont(R.font.poppins_semibold);
b. Texto
customizer.getDocCameraMessage().setDocPreviewMessage("Seu documento está\nnítido e legível?")
c. Cores
customizer.getDocCameraMessage().setDocPreviewMessageTextColor("#FFFFFF")
8-Botões de confirmação
a.Fonte
customizer.getDocumentPreviewButtons().setFont(R.font.poppins_regular);
b.Cor do texto
customizer.getDocumentPreviewButtons().setAcceptTextColor(R.color.white); customizer.getDocumentPreviewButtons().setCancelTextColor(R.color.white);
c.Cor de fundo
customizer.getDocumentPreviewButtons().setAcceptColor("#367C14"); customizer.getDocumentPreviewButtons().setPressedColor("#26570E"); customizer.getDocumentPreviewButtons().setCancelColor("#B3261E"); customizer.getDocumentPreviewButtons().setPressedCancelColor("#B3261E");
d. Texto
customizer.getDocumentPreviewButtons().setDocPreviewConfirmCapture("Sim, enviar")
customizer.getDocumentPreviewButtons().setDocPreviewRetryCapture("Tirar nova foto")
1-Timeout Máximo
customizer.cameraTimeout = 60
customizer.documentAutomaticCaptureTimeout = 20
2-Status dos frames
a.Neutro
customizer.docColor.neutral = UIColor.white
b.Sucesso
customizer.docColor.success = = UIColor(red: 0.40, green: 0.73, blue: 0.18, alpha: 1.00) // green-success
3-Loading do status de sucesso
a.Cor do fundo
customizer.docColor.loadingBackground = UIColor(red: 0.40, green: 0.73, blue: 0.18, alpha: 1.00) // green-success
b.Cor do traço
customizer.docColor.loadingStroke = UIColor.white
4-Botão Voltar(X)
a.Imagem do ícone
customizer.cancelButton.image = *imagem de X
b.Visualização on/off
customizer.cancelButton.enable = true
c.Posição
customizer.cancelButton.position = .right
5-Texto de posicionamento
a.Fonte
customizer.docMessages.familyFont = "Poppins-SemiBold"
b.Textos
customizer.docMessages.setStartMessage = "Encaixe seu documento\nna marcação" customizer.docMessages.setDocPositionedMessage = "Mantenha seu celular parado" customizer.docMessages.setDocOutOfFrameMessage = "Posicione seu documento\ndentro da área indicada" customizer.docMessages.setDocMisalignedMessage = "Deixe seu documento reto" customizer.docMessages.setDocNotFoundMessage = "Nenhum documento encontrado,\ntente posicionar novamente" customizer.docMessages.setDocFarMessage = "Aproxime a câmera\ndo seu documento" customizer.docMessages.setDocNearMessage = "Afaste a câmera\ndo seu documento" customizer.docMessages.setDocCapturedMessage = "Não se mova" customizer.docMessages.setWrongFaceMessage = "Mostre o verso do documento" customizer.docMessages.setDocTapToFocusMessage = "Toque na tela para focar" customizer.docMessages.setDocPreviewMessage = "Seu documento está\nnítido e legível?" customizer.docMessages.setDocPreviewConfirmCapture = "Sim, enviar" customizer.docMessages.setDocPreviewRetryCapture = "Tirar nova foto" customizer.docMessages.setDocTakePictureMessaage = "Tirar foto"
c.Cor do texto
customizer.docColor.feedbackMessageColor = .red
6-Botão de captura
a.Cor do fundo
customizer.docCameraButton.colorResource = UIColor(resource: .primary)
b.Cor do texto
customizer.docCameraButton.textColorResource = UIColor.white
c.Fonte do texto
customizer.docCameraButton.familyFont = "Poppins-SemiBold"
7-Texto de confirmação
a.Fonte
customizer.docMessages.familyFont = "Poppins-SemiBold"
b.Cor do texto
customizer.docMessages.setDocPreviewMessageTextColor = .magenta
8-Botões de confirmação
a.Fonte
customizer.docPreviewButtons.familyFont = "Poppins-SemiBold"
b.Cor do texto
customizer.docPreviewButtons.acceptTextColorResource = UIColor.white customizer.docPreviewButtons.cancelTextColorResource = UIColor.white
c.Cor de fundo
customizer.docPreviewButtons.acceptColorResource = UIColor(red: 0.21, green: 0.49, blue: 0.08, alpha: 1.00) customizer.docPreviewButtons.cancelColorResource = UIColor(red: 0.70, green: 0.15, blue: 0.12, alpha: 1.00)
Upload de Documentos

- Kotlin
- Java
- swift
1 - Botão cancelar (X)
a.Imagem do Ícone
customizer.cancelButton.image = *imagem de X
b.Visualização on/off
customizer.cancelButtonEnable = true
c.Posição
customizer.cancelPosition = CancelPosition.Left
2 - Textos
a. Mensagens
customizer.uploadDocMessage.setUploadDocTitle("Confirme seu documento")
customizer.uploadDocMessage.setUploadDocSubtitle("Sua imagem deve estar com os dados legíveis e em boa qualidade.")
b. Cores
customizer.uploadDocMessage.setUploadDocTitleTextColor("#000000") customizer.uploadDocMessage.setUploadDocSubtitleTextColor("#AAAAAA")
3 - Botões de confirmação e reenvio
a. Confirmação
customizer.uploadDocMessage.setUploadDocPreviewContinue("Enviar documento")
customizer.uploadDocMessage.setUploadDocPreviewContinueButtonColor("#00A594")
customizer.uploadDocMessage.setUploadDocPreviewContinueButtonTextColor("#FFFFFF")
customizer.uploadDocMessage.setUploadDocWaitMessage("Aguarde")
customizer.uploadDocMessage.setUploadDocPreviewRetryTextColor("#00A594")
b. Reenvio
customizer.uploadDocMessage.setUploadDocPreviewRetry("Carregar novamente")
4 - Cor de fundo
a. Cor
customizer.uploadDoc.setBackgroundColor("#FFFFFF")
1 - Botão cancelar (X)
a.Imagem do Ícone
customizer.getCancelButton().setImage(*imagem de X);
b.Visualização on/off
customizer.setCancelButtonEnable(true);
c.Posição
customizer.setCancelPosition(CancelPosition.Left);
2 - Textos
a. Mensagens
customizer.getUploadDocMessage().setUploadDocTitle("Confirme seu documento")
customizer.getUploadDocMessage().setUploadDocSubtitle("Sua imagem deve estar com os dados legíveis e em boa qualidade.")
b. Cores
customizer.getUploadDocMessage().setUploadDocTitleTextColor("#000000") customizer.getUploadDocMessage().setUploadDocSubtitleTextColor("#AAAAAA")
3 - Botões de confirmação e reenvio
a. Confirmação
customizer.getUploadDocMessage().setUploadDocPreviewContinue("Enviar documento")
customizer.getUploadDocMessage().setUploadDocPreviewContinueButtonColor("#00A594")
customizer.getUploadDocMessage().setUploadDocPreviewContinueButtonTextColor("#FFFFFF")
customizer.getUploadDocMessage().setUploadDocWaitMessage("Aguarde")
customizer.getUploadDocMessage().setUploadDocPreviewRetryTextColor("#00A594")
b. Reenvio
customizer.getUploadDocMessage().setUploadDocPreviewRetry("Carregar novamente")
4 - Cor de fundo
a. Cor
customizer.getUploadDoc().setBackgroundColor("#FFFFFF")
1 - Botão cancelar (X)
a.Imagem do ícone
customizer.cancelButton.image = *imagem de X
b.Visualização on/off
customizer.cancelButton.enable = true
c.Posição
customizer.cancelButton.position = .right
2 - Textos
a.Fonte
customizer.uploadDocMessages.familyFontTitle = "Poppins-SemiBold"
customizer.uploadDocMessages.familyFontSubtitle = "Poppins-Regular"
customizer.uploadDocMessages.familyFontButtons = "Impact"
b. Mensagens
customizer.uploadDocMessages.setUploadDocTitle = "Confirme seu documento"
customizer.uploadDocMessages.setUploadDocSubtitle = "Sua imagem deve estar com\nos dados legíveis e em boa qualidade."
customizer.uploadDocMessages.setUploadDocPreviewContinue = "Enviar documento"
customizer.uploadDocMessages.setUploadDocPreviewRetry = "Carregar novamente"
c. Cor do texto
customizer.uploadDocMessages.setUploadDocTitleTextColor = .green
customizer.uploadDocMessages.setUploadDocSubtitleTextColor = .magenta
3 - Botões de confirmação e reenvio
a. Confirmação
customizer.uploadDocMessages.setUploadDocPreviewContinue = "Enviar documento"
customizer.uploadDocMessages.setUploadDocWaitMessage = "Aguarde"
b. Reenvio
customizer.uploadDocMessages.setUploadDocPreviewRetry = "Carregar novamente"
c. Cor do texto
customizer.uploadDocMessages.setUploadDocPreviewContinueButtonTextColor = .blue
customizer.uploadDocMessages.setUploadDocPreviewRetryTextColor = .purple
d. Cor do botão
customizer.docColor.setUploadDocPreviewContinueButtonColor = .red
4 - Background
a. Cor de fundo
customizer.docColor.setBackgroundColor = .lightGray
Como funciona?
Cada uma das variáveis possui seu valor padrão.
- Se você atribuir um novo valor conforme o tipo da variável, o novo valor será redenrizado;
- Se nenhum novo valor for atribuído, será renderizado o padrão inicial.
- No caso da logo da tela de captura, se não for inicializada nenhuma imagem, não irá aparecer nada
Entendendo o trecho de código
Primeiro, inicialize a classe FortfaceCustomizer:
- Kotlin
- Java
- Swift
val customizer = FortfaceCustomizer()
FortfaceCustomizer customizer = new FortfaceCustomizer();
let customizer = FortfaceCustomizer()
Depois, altere os parâmetros desejados:
- Kotlin
- Java
- Swift
customizer.cameraColor.setNeutralColor(R.color.new_color_1) customizer.cameraColor.setSuccessColor("#9C27B0") customizer.cameraMessage.setFaceNear(R.string.text_1) customizer.cameraMessage.setStartMessage("Vamos começar")
customizer.getCameraColor().setNeutralColor(R.color.new_color_1); customizer.getCameraColor().setSuccessColor("#9C27B0"); customizer.getCameraColor().setFaceNear(R.string.text_1); customizer.getCameraColor().setStartMessage("Vamos começar");
customizer.cancelButton.enable = false customizer.showInstructions = false customizer.cancelButton.position = .right
Então, sobrescreva customizer padrão:
- Kotlin
- Java
- Swift
FortfaceSDK.customizer=customizer
FortfaceSDK.setCustomizer(customizer)
FortfaceSDK.setCustomizer(customizer)
Lembrete
Todos os itens específicos, como: ícones, imagens, família de fonte, etc., devem estar importados na pasta Assets do seu app.
Customização via JSON
A customização via JSON permite aplicar a identidade visual e os textos do SDK a partir de um arquivo .json incluído no bundle do aplicativo integrador.
Função de entrada
A função de entrada para customização via JSON é FortfaceSDK.setCustomization("nome_do_arquivo").
Como configurar
- Adicione o arquivo JSON ao projeto integrador.
- Garanta que o arquivo esteja incluído no bundle do app em Copy Bundle Resources.
- Chame
FortfaceSDK.setCustomizationinformando apenas o nome do arquivo, sem a extensão.json.
- Swift
FortfaceSDK.setCustomization("customization")
Atenção:
Use apenas uma forma de customização por inicialização. Se setCustomizer for chamado antes, setCustomization não será aplicado. Se setCustomization for chamado antes, setCustomizer não substituirá a configuração carregada.
Estrutura esperada
O JSON deve declarar as configurações diretamente na raiz do arquivo, a partir de blocos como theme, face_recognition, document_recognition e document_upload.
Compatibilidade
Configurações antigas que usam o array examples continuam suportadas pelo SDK. Para novas integrações, prefira declarar os módulos diretamente na raiz do JSON.
{
"version": "1.0.0",
"theme": {
"appearance": {
"font_family": "Poppins-SemiBold",
"background_color": "#FFFFFF",
"orientation": "automatic",
"modal": {
"enabled": false
}
}
},
"face_recognition": {
"instructions_screen": {
"visible": true,
"background_color": "#FAFAFA",
"title": {
"content": "Dicas importantes\npara a foto\ndo seu rosto!",
"color": "#332D41"
},
"topics": {
"messages": {
"no_items": {
"content": "Deixe o rosto visível\ne retire itens como\nóculos e boné",
"color": "#332D41"
},
"well_lit": {
"content": "Busque um local\niluminado",
"color": "#332D41"
},
"neutral_expression": {
"content": "Mantenha a sua\nexpressão neutra",
"color": "#332D41"
},
"straight_position": {
"content": "Posicione seu celular\nna altura do seu rosto",
"color": "#332D41"
}
},
"icons": {
"color": "#00A594",
"background_color": "#F1F1F1"
}
},
"continue_button": {
"content": "Continuar",
"background_color": "#00A594",
"text_color": "#FFFFFF",
"corner_radius": 10
}
},
"camera_screen": {
"background_color": "#FFFFFF",
"timeout": 30,
"min_stabilization_time": 1.0,
"max_stabilization_time": 2.0,
"close_button": {
"visible": true,
"position": "top-left"
},
"positioning_messages": {
"color": "#263238",
"frame_text_visible": true,
"loading_stroke_color": "#FFFFFF",
"content": {
"positioned": "Aguarde a validação,\ntente não se mexer",
"no_face": "Posicione seu rosto na área indicada",
"face_far": "Aproxime o seu rosto",
"face_near": "Afaste o seu rosto",
"face_pitch_up": "Abaixe seu rosto",
"face_pitch_down": "Levante seu rosto",
"no_face_yaw": "Olhe para frente",
"no_face_roll": "Deixe sua cabeça reta",
"face_roll_left": "Incline sua cabeça para a esquerda",
"face_roll_right": "Incline sua cabeça para a direita",
"face_center_left": "Mova a câmera para a esquerda",
"face_center_right": "Mova a câmera para a direita",
"face_center_up": "Mova a câmera para cima",
"face_center_down": "Mova a câmera para baixo"
}
},
"feedback_colors": {
"alert": "#FF9902",
"luminosity": "#24B8C2",
"success": "#5FC213"
},
"brightness_validation": {
"timeout": 10,
"messages": {
"too_dark": "Melhore a iluminação",
"too_bright": "Diminua a luz no seu rosto"
}
}
}
},
"document_recognition": {
"camera_screen": {
"timeout": 60,
"automatic_capture_timeout": 20,
"close_button": {
"visible": true,
"position": "top-right"
},
"feedback_colors": {
"neutral": "#F44336",
"success": "#9C27B0"
},
"positioning_messages": {
"color": "#FFFFFF",
"loading_stroke_color": "#FFFFFF",
"font": {
"family": "Poppins-SemiBold"
},
"content": {
"start": "Encaixe seu documento\nna marcação",
"positioned": "Mantenha seu celular parado",
"out_of_frame": "Posicione seu documento\ndentro da área indicada",
"misaligned": "Deixe seu documento reto",
"not_detected": "Nenhum documento encontrado,\ntente posicionar novamente",
"too_far": "Aproxime a câmera\ndo seu documento",
"too_near": "Afaste a câmera\ndo seu documento",
"capturing": "Não se mova",
"wrong_face": "Mostre o verso do documento",
"tap_to_focus": "Toque na tela para focar"
}
},
"manual_capture_button": {
"content": "Tirar foto",
"background_color": "#00A594",
"text_color": "#FFFFFF",
"font": {
"family": "Poppins-SemiBold"
}
}
},
"review_screen": {
"title": {
"content": "Seu documento está\nnítido e legível?",
"color": "#FFFFFF",
"font": {
"family": "Poppins-SemiBold"
}
},
"confirm_button": {
"content": "Sim, enviar",
"background_color": "#367C14",
"text_color": "#FFFFFF"
},
"retry_button": {
"content": "Tirar nova foto",
"background_color": "#B3261E",
"text_color": "#FFFFFF"
}
}
},
"document_upload": {
"review_screen": {
"background_color": "#FFFFFF",
"close_button": {
"visible": true,
"position": "top-right"
},
"title": {
"content": "Confirme seu documento",
"color": "#000000",
"font": {
"family": "Poppins-SemiBold"
}
},
"description": {
"content": "Sua imagem deve estar com\nos dados legíveis e em boa qualidade.",
"color": "#AAAAAA",
"font": {
"family": "Poppins-Regular"
}
},
"confirm_button": {
"content": "Enviar documento",
"wait_message": "Aguarde",
"background_color": "#00A594",
"text_color": "#FFFFFF",
"font": {
"family": "Poppins-SemiBold"
}
},
"retry_button": {
"content": "Carregar novamente",
"text_color": "#00A594",
"font": {
"family": "Poppins-SemiBold"
}
}
}
}
}
Campos aceitos
| Campo | Descrição |
|---|---|
theme.appearance.font_family | Fonte padrão aplicada aos textos e botões suportados. |
theme.appearance.background_color | Cor de fundo padrão para telas suportadas. |
theme.appearance.orientation | Orientação da SDK: automatic, portrait ou landscape. |
theme.appearance.modal.enabled | Define abertura modal (true) ou fullscreen (false). |
face_recognition.instructions_screen | Customiza tela de instrução da captura facial. |
face_recognition.camera_screen | Customiza câmera da captura facial. |
document_recognition.camera_screen | Customiza câmera da captura de documentos. |
document_recognition.review_screen | Customiza tela de revisão da captura de documentos. |
document_upload.review_screen | Customiza tela de revisão do upload de documentos. |
Observações
- As cores devem ser informadas em hexadecimal, por exemplo
#00A594. - O nome passado em
setCustomizationdeve ser o nome do recurso no bundle sem.json. - Campos ausentes mantêm os valores padrão do SDK.
- No iOS,
font.sizeefont.weightpodem existir no JSON, mas apenasfont.familyé aplicado nos campos suportados. - Para imagens, como
face_recognition.camera_screen.logo, informe o nome de um asset do app integrador ou uma imagem em base64.
Modo Modal ou Fullscreen
Além das customizações de interface, também temos a opção de usar o nosso SDK em abertura de modal ou fullscreen, ambos funcionando tanto em orientação retrato quando em paisagem, com a responsividade se adequando ao cenário selecionado.
A SDK é exibida em modo tela cheia na orientação vertical (portrait) por padrão em todos os dispositivos suportados. Em tablets, é possível configurar a orientação para horizontal (landscape) ou automática, permitindo que a SDK se ajuste à orientação do dispositivo, além de configurar para exibição em modal.
Exemplos
Modo Modal (Portrait e Landscape)


Modo Fullscreen (Portrait e Landscape) - Valor padrão


Para configurar esses modos, é preciso alterar os seguintes atributos:
Kotlin
- Kotlin
- Java
- Swift
1-Ativação do modo modal
customizer.screenMode = ScreenMode.Modal
2-Ativação do modo fullscreen
customizer.screenMode = ScreenMode.FullScreen
3-Orientação
customizer.screenOrientation = ScreenOrientation.Automatic customizer.screenOrientation = ScreenOrientation.Landscape customizer.screenOrientation = ScreenOrientation.Portrait
1-Ativação do modo modal
customizer.setScreenMode(ScreenMode.Modal);
2-Ativação do modo fullscreen
customizer.setScreenMode(ScreenMode.FullScreen);
3-Orientação
customizer.setScreenOrientation(ScreenOrientation.Automatic); customizer.setScreenOrientation(ScreenOrientation.Landscape); customizer.setScreenOrientation(ScreenOrientation.Portrait);
1-Ativação do modo modal
customizer.screenMode.mode = .modal
2-Ativação do modo fullscreen
customizer.screenMode.mode = .fullscreen
3-Orientação
customizer.screenOrientation.mode = .automatic customizer.screenOrientation.mode = .portrait customizer.screenOrientation.mode = .landscape
No iOS, é necessário adicionar esta configuração no AppDelegate do aplicativo integrador para que o orientationManager consiga se adequar nos casos de rotação de tela.
import UIKit
class AppDelegate: UIResponder, UIApplicationDelegate {
(...)
var orientationLock = UIInterfaceOrientationMask.all
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
return self.orientationLock
}
}
Essas funcionalidades de modal e landscape estão disponíveis apenas para tablets. Quando configuradas e executadas em smartphones, a SDK adotará o comportamento de exibição em fullscreen na orientação portrait.