DocumentDetector v7.x e acima
Requisitos
Flutter
1.20+
Dart
>=2.15.0 <4.0.0
minSdk
26
compileSdk
34
Alvo do iOS
13.0+
Xcode
15.4+
Swift
5.3.2+
Dependências dos SDKs nativos
dependencies {
// Básico
implementation "androidx.appcompat:appcompat:1.1.0"
// Design
implementation "com.google.android.material:material:1.2.1"
implementation "androidx.constraintlayout:constraintlayout:2.0.1"
// Detecção de documentos
implementation "org.tensorflow:tensorflow-lite:2.11.0"
implementation "org.tensorflow:tensorflow-lite-support:0.4.3"
// SecurityProvider
implementation "com.google.android.gms:play-services-basement:18.3.0"
// HTTP e desserializador
implementation "com.squareup.retrofit2:retrofit:2.9.0"
implementation "com.squareup.retrofit2:converter-gson:2.9.0"
implementation "com.squareup.okhttp3:okhttp:4.9.3"
implementation "com.squareup.okhttp3:okhttp-tls:4.9.3"
//exifInterface
implementation "androidx.exifinterface:exifinterface:1.0.0"
// Biblioteca principal CameraX usando a implementação camera2
// A linha a seguir é opcional, pois a biblioteca principal é incluída indiretamente por camera-camera2
implementation "androidx.camera:camera-core:1.1.0"
implementation "androidx.camera:camera-camera2:1.1.0"
// Se você quiser usar adicionalmente a biblioteca CameraX Lifecycle
implementation "androidx.camera:camera-lifecycle:1.1.0"
// Se você quiser usar adicionalmente a classe View do CameraX
implementation "androidx.camera:camera-view:1.1.0"
// Verificações de root
implementation "com.scottyab:rootbeer-lib:0.0.8"
// Commons Imaging (para imagens, dados EXIF e assim por diante. anteriormente conhecido como Apache Commons Sanselan)
implementation "org.apache.commons:commons-imaging:1.0-alpha3"
// Kotlin
implementation "androidx.core:core-ktx:1.7.0"
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.5.31"
}
Permissões em tempo de execução
Estas são as permissões de tempo de execução do Android:
CÂMERA
Para capturar fotos dos documentos
Necessário apenas no fluxo de captura pela câmera
READ_EXTERNAL_STORAGE
Para acessar o armazenamento externo do dispositivo e selecionar documentos no fluxo de upload. Esta permissão é necessária apenas para versões inferiores à API33
Necessário apenas no fluxo de envio
Estas são as permissões de tempo de execução do iOS:
Privacidade - Descrição de Uso da Câmera
Para capturar a(s) foto(s) do documento
Necessário apenas no fluxo de captura pela câmera
Privacidade - Descrição de Uso da Biblioteca de Fotos
Para realizar a abertura da galeria
Necessário apenas no fluxo de envio
Configurações da plataforma
Se a sua versão do Gradle for anterior à 7, adicione estas linhas ao seu build.gradle.
Se a sua versão do Gradle for 7 ou mais recente, adicione estas linhas ao seu settings.gradle.
Adicione suporte ao Java 8 (ignore este código se o Java 8 estiver habilitado) e ao TensorFlow Model ao seu build.gradle arquivo.
O compileOptions a configuração é necessária para as funções lambda internas do SDK, que foram lançadas no Java 8. A noCompress configuração diz ao compilador para não compactar arquivos com a .tflite extensão usada no DocumentDetector.
Para personalizar a cor principal do SDK, você precisa garantir que a biblioteca Material Design esteja importada no seu app. Adicione a seguinte dependência ao seu arquivo build.gradle:
No info.plist arquivo, adicione as permissões abaixo:
Privacidade - Descrição de Uso da Câmera
Para capturar a(s) foto(s) do documento
Necessário apenas no fluxo de captura pela câmera
Privacidade - Descrição de Uso da Biblioteca de Fotos
Para realizar a abertura da galeria
Necessário apenas no fluxo de envio
Nosso SDK tem traduções para três idiomas (inglês, português e espanhol). Para garantir que ele funcione corretamente de acordo com o idioma do seu sistema operacional, adicione o seguinte ao Info.plist do seu app (se ainda não tiver feito isso):
Observe que o framework gerado para a implementação iOS do nosso SDK é estático. Este é um detalhe importante a considerar durante o desenvolvimento.
Motivo: o uso de um framework estático se deve à nossa dependência da TensorFlowLiteSwift biblioteca.
Essa abordagem foi escolhida para proporcionar uma melhor experiência de desenvolvimento, garantindo integração suave e desempenho ideal.
Documentos suportados
Atualmente, os documentos suportados são:
Instanciando o SDK
Para criar uma DocumentDetector instância, dois parâmetros obrigatórios devem ser fornecidos:
mobileToken
Token de uso associado à sua conta CAF
captureFlow
Define o fluxo de captura do documento. Crie uma List<DocumentCaptureFlow> para configurar cada etapa de captura.
DocumentCaptureFlow
Cada DocumentCaptureFlow elemento da lista será uma etapa de captura.
O DocumentCaptureFlow a classe tem as seguintes configurações:
DocumentType documentType
Identifica qual documento será solicitado para captura na respectiva etapa. Você pode escolher na Documentos suportados lista.
InstructionalPopupSettingsAndroid? androidCustomization
Personalize a ilustração e o rótulo do documento no popup instrucional para dispositivos Android.
String? documentLabel
Altere o rótulo do documento exibido no popup. Para personalizar isso, basta fornecer um String elemento.
String? documentIllustration
Altere a ilustração do documento exibida no popup. Para personalizar isso, você deve fornecer o nome do arquivo com a ilustração personalizada que você criou na res/drawable pasta do seu app Android.
InstructionalPopupSettingsIOS? iOSCustomization
Personalize a ilustração e o rótulo do documento no popup instrucional para dispositivos iOS.
String? documentLabel
Altere o rótulo do documento exibido no popup. Para personalizar isso, você só precisa fornecer um String elemento.
String? documentIllustration
Altere a ilustração do documento exibida no popup. Para personalizar isso, você deve fornecer o nome do Image Set com a ilustração personalizada que você criou no Asset Catalog do seu app iOS.
Exemplo de implementação
Este é um exemplo de como instanciar o SDK e capturar seus resultados:
Opções do DocumentDetector
setStage(CafStage stage)
Usado para redirecionar o SDK para o ambiente desejado na API CAF.
Opções
CafStage.beta CafStage.prod
Configuração padrão
CafStage.prod
setUseAnalytics(bool useAnalytics)
Habilita/desabilita a coleta de dados para fins de análise - logs em casos de bugs e erros ou identificação de perfil de fraude.
Configuração padrão
true
setPersonId(String personId)
Define o identificador do usuário para fins de identificação de perfil de fraude e para auxiliar na identificação de logs de Analytics em casos de bugs e erros.
setNetworkSettings(int requestTimeoutInSeconds)
Define o tempo limite das solicitações. Esse valor é representado em segundos.
Configuração padrão
Por padrão, o tempo limite é 60s.
setUrlExpirationTime(String urlExpirationTime)
Define o tempo que a URL da imagem permanecerá no servidor até expirar. Espere receber um intervalo de tempo entre 30m para 30d.
urlExpirationTime exemplo
30m: Para definir apenas minutos24h: Para definir apenas hora(s)1h 10m: Para definir hora(s) e minuto(s)10d: Para definir dia(s)
Configuração padrão
Por padrão, está definido para 3h.
setDisplayPopup(bool displayPopup)
Ativa/Desativa a pré-visualização com popup das instruções antes de cada etapa de captura de documento.
Configuração padrão
true
setCurrentStepDoneDelayAndroid(bool enableDelay, int millisecondsDelay)
Adie a atividade após a conclusão de cada etapa de captura. Esse valor é representado em milissegundos.
Configuração padrão
Por padrão, não há atraso.
setCurrentStepDoneDelayIOS(int secondsDelay)
Adie a visualização após a conclusão de cada etapa de captura. Esse valor é representado em segundos.
Configuração padrão
Por padrão, não há atraso.
setPreviewSettings(PreviewSettings previewSettings)
Ativa/desativa a pré-visualização da foto do documento para o usuário, para que ele possa verificar se está tudo ok antes de enviá-la.
Crie um arquivo PreviewSettings elemento com as configurações desejadas.
Configuração padrão
Por padrão, a pré-visualização está desativada.
Opções de PreviewSettings
bool show
Ativa/Desativa o recurso de pré-visualização da captura do documento.
String? title
Personalize o título da visualização.
String? subtitle
Personalize o subtítulo da visualização.
String? confirmButtonLabel
Personalize o texto do botão de confirmação. Esse botão permite ao usuário confirmar e enviar a captura do documento.
String? retryButtonLabel
Personalize o texto do botão de tentar novamente. Esse botão permite ao usuário fazer outra captura.
setMessageSettings(MessageSettings messageSettings)
Configure mensagens personalizadas que são exibidas durante o processo de captura e análise.
Opções de MessageSettings
String? waitMessage
Mensagem exibida no processo de abertura.
Padrão: "Aguarde…"
String? fitTheDocumentMessage
Mensagem que aconselha a encaixar o documento na marcação.
Padrão: "Encaixe o documento na marcação"
verifyingQualityMessage
Mensagem exibida quando está verificando a qualidade da captura.
Padrão: "Verificando a qualidade…"
String? lowQualityDocumentMessage
Mensagem exibida quando a qualidade da captura é baixa.
Padrão: "Ops, não foi possível ler as informações. Tente novamente."
String? uploadingImageMessage
Mensagem exibida quando a captura está sendo enviada aos servidores.
Padrão: "Enviando imagem…"
String? sensorOrientationMessage
Mensagem exibida quando a orientação do dispositivo está errada.
Padrão: "Aponte a câmera para baixo"
String? sensorLuminosityMessage
Mensagem exibida quando o brilho ambiente é menor do que o esperado.
Padrão: "A área ao seu redor está muito escura"
String? sensorStabilityMessage
Mensagem exibida quando o parâmetro de estabilidade do dispositivo indica balanço excessivo.
Padrão: "Mantenha o dispositivo parado"
String? popupDocumentSubtitleMessage
Mensagem exibida no popup instrucional, fornecendo orientações sobre como obter a melhor captura do documento.
Padrão: "Coloque o documento sobre uma mesa, centralize-o na marcação e aguarde a captura automática."
String? scanDocumentMessage
Mensagem exibida para solicitar que um documento esteja visível na câmera.
Padrão: "Escaneie um documento"
String? getCloserMessage
Mensagem exibida para solicitar ao usuário que aproxime a câmera do documento.
Padrão: "Aproxime-se do documento"
String? centralizeDocumentMessage
Mensagem exibida para solicitar ao usuário que centralize o documento dentro do enquadramento da câmera.
Padrão: "Centralize o documento"
String? moveAwayMessage
Mensagem exibida para solicitar ao usuário que afaste a câmera do documento.
Padrão: "Afaste-se do documento"
String? alignDocumentMessage
Mensagem exibida para solicitar ao usuário que alinhe o documento dentro do enquadramento da câmera.
Padrão: "Alinhe o documento"
String? turnDocumentMessage
Mensagem exibida para solicitar ao usuário que gire o documento em 90 graus.
Padrão: "Gire o documento 90 graus"
String? documentCapturedMessage
Mensagem exibida para notificar que o documento foi capturado com sucesso.
Padrão: "Documento capturado"
String? holdItMessage
Apenas para Android Mensagem exibida no momento em que a captura está sendo realizada.
Padrão: "Mantenha assim"
String? popupConfirmButtonMessage
Apenas para Android Personalize o texto do botão de confirmação no popup instrucional.
Padrão: "OK, entendi"
String? wrongDocumentTypeMessage
Apenas para Android Mensagem exibida quando o documento mostrado pelo usuário não é o esperado para a captura.
Padrão: "Ops, este documento não é ${rótulo do documento esperado}"
String? unsupportedDocumentMessage
Apenas para Android Mensagem exibida para informar ao usuário que o documento exibido não é suportado.
Padrão: "Ops, parece que este documento não é suportado."
String? documentNotFoundMessage
Apenas para Android Mensagem exibida para notificar que nenhum documento foi detectado.
Padrão: "Não foi encontrado nenhum documento."
setUploadSettings(UploadSettings uploadSettings)
Define a configuração para o fluxo de envio de documentos. Ao ativar essa opção, o usuário será solicitado a enviar o arquivo do documento em vez de capturá-lo com a câmera do dispositivo. Essa opção também inclui verificações de qualidade.
Crie um arquivo UploadSettings elemento com as configurações desejadas.
Configuração padrão
Por padrão, esse recurso está desativado.
Opções de UploadSettings
bool? compress
Ativa/desativa a compressão do arquivo antes do envio. Se ativada, ela segue as definições de Android e iOS para qualidade de compressão:
List<FileFormatAndroid>? fileFormatsAndroid
Define o formato de arquivo que será aceito para upload. As opções são:
.pdf, .jpg, .jpeg, .png, .heif.
List<FileFormatIOS>? fileFormatsIOS
Define o formato de arquivo que será aceito para upload. As opções são:
.pdf, .jpeg, .png.
int? maxFileSize
Especifica o tamanho máximo do arquivo para upload, em kilobytes (kB).
1000kB = 1MB.
O valor padrão é 10MB.
setCountryCodeList(List<CountryCodesList>? countryCodeList)
Restrinja a aceitação de documentos de passaporte àqueles emitidos apenas por um país específico ou por uma lista predefinida de países.
Crie um arquivo List<CountryCodesList> com os códigos dos países desejados.
countryCodeList exemplo
setAndroidSettings(AndroidSettings androidSettings)
Defina as configurações exclusivas da plataforma Android.
Crie um AndroidSettings elemento com as configurações desejadas.
opções AndroidSettings
SensorSettingsAndroid? sensorSettings
Configure os parâmetros do sensor de luminosidade ambiente, orientação do dispositivo e estabilidade para garantir que o documento seja capturado em condições ideais.
int? luminositySensorSettings
Define o limite entre brilho ambiente aceitável/inaceitável.
Quanto menor o valor definido, menos sensível o sensor de orientação será.
Defina disableLuminositySensor: true se você não quiser usar este sensor.
Configuração padrão
As configurações padrão são 5 lx.
double? orientationSensorSettings
Define o limite entre orientação correta/incorreta do dispositivo.
Quanto maior o valor definido, menos sensível o sensor de orientação será.
Defina disableOrientationSensor: true se você não quiser usar este sensor.
Configuração padrão
A configuração padrão é 3.0 m/s²
StabilitySensorSettings? stabilitySensorSettings
Define as configurações do sensor de estabilidade.
double stabilityThreshold
Define o limite entre estável/instável, na variação em m/s² entre as duas últimas coletas do sensor. Quanto maior o valor definido, menos sensível o sensor de estabilidade será.
int stabilityDurationMillis
Especifica a duração, em milissegundos, que o dispositivo deve permanecer parado para ser considerado estável.
Defina disableStabilitySensor: true se você não quiser usar este sensor.
Configuração padrão
A configuração padrão é stabilityDurationMillis: 2000 e stabilityThreshold: 0.5
List<CaptureStage>? captureStages
CaptureStage é um recurso que determina o nível de exigência para a captura do documento. Assim que o fluxo de captura de documento começa, um temporizador é ativado. Durante o tempo definido, as configurações especificadas em cada uma das etapas configuradas são aplicadas. É possível definir uma lista de CaptureStages para aliviar gradualmente os requisitos de captura do documento ao longo do tempo. Esse recurso existe devido à diversidade de hardware de câmera em dispositivos Android, evitando que o usuário fique preso no fluxo de captura de documento durante seu onboarding.
captureStages exemplo
Configuração padrão
A configuração padrão consiste na seguinte ordem de CaptureStages:
CaptureStage 1:
captureMode: CaptureMode.automatic,wantSensorCheck: true,durationMillis: 30000;CaptureStage 2:
captureMode: CaptureMode.automatic,wantSensorCheck: false,durationMillis: 15000;CaptureStage 3:
captureMode: CaptureMode.manual,wantSensorCheck: false,durationMillis: null;
int? compressQuality
Defina a qualidade no processo de compressão. Por padrão, todas as capturas passam por compressão.
O valor deve estar entre 80 e 100, em que 100 é a maior qualidade de compressão.
Configuração padrão
A qualidade padrão de compressão é 90.
AndroidCameraResolution? cameraResolution
Defina a resolução da captura do documento.
As opções são fullHd, quadHd e ultraHd.
Configuração padrão
Por padrão, a resolução é fullHd.
SecuritySettings? securitySettings
Estamos constantemente tomando medidas para tornar o produto cada vez mais seguro, mitigando uma série de ataques observados no processo de captura e, consequentemente, reduzindo o máximo possível de fraudes de identidade. O SDK possui alguns bloqueios que podem impedir sua execução em determinados contextos. Você pode desativar essas validações para fins de teste.
Desativar as validações de segurança é recomendado apenas para fins de teste. Para publicar seu aplicativo em produção, recomendamos usar as configurações padrão.
Para configurar as validações de segurança, você pode usar estas opções:
bool? enableGoogleServices
Permite ativar ou desativar recursos do SDK que utilizam os Serviços do Google.
bool? useRoot
Permite ativar ou desativar o SDK para ser executado em dispositivos com root.
bool? useEmulator
Permite ativar ou desativar o SDK para ser executado em dispositivos emulados.
bool? useDeveloperMode
Permite ativar ou desativar o SDK para ser executado em dispositivos com o modo de desenvolvedor ativado.
bool? useAdb
Permite ativar ou desativar o SDK para ser executado no modo de depuração Android Debug Bridge (ADB).
bool? useDebug
Permite ativar ou desativar o SDK para ser executado em um aplicativo em modo de depuração.
Configuração padrão
String? customStyle
Defina o estilo personalizado do seu app para alterar a cor primária do SDK.
Para personalizar, crie um style.xml arquivo de recurso no seu app e adicione este trecho de estilo a ele, substituindo os valores dentro dos placeholders:
FeedbackColorsAndroid? feedbackColors
Personalize as cores de feedback da interface a serem exibidas.
Para personalizar as cores de feedback da interface no seu app, siga estas etapas:
Crie um arquivo
colors.xmlarquivo de recurso no diretóriores/valuesdo seu app.Defina as cores para os diferentes tipos de feedback:
padrão,sucessoeerror.
Aqui está uma versão aprimorada do colors.xml arquivo com placeholders para os valores hexadecimais das cores:
setIOSSettings(IOSSettings iosSettings)
Defina configurações exclusivas da plataforma iOS.
Crie um IOSSettings elemento com as configurações desejadas.
SensorSettingsIOS? sensorSettings
Configure os parâmetros de limiar do sensor de luminosidade ambiente, orientação do dispositivo e estabilidade para garantir que o documento seja capturado em condições ideais.
double? luminositySensorSettings
Define o limite entre brilho ambiente aceitável/inaceitável.
Quanto menor o valor definido, menos sensível o sensor de orientação será.
Configuração padrão
A configuração padrão é -3.
double? orientationSensorSettings
Define o limite entre orientação correta/incorreta do dispositivo com base na variação das duas últimas leituras do sensor acelerômetro coletadas do dispositivo.
Quanto maior o valor definido, menos sensível o sensor de orientação será.
Configuração padrão
A configuração padrão é 0.3.
double? stabilitySensorSettings
Define o limite entre dispositivo estável/instável com base na variação das duas últimas leituras do sensor giroscópio coletadas do dispositivo.
Quanto maior o valor definido, menos sensível o sensor de estabilidade será.
Configuração padrão
A configuração padrão é 0.3.
double? captureCompressionQuality
Defina a qualidade no processo de compressão. Por padrão, todas as capturas passam por compressão. O método espera valores entre 0.8 e 1.0 como parâmetro, em que 1.0 é a melhor qualidade de compressão.
Configuração padrão
A qualidade padrão de compressão é 0.9.
bool? enableManualCapture
Ative a opção de captura manual. Com esta configuração ativado, você pode especificar o tempo - em segundos - até que a captura manual seja ativada usando o manualCaptureActivationDelay parâmetro.
Configuração padrão
Por padrão, a captura manual está definida como false.
Em dispositivos abaixo do iOS 13, este recurso está sempre true, não há captura automática.
int? manualCaptureActivationDelay
Defina o atraso de tempo para habilitar a opção de captura manual para o usuário.
Para habilitar o recurso de captura manual, use enableManualCapture: true parâmetro.
Configuração padrão
Por padrão, o temporizador é definido como 45 segundos.
bool? enableMultiLanguage
Esta configuração ativa ou desativa o suporte a vários idiomas (inglês, espanhol, português brasileiro). Se desativado, o idioma padrão será o português brasileiro.
Configuração padrão
true
IOSCameraResolution? cameraResolution
Defina a resolução da captura do documento.
As opções são fullHd e ultraHd.
Configuração padrão
Por padrão, a resolução é fullHd.
CustomLayoutIOS? customLayout
Personalize as configurações de layout do seu app iOS.
Nessas opções você pode alterar a cor dos botões, a cor dos feedbacks da interface e a fonte do app.
Resultados do DocumentDetectorEvent
DocumentDetectorEvent é uma classe abstrata que representa diferentes tipos de eventos.
É usada para criar uma instância de uma das subclasses de evento com base em uma entrada de mapa, que vem do resultado do SDK.
Dependendo do tipo de evento, cria uma instância de DocumentDetectorEventClosed, DocumentDetectorEventSuccess, ou DocumentDetectorEventFailure. Se o evento não for reconhecido, lança uma exceção interna.
Essa configuração permite uma forma estruturada e segura em relação a tipos para lidar com diferentes resultados do processo de captura de documento no SDK.
DocumentDetectorEventClosed
Esta classe representa um evento em que a captura do documento foi encerrada pelo usuário, seja ao pressionar o botão de fechar no canto superior direito ou ao enviar o app para segundo plano.
DocumentDetectorEventSuccess
Esta classe representa um evento de captura de documento bem-sucedido. O documento do usuário foi capturado com sucesso, e as URLs para download das capturas foram retornadas. Inclui:
List<Capture>? captures
Uma lista de Captura objetos que representam os documentos capturados. Captura inclui:
String? imagePath
Caminho completo do arquivo de imagem no dispositivo do usuário.
String? imageUrl
URL do arquivo do documento no servidor da Caf. Esta URL tem um tempo de expiração, que pode ser definido com o setUrlExpirationTime método.
String? label
Rótulo do documento capturado, por exemplo: cnh_front, rg_back, passport...
double? quality
Qualidade inferida pelo algoritmo de qualidade do documento, variando entre 0 e 5.
String? documentType
O tipo do documento capturado
String? trackingId
Um ID para rastrear a execução da captura.
DocumentDetectorEventFailure
Esta classe representa uma falha no processo de captura de documento. O documento do usuário não foi capturado com sucesso, o errorType e errorMessage parâmetro contém o motivo da falha. Inclui:
String? errorType
Informações sobre o tipo de erro retornado pelo SDK. Abaixo estão os tipos de erro e suas causas:
AvailabilityReason
O SDK ainda não está disponível para uso. O errorMessage parâmetro trará mais instruções.
O armazenamento interno do dispositivo está cheio ao instalar o app, e o modelo de detecção facial não pode ser instalado junto.
InvalidTokenReason
O token informado não é válido para o produto correspondente.
Se você estiver usando um token expirado ou inexistente.
LibraryReason
Quando uma biblioteca interna do SDK não pode ser iniciada.
Esquecer de definir o aaptOptions noCompress configuração causará essa falha no DocumentDetector.
NetworkReason
Falha na conexão com a internet.
O usuário estava sem internet durante a execução do SDK.
PermissionReason
Está faltando alguma permissão obrigatória para executar o SDK.
Iniciar o SDK sem a permissão da câmera concedida.
SecurityReason
Quando o SDK não pode ser iniciado por um motivo de segurança.
Quando o dispositivo está com root. Consulte código de erro de segurança para mais motivos.
ServerReason
Quando uma solicitação do SDK recebe um código de status de falha.
Se uma API interna estiver instável.
StorageReason
Não há espaço no armazenamento interno do dispositivo do usuário.
Quando não há espaço no armazenamento interno durante a captura da foto do documento.
InvalidTokenReason
O token informado não é válido para o produto correspondente.
Se você estiver usando um token expirado ou inexistente.
NetworkReason
Falha na conexão com a internet.
O usuário estava sem internet durante a execução do SDK.
PermissionReason
Está faltando alguma permissão obrigatória para executar o SDK.
Iniciar o SDK sem a permissão da câmera concedida.
ServerReason
Quando uma solicitação do SDK recebe um código de status de falha.
Se uma API interna estiver instável.
StorageReason
Não há espaço no armazenamento interno do dispositivo do usuário.
Quando não há espaço no armazenamento interno durante a captura da foto do documento.
String? errorMessage
Uma mensagem que descreve o erro.
int? securityErrorCode
Um código de erro específico do Android, indicando o tipo de falha na validação de segurança:
100- bloqueando dispositivos emulados;200- bloqueando dispositivos com root;300- bloqueando dispositivos com opções de desenvolvedor ativadas;400- bloqueando dispositivos com ADB ativado;500- bloqueando dispositivos com depuração ativada;
Atualizado

