Pular para o conteúdo

Licenciamento

Sistema de licenciamento, ambientes, controle de volume e cache.

CredencialFormatoLocalFinalidade
API Keypvv_api_*Backend do integradorAutenticar criação de sessões web (POST /web/sessions)
License Keypvv_<env>_<base58>Frontend / SDKValidar licenciamento do SDK antes de cada captura
TokenUUID v4TransitórioIdentificar 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.


Cada licença pertence a um ambiente. O prefixo da chave identifica o ambiente:

AmbientePrefixoUsoCaracterísticas
Sandboxpvv_sand_Desenvolvimento e testesVolume ilimitado, integridade relaxada
Stagingpvv_stag_HomologaçãoVolume limitado, integridade ativa
Productionpvv_live_ProduçãoVolume limitado, integridade máxima

Chaves de ambientes diferentes não são intercambiáveis. Uma chave pvv_sand_ não funciona em produçã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 permitida
MomentoComportamento
Primeiro usoValidação obrigatória via rede
Dentro de 1 horaCache local, sem rede
Após 1 horaRevalida via rede
Sem rede + cache < 24hGrace period — usa cache expirado
Sem rede + cache > 24hBloqueio — LICENSE_NETWORK_ERROR

A resposta de /validate retorna a policy que controla o comportamento do SDK:

CampoTipoDescrição
validbooleanSe a licença é válida
license_idstringID interno da licença (estável entre rotações)
client_idstringUUID do cliente (usado internamente)
environmentstringPRODUCTION, STAGING, SANDBOX
integrity_enforcementstringModo de aplicação da integridade
capture_resolutionstringResolução máxima de captura
tsa_requiredbooleanSe timestamp authority é obrigatório
max_captures_per_sessionnumber?Limite por sessão (null = ilimitado)
captures_usednumberTotal de capturas no período atual
volume_limitnumberLimite mensal de capturas
expires_atstringData de expiração do contrato
ModoComportamento
BLOCKDispositivo comprometido → captura bloqueada
WARNDispositivo comprometido → captura prossegue, risco registrado
IGNOREVerificação de integridade ignorada
ValorResoluçãoMegapixels
SD1280 x 720~0.9 MP
HD1920 x 1080~2.0 MP
FHD2560 x 1440~3.7 MP
MAXNativa do dispositivoVariável

O volume de capturas é rastreado mensalmente por licença.

  1. Cada captura incrementa o contador no backend
  2. O SDK envia POST /usage/increment após cada captura bem-sucedida
  3. Se o volume exceder o limite: próxima validação retorna VOLUME_EXCEEDED
  4. O SDK invalida o cache local e bloqueia novas capturas

O backend emite alertas nos seguintes thresholds:

ThresholdAlerta
70% do volumeVOLUME_70 — aviso preventivo
90% do volumeVOLUME_90 — ação recomendada
100% do volumeVOLUME_100 — limite atingido

Os alertas aparecem no Admin Console e podem ser consultados via API.


Chaves de licença podem ser rotacionadas no Admin Console sem interrupção:

  1. Admin rotaciona no console → nova chave gerada
  2. Chave antiga continua válida por 1 captura (grace)
  3. Integrador atualiza a chave no código/config
  4. Nova chave passa a ser usada nas próximas validações

O license_id permanece estável entre rotações — o rastreamento de volume não é afetado.


Revogar uma licença bloqueia imediatamente todas as capturas usando aquela chave:

  1. Admin revoga no console
  2. Próxima validação retorna { "valid": false, "reason": "REVOKED" }
  3. SDK limpa cache e bloqueia
  4. Alerta REVOKED emitido no Admin Console

A revogação não pode ser desfeita. Para reativar, crie uma nova licença.


PlataformaArmazenamentoChave do cache
AndroidSharedPreferencesprovvi_license_cache_{hashCode(licenseKey)}
iOSUserDefaultsprovvi_license_cache (Codable)
WebNão persistidoEm memória durante a sessão do componente

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)

  1. Acesse o Admin Console
  2. Navegue até Clientes → Seu cliente
  3. Na seção Licenças, copie a License Key (para o SDK)
  4. 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.

Para desenvolvimento, use chaves pvv_sand_*:

  • Sem cobrança
  • Volume ilimitado
  • Integridade relaxada (jailbreak/root não bloqueia)
  • Mesmo fluxo funcional da produção