# Integração de aplicativo com Launch e Licentivo

Este guia aplica-se ao provedor Licentivo. Para conectar um sistema de licenciamento próprio do comerciante sem Licentivo, use [a API de licenciamento personalizado e fluxo de integração](/pt/launch-documents/external-licensing/), selecione `custom_http` para produto/ambiente e mantenha o SDK de execução desse sistema.

Estas mudanças locais não publicadas usam troca de identidade de conta. Consulte [o contrato de responsabilidades e sincronização de compras](/pt/launch-documents/account-purchase-boundary/) para migração e revogação de sessão no servidor. Números de versão dos pacotes não foram publicados ou atualizados por esta mudança.

O Launch é responsável por contas de comerciantes, pedidos, preços, cotações de renovação/upgrade, reembolsos e datas absolutas compradas. O Licentivo é responsável por licenças, políticas, franquias de dispositivos, sessões de autorização, permissões assinadas e decisões de execução. Um login Launch bem-sucedido ou compra sincronizada nunca é permissão para executar trabalho protegido.

Use a página administrativa de integração para obter a chamada de conexão direta e chaves públicas fixadas do produto. Os wrappers das nove linguagens contêm o SDK oficial. Chaves de gerenciamento do comerciante e de pagamento permanecem no servidor. Configurações públicas do produto não contêm credenciais de clientes, IDs de dispositivos, caminhos de cache ou asserções de identidade.

## Troca de conta

```mermaid
sequenceDiagram
    participant App as Application
    participant Launch as Launch server
    participant SDK as Official Licentivo SDK
    participant Lic as Licentivo server
    App->>Launch: Account login
    Launch-->>App: Account session
    App->>Launch: POST /software/products/{id}/identity
    Launch-->>App: Short-lived signed identity assertion
    App->>SDK: In-memory identity + connection + environment
    SDK->>Lic: POST /launch/exchange
    Lic-->>SDK: Restricted device credential + signed permission + logout ticket
    App->>SDK: RunFeature around every protected action
```

O wrapper solicita `POST /api/v1/software/products/{id}/identity` com `{"environment":"sandbox"}` ou `live`. A asserção de identidade retornada dura no máximo 120 segundos e é vinculada a emissor registrado, audience, sessão real de login, produto, ambiente e referência de compra. Não contém grants de recursos, franquia de dispositivos ou política offline.

O SDK oficial recebe estes valores em memória:

```json
{
  "product_id": "LICENTIVO_PRODUCT_UUID",
  "trusted_keys": {"SIGNING_KEY_ID": "PINNED_PUBLIC_KEY"},
  "launch_connection_id": "LICENTIVO_LAUNCH_CONNECTION_UUID",
  "environment": "sandbox",
  "identity_token": "SHORT_LIVED_ASSERTION_FROM_LAUNCH",
  "license_key": ""
}
```

Não grave esta configuração de execução em arquivo público nem persista sua asserção em registro de conta. Registros lembrados Launch v2 armazenam apenas a sessão da conta e o contexto público de roteamento. O endpoint antigo de cliente `/credential` retorna HTTP 410.

## Ciclo de vida e armazenamento

- `Login`: autenticar a conta, solicitar nova asserção, iniciar o SDK oficial.
- `Restore`: confirmar online a conta lembrada, solicitar nova asserção, iniciar o SDK oficial. Uma indisponibilidade do Launch não seleciona permissão offline.
- `RunFeature`: delegar cada execução protegida ao SDK oficial. Um callback rejeitado nunca deve executar.
- `Close` / `Dispose` / `Drop`: interromper trabalho em segundo plano, preservar login intencionalmente lembrado e vinculação do nó.
- `Logout`: invocar logout unificado do SDK oficial, limpar o registro de conta Launch e encerrar sua sessão.
- `ReleaseDevice`: alias de compatibilidade para logout explícito. Informe honestamente a revogação remota pendente.

Somente o SDK oficial remove seus arquivos de credencial e concessão do dispositivo. Nunca exclua seu diretório de cache ou `.logout.json`: esse diário contém tickets de liberação restritos necessários após falhas de rede. O SDK retoma tickets pendentes quando o cache correspondente é inicializado novamente. O armazenamento de conta do Launch e o do SDK têm responsáveis separados.

Aplicativos que precisam de inicialização offline usam o fluxo de recuperação documentado do SDK oficial. Somente o SDK verifica permissão assinada, contexto de produto/ambiente, expiração, comportamento do relógio e estado do dispositivo. Wrappers Launch não inferem permissão de datas compradas, pedido local ou presença de arquivo.

Sessões de conta apenas em memória são o padrão. Armazenamentos persistentes de conta devem criptografar/autenticar seus registros e proteger chaves com recursos de credenciais do sistema operacional. Use cache gravável separado por comerciante, conta, produto e ambiente. Renderizadores de navegador devem receber resultados comerciais, não tokens de conta desktop, asserções ou credenciais de dispositivo.

## Compras e dispositivos

O Launch calcula datas absolutas compradas a partir de pagamentos verificados e cobertura imutável de pedidos, então envia snapshots versionados para `/api/v1/launch/connections/{id}/events`. Consulta o evento até `applied`; somente recebimento não é cumprimento. Tentativas de renovação e reembolso não podem adicionar a duração novamente. Reembolsos removem apenas a cobertura do pedido pertinente; uma compra integralmente reembolsada recebe nova referência na recompra.

Usuários sem acesso a um dispositivo podem abrir a página de gerenciamento de dispositivos do Launch. Listas, liberações restantes, ações permitidas e resultados vêm do Licentivo. Uma liberação leva a geração de vinculação exibida e ID de operação inalterado. O Launch não mantém contador de liberações ou executor de tarefas concorrente.

## Verificação e limitações

Teste troca de conta, armazenamento efêmero de asserção, execução de recursos controlada pelo SDK, fechamento comum, logout explícito em novo processo, diários de liberação pendente e isolamento de produto/ambiente. Teste concessões assinadas reais, verificações offline e rejeição de adulteração do SDK oficial separadamente do transporte de conta Launch. Compilação e fixtures não estabelecem aceitação em produção.

O Launch também usa POST e GET de recibo de `session-revocations` do Licentivo V39 para logout desktop, logout forçado de sessão, alterações de senha e desativação de conta. Ele fixa duravelmente os destinatários e solicitação originais, recupera respostas perdidas e confirma cada ambiente independentemente. Notificações pendentes de toda a conta suspendem nova autenticação desktop; após confirmação, um login realmente novo deve ter `auth_time` estritamente posterior ao último segundo `revoked_before`. Recuperação pelo site continua disponível. Essas notificações nunca alteram datas compradas. Consulte [o contrato de limites e recuperação](/pt/launch-documents/account-purchase-boundary/).

Consulte [integração manual](/pt/launch-documents/manual-integration/), [integração AI](/pt/launch-documents/ai-integration/), [pacotes de integração](/pt/launch-documents/integration-packages/) e [aceitação](/pt/launch-documents/acceptance/).
