Pular para o conteúdo

Quick Start

Setup mínimo para captura autenticada.

  • 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_* ou pvv_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.

Três caminhos de captura. Os SDKs móveis (Android/iOS) rodam no dispositivo; a captura web roda no navegador do usuário.

// build.gradle — adicionar .aar
implementation(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.

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.

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.

  • 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