Quick Start
Setup mínimo para captura autenticada.
Pré-requisitos
Seção intitulada “Pré-requisitos”- Acesso ao Admin Console (solicite à equipe Provvi)
- API Key (
pvv_api_*) — gerada na seção “API Keys” do cliente no Admin Console. Usada apenas pelo seu backend (criação de sessões web); nunca deve descer ao frontend. - License Key (
pvv_live_*oupvv_sand_*) — gerada na seção “Licenças” do contrato no Admin Console. Usada pelos apps móveis e pelo componente web.
Credenciais de teste: Use License Keys com prefixo
pvv_sand_*(ambiente Sandbox) durante o desenvolvimento. O comportamento é idêntico à produção, sem cobrança.
Escolha sua integração
Seção intitulada “Escolha sua integração”Três caminhos de captura. Os SDKs móveis (Android/iOS) rodam no dispositivo; a captura web roda no navegador do usuário.
Android SDK
Seção intitulada “Android SDK”// build.gradle — adicionar .aarimplementation(files("libs/provvi-sdk-release.aar"))// Uma vez no startup (configure/provision são suspend — rode numa coroutine).// A licença é validada dentro de configure(); identidade do app é derivada// internamente (você não informa bundleId/cert).lifecycleScope.launch { ProvviSDK.configure( context = applicationContext, licenseKey = "pvv_live_SuaChaveAqui", operatorId = operatorId, // UUID do operador (onboarding) captureProfile = CaptureProfile.VEHICLE_INSPECTION, ) ProvviSDK.provisionDeviceIfNeeded()}
// Por captura — abre a tela de captura do SDK (registre um ActivityResultLauncher):ProvviSDK.startSecureCapture(launcher, this, MaskConfig(shape = MaskShape.RECTANGLE))
// No callback do launcher — leia o resultado uma vez:when (val outcome = ProvviSDK.consumeLastCaptureOutcome()) { is CaptureOutcome.Success -> { Log.d("Provvi", "Sessão: ${outcome.result.sessionId}") // outcome.result.authenticatedJpegBytes → JPEG com manifesto ICP-Brasil embutido } is CaptureOutcome.LicenseError -> { /* licença inválida */ } is CaptureOutcome.PermissionDenied -> { /* câmera/GPS negados */ } else -> { /* outros erros — ver errors.md */ }}Consulte Android SDK para a API completa.
iOS SDK
Seção intitulada “iOS SDK”import ProvviSDK
// Uma vez no startup. A licença é validada em configure(); Bundle ID + Team ID// são derivados internamente (você não os informa).try await ProvviSDK.configure( licenseKey: "pvv_live_SuaChaveAqui", operatorId: operatorId, // UUID do operador (onboarding) captureProfile: .vehicleInspection)_ = await ProvviSDK.provisionDeviceIfNeeded()
// Por captura — tela de captura SwiftUI do SDK:ProvviCaptureScreen( capturedBy: "operador-123", referenceId: "VIN-9BWZZZ377VT004251") { outcome in switch outcome { case .success(let result, _): print("Sessão: \(result.sessionId)") // result.authenticatedJpegData → JPEG com manifesto ICP-Brasil embutido case .licenseError(let reason): print("Erro de licença: \(reason)") case .permissionDenied: print("Permissão de câmera/GPS negada") default: break // outros erros — ver errors.md }}Consulte iOS SDK para a API completa.
Web (navegador)
Seção intitulada “Web (navegador)”A captura web tem uma jornada própria: seu backend cria a sessão, você embeda o componente <provvi-camera> na página (via CDN + importmap), o usuário captura e a Provvi devolve o resultado inline — a imagem autenticada no evento de conclusão.
Hosted Flow (fora no momento): a captura hospedada pela Provvi (sem frontend próprio) foi descontinuada e será redesenhada do zero com contrato próprio. Hoje a integração web é via componente Web SDK.
Próximos passos
Seção intitulada “Próximos passos”- Android SDK — API completa do SDK Android
- iOS SDK — API completa do SDK iOS
- Integração Web — jornada web em 6 passos, com backend, componente, erros e resultados
- Erros — códigos de erro por plataforma