Licenciamento
Sistema de licenciamento, ambientes, controle de volume e cache.
Credenciais — distinção importante
Seção intitulada “Credenciais — distinção importante”| Credencial | Formato | Local | Finalidade |
|---|---|---|---|
| API Key | pvv_api_* | Backend do integrador | Autenticar criação de sessões web (POST /web/sessions) |
| License Key | pvv_<env>_<base58> | Frontend / SDK | Validar licenciamento do SDK antes de cada captura |
| Token | UUID v4 | Transitório | Identificar uma sessão de captura específica |
A API Key é segredo de backend — expô-la no frontend permite que terceiros criem sessões na sua conta. A License Key é projetada para uso no frontend — o backend de licenciamento controla por volume de capturas e ambiente.
Ambientes
Seção intitulada “Ambientes”Cada licença pertence a um ambiente. O prefixo da chave identifica o ambiente:
| Ambiente | Prefixo | Uso | Características |
|---|---|---|---|
| Sandbox | pvv_sand_ | Desenvolvimento e testes | Volume ilimitado, integridade relaxada |
| Staging | pvv_stag_ | Homologação | Volume limitado, integridade ativa |
| Production | pvv_live_ | Produção | Volume limitado, integridade máxima |
Chaves de ambientes diferentes não são intercambiáveis. Uma chave pvv_sand_ não funciona em produção.
Fluxo de validação
Seção intitulada “Fluxo de validação”SDK (frontend/app) api.provvi.com.br──────────────── ──────────────────
1. POST /validate ──────────────────→ Verifica chave, contrato, { "license_key": "pvv_live_..." } volume, status do cliente
←──────────── { "valid": true, "environment": "PRODUCTION", "capture_resolution": "HD", ... }
2. SDK armazena em cache (1h)3. Captura permitidaQuando a validação ocorre
Seção intitulada “Quando a validação ocorre”| Momento | Comportamento |
|---|---|
| Primeiro uso | Validação obrigatória via rede |
| Dentro de 1 hora | Cache local, sem rede |
| Após 1 hora | Revalida via rede |
| Sem rede + cache < 24h | Grace period — usa cache expirado |
| Sem rede + cache > 24h | Bloqueio — LICENSE_NETWORK_ERROR |
License Policy
Seção intitulada “License Policy”A resposta de /validate retorna a policy que controla o comportamento do SDK:
| Campo | Tipo | Descrição |
|---|---|---|
valid | boolean | Se a licença é válida |
license_id | string | ID interno da licença (estável entre rotações) |
client_id | string | UUID do cliente (usado internamente) |
environment | string | PRODUCTION, STAGING, SANDBOX |
integrity_enforcement | string | Modo de aplicação da integridade |
capture_resolution | string | Resolução máxima de captura |
tsa_required | boolean | Se timestamp authority é obrigatório |
max_captures_per_session | number? | Limite por sessão (null = ilimitado) |
captures_used | number | Total de capturas no período atual |
volume_limit | number | Limite mensal de capturas |
expires_at | string | Data de expiração do contrato |
Integrity Enforcement
Seção intitulada “Integrity Enforcement”| Modo | Comportamento |
|---|---|
BLOCK | Dispositivo comprometido → captura bloqueada |
WARN | Dispositivo comprometido → captura prossegue, risco registrado |
IGNORE | Verificação de integridade ignorada |
Capture Resolution
Seção intitulada “Capture Resolution”| Valor | Resolução | Megapixels |
|---|---|---|
SD | 1280 x 720 | ~0.9 MP |
HD | 1920 x 1080 | ~2.0 MP |
FHD | 2560 x 1440 | ~3.7 MP |
MAX | Nativa do dispositivo | Variável |
Controle de volume
Seção intitulada “Controle de volume”O volume de capturas é rastreado mensalmente por licença.
Como funciona
Seção intitulada “Como funciona”- Cada captura incrementa o contador no backend
- O SDK envia
POST /usage/incrementapós cada captura bem-sucedida - Se o volume exceder o limite: próxima validação retorna
VOLUME_EXCEEDED - O SDK invalida o cache local e bloqueia novas capturas
Alertas automáticos
Seção intitulada “Alertas automáticos”O backend emite alertas nos seguintes thresholds:
| Threshold | Alerta |
|---|---|
| 70% do volume | VOLUME_70 — aviso preventivo |
| 90% do volume | VOLUME_90 — ação recomendada |
| 100% do volume | VOLUME_100 — limite atingido |
Os alertas aparecem no Admin Console e podem ser consultados via API.
Rotação de chaves
Seção intitulada “Rotação de chaves”Chaves de licença podem ser rotacionadas no Admin Console sem interrupção:
- Admin rotaciona no console → nova chave gerada
- Chave antiga continua válida por 1 captura (grace)
- Integrador atualiza a chave no código/config
- Nova chave passa a ser usada nas próximas validações
O
license_idpermanece estável entre rotações — o rastreamento de volume não é afetado.
Revogação
Seção intitulada “Revogação”Revogar uma licença bloqueia imediatamente todas as capturas usando aquela chave:
- Admin revoga no console
- Próxima validação retorna
{ "valid": false, "reason": "REVOKED" } - SDK limpa cache e bloqueia
- Alerta
REVOKEDemitido no Admin Console
A revogação não pode ser desfeita. Para reativar, crie uma nova licença.
Cache — detalhes por plataforma
Seção intitulada “Cache — detalhes por plataforma”| Plataforma | Armazenamento | Chave do cache |
|---|---|---|
| Android | SharedPreferences | provvi_license_cache_{hashCode(licenseKey)} |
| iOS | UserDefaults | provvi_license_cache (Codable) |
| Web | Não persistido | Em memória durante a sessão do componente |
Invalidação do cache
Seção intitulada “Invalidação do cache”O cache é invalidado automaticamente quando:
- TTL de 1 hora expira
- Volume excedido é detectado
- SDK chama
invalidateLicenseCache()/LicenseValidator.clearCache() - Licença é rotacionada (novo hash da chave)
Obter suas credenciais
Seção intitulada “Obter suas credenciais”- Acesse o Admin Console
- Navegue até Clientes → Seu cliente
- Na seção Licenças, copie a License Key (para o SDK)
- Na seção API Keys, crie uma API Key (para o backend)
Ambas as chaves são exibidas uma única vez ao serem criadas — armazene-as com segurança.
Ambientes de teste
Seção intitulada “Ambientes de teste”Para desenvolvimento, use chaves pvv_sand_*:
- Sem cobrança
- Volume ilimitado
- Integridade relaxada (jailbreak/root não bloqueia)
- Mesmo fluxo funcional da produção