Todos os métodos, hooks e tipos do SDK com exemplos de uso
Pacote: @virex-tech/paywallo-sdk
TL;DR
Envolva seu app com <PaywalloProvider>, chame Paywallo.identify() após o login e use Paywallo.track() para registrar eventos. Todos os métodos assíncronos retornam Promises — use await.
Todos os métodos assíncronos retornam Promises. Use await ou .then() para tratar os resultados.
Nesta página
<PaywalloProvider>Descrição: Componente wrapper obrigatório que inicializa o SDK e fornece contexto para todos os hooks. Deve envolver seu app no nível raiz.
| Prop | Tipo | Obrigatório | Descrição |
|---|---|---|---|
config.appKey | string | Sim | Sua App Key do dashboard |
config.baseUrl | string | Não | URL da API (opcional, já configurado por padrão) |
config.debug | boolean | Não | Ativa logs de debug (padrão: false) |
config.environment | 'Production' | 'Sandbox' | Não | Modo do ambiente (padrão: Production) |
Paywallo.init()Este método é chamado automaticamente pelo <PaywalloProvider>. Use diretamente apenas se precisar de inicialização manual fora do React.
Descrição: Inicializa o SDK com sua configuração. Obrigatório antes de usar qualquer outro método.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
config.appKey | string | Sim | App Key do dashboard |
config.baseUrl | string | Não | URL base da API (obrigatório em produção) |
config.debug | boolean | Não | Ativa logs de debug (padrão: false) |
config.environment | 'Production' | 'Sandbox' | Não | Ambiente de execução (padrão: Production) |
config.sessionConfig | { sessionTimeoutMs?: number; trackAppState?: boolean } | Não | Configurações de sessão: timeout em ms e monitoramento de estado do app |
config.autoStartSession | boolean | Não | Inicia sessão automaticamente ao inicializar (padrão: true) |
config.offlineQueueEnabled | boolean | Não | Ativa fila offline de eventos (padrão: true) |
config.timeout | number | Não | Timeout das requisições HTTP em milissegundos |
Paywallo.identify()Descrição: Identifica o usuário atual com email e propriedades customizadas. Associa todos os eventos futuros a este usuário.
Este método NÃO aceita um parâmetro userId. A identificação do usuário é baseada no distinctId gerado pelo SDK combinado com o email.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
options.email | string | Não | E-mail do usuário |
options.properties | object | Não | Propriedades customizadas (name, plan, etc) |
Paywallo.getDistinctId()Descrição: Retorna o ID único do usuário gerado pelo SDK. Este ID persiste entre as sessões do app.
Retorna:
string
Paywallo.getDeviceId()Descrição: Retorna o ID do dispositivo usado para rastreamento em nível de dispositivo. Pode retornar null se o ID ainda não estiver disponível.
Retorna:
string | null
Paywallo.getEmail()Descrição: Retorna o endereço de e-mail associado ao usuário atual, se houver.
Retorna:
string | null
Paywallo.reset()Descrição: Limpa a identidade do usuário atual. Use ao fazer logout. O distinctId será regenerado na próxima sessão.
Paywallo.fullReset()Descrição: Realiza um reset completo do SDK, limpando todos os dados em cache. Requer re-inicialização após a chamada.
Operação destrutiva. Use apenas quando precisar resetar completamente o estado do SDK, como durante desenvolvimento ou ao trocar de conta.
Paywallo.track()Descrição: Registra um evento customizado com propriedades opcionais.
Nomes de eventos devem usar o formato snake_case (ex: button_clicked, não buttonClicked).
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
eventName | string | Sim | Nome do evento (snake_case) |
options.properties | object | Não | Dados adicionais do evento |
Paywallo.getVariant()Descrição: Retorna a variante atribuída para um teste A/B ou feature flag, incluindo a chave da variante e payload opcional.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
flagKey | string | Sim | Identificador do feature flag |
Retorna:
{
variant: string | null, // null se o flag não for encontrado
payload?: object, // Payload JSON opcional
}Paywallo.getConditionalFlag()Descrição: Avalia um feature flag condicional com base no contexto. Retorna um booleano indicando se o flag está ativo para o contexto fornecido.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
flagKey | string | Sim | Identificador do feature flag |
context.platform | string | Não | Plataforma (ios, android) |
context.appVersion | string | Não | Versão do app |
context.country | string | Não | Código do país |
context.distinctId | string | Não | Override do ID do usuário |
Retorna:
Promise<boolean>
Paywallo.getPaywall()Descrição: Busca a configuração do paywall para um placement. Use para construir UIs de paywall customizadas.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
placement | string | Sim | Identificador do placement |
Paywallo.presentPaywall()Descrição: Exibe um modal de paywall. Requer que o app esteja envolto pelo <PaywalloProvider>.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
placement | string | Sim | Identificador do placement |
Retorna:
{
presented: boolean,
purchased: boolean,
cancelled: boolean,
restored: boolean,
productId?: string,
transactionId?: string,
error?: Error,
}Paywallo.getCampaign()Descrição: Busca dados de campanha para um placement com contexto opcional para segmentação.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
placement | string | Sim | Identificador do placement |
context | object | Não | Contexto de segmentação |
Paywallo.presentCampaign()Descrição: Exibe um modal de paywall de campanha com atribuição de variante A/B.
Retorna:
{
presented: boolean,
purchased: boolean,
cancelled: boolean,
restored: boolean,
productId?: string,
campaignId?: string,
variantKey?: string,
error?: string,
}Paywallo.preloadCampaign() PerformanceDescrição: Pré-carrega uma campanha (dados do paywall, produtos IAP, imagens) para exibição instantânea. Chame cedo (ex: no launch do app) para placements que você espera exibir em breve.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
placement | string | Sim | Identificador do placement |
context | object | Não | Contexto de segmentação |
Paywallo.getPreloadedCampaign()Descrição: Retorna uma campanha pré-carregada do cache. Retorna null se não foi pré-carregada.
Paywallo.hasActiveSubscription()Descrição: Verifica se o usuário atual possui uma assinatura ativa.
Retorna:
Promise<boolean>
Paywallo.getSubscription()Descrição: Retorna os detalhes completos da assinatura do usuário atual.
Retorna:
{
productId: string,
status: 'active' | 'expired' | 'cancelled' | 'grace_period',
expiresAt: string, // ISO date string
platform: 'ios' | 'android',
autoRenewEnabled: boolean,
} | nullPaywallo.restorePurchases()Descrição: Restaura compras anteriores da loja. Obrigatório para conformidade com a App Store.
Paywallo.requireSubscription()Descrição: Garante que o usuário possui assinatura ativa. Se não, exibe automaticamente um paywall. Retorna true se o usuário tem ou acabou de adquirir uma assinatura.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
placement | string | Não | Placement do paywall a exibir (padrão: default) |
Retorna:
Promise<boolean>
Paywallo.gateContent()Descrição: Protege conteúdo premium com verificação de assinatura. Executa a função fornecida somente se o usuário tiver assinatura ativa, caso contrário exibe o paywall.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
fn | () => Promise<T> | Sim | Função a executar se assinado |
placement | string | Não | Placement do paywall |
Retorna:
Promise<T | null>
Paywallo.requireSubscriptionWithCampaign()Descrição: Funciona igual ao requireSubscription, mas usa o sistema de campanhas para exibir a paywall. Permite A/B testing automático via campanhas configuradas no dashboard.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
placement | string | Sim | Identificador do placement da campanha |
context | Record<string, unknown> | Não | Contexto adicional repassado à campanha para segmentação |
Retorna:
Promise<boolean>
Paywallo.gateContentWithCampaign()Descrição: Funciona igual ao gateContent, mas usa o sistema de campanhas para exibir a paywall, habilitando A/B testing automático.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
fn | () => Promise<T> | Sim | Função executada somente se o usuário tiver assinatura ativa |
placement | string | Sim | Identificador do placement da campanha |
context | Record<string, unknown> | Não | Contexto adicional repassado à campanha para segmentação |
Retorna:
Promise<T | null>
Estes hooks fornecem acesso reativo ao estado do SDK e devem ser usados dentro de um <PaywalloProvider>.
usePaywallo()Descrição: Hook principal para acessar o estado do SDK e métodos comuns.
Retorna:
{
config: PaywalloConfig | null,
isInitialized: boolean,
distinctId: string | null,
subscription: Subscription | null,
products: Map<string, Product>,
isLoadingProducts: boolean,
presentPaywall: (placement: string) => Promise<PaywallResult>,
presentCampaign: (placement: string, context?) => Promise<CampaignResult>,
preloadCampaign: (placement: string, context?) => Promise<PreloadResult>,
hasActiveSubscription: () => Promise<boolean>,
getSubscription: () => Promise<Subscription | null>,
restorePurchases: () => Promise<{ success: boolean; error?: Error }>,
getPaywallConfig: (placement: string) => Promise<PaywallConfig | null>,
refreshProducts: (productIds: string[]) => Promise<void>,
}useSubscription()Descrição: Hook para estado reativo de assinatura e gerenciamento.
Retorna:
{
subscription: Subscription | null,
isActive: boolean,
isLoading: boolean,
error: Error | null,
entitlements: string[],
refresh: () => Promise<void>,
restore: () => Promise<void>,
}usePurchase()Descrição: Hook para gerenciar compras in-app com estados de carregamento.
Retorna:
{
state: 'idle' | 'loading' | 'purchasing' | 'restoring' | 'error',
purchase: (productId: string) => Promise<IAPPurchase>,
restore: () => Promise<IAPPurchase[]>,
error: PurchaseError | null,
isLoading: boolean,
isPurchasing: boolean,
isRestoring: boolean,
}useProducts()Descrição: Hook para carregar e acessar informações de produtos das lojas. Aceita um parâmetro opcional initialProductIds para carregar produtos automaticamente na montagem.
Retorna:
{
products: IAPProduct[],
formattedProducts: FormattedProduct[],
isLoading: boolean,
error: Error | null,
loadProducts: (productIds: string[]) => Promise<void>,
getProduct: (productId: string) => IAPProduct | undefined,
getFormattedProduct: (productId: string) => FormattedProduct | undefined,
getPriceInfo: (productId: string) => ProductPriceInfo | undefined,
}Paywallo.startSession()Descrição: Inicia uma nova sessão de analytics. Normalmente chamado automaticamente quando o app vai para foreground.
Paywallo.endSession()Descrição: Encerra a sessão atual. Normalmente chamado automaticamente quando o app vai para background.
Paywallo.getSessionId()Descrição: Retorna o ID da sessão atual.
Retorna:
string | null
Paywallo.getEnvironment()Descrição: Retorna o ambiente atual (Production ou Sandbox).
Retorna:
'Production' | 'Sandbox'
Paywallo.setEnvironment()Descrição: Alterna entre os ambientes Production e Sandbox. Útil para testes.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
environment | 'Production' | 'Sandbox' | Sim | Ambiente alvo |
Paywallo.isOnline()Descrição: Verifica se o dispositivo possui conectividade de rede.
Retorna:
boolean
Paywallo.getOfflineQueueSize()Descrição: Retorna o número de eventos enfileirados enquanto offline.
Retorna:
number
Paywallo.processOfflineQueue()Descrição: Processa manualmente a fila offline de eventos. Normalmente é disparado de forma automática ao restaurar a conectividade.
Retorna:
Promise<{ processed: number; failed: number }>
Paywallo.clearOfflineQueue()Descrição: Descarta todos os eventos atualmente enfileirados na fila offline. Útil para limpar dados obsoletos ou em situações de reset da sessão do usuário.
Retorna:
Promise<void>
O SDK é escrito em TypeScript e exporta todos os tipos necessários para segurança de tipos completa.
PaywalloConfig
interface PaywalloConfig {
appKey: string;
baseUrl?: string;
debug?: boolean;
environment?: 'Production' | 'Sandbox';
}PaywallResult
interface PaywallResult {
presented: boolean;
purchased: boolean;
cancelled: boolean;
restored: boolean;
productId?: string;
transactionId?: string;
error?: Error;
}CampaignResult
interface CampaignResult extends PaywallResult {
campaignId?: string;
variantKey?: string;
}Subscription
interface Subscription {
productId: string;
status: 'active' | 'expired' | 'cancelled' | 'in_billing_retry' | 'in_grace_period' | 'revoked';
expiresAt: Date | null;
platform: 'ios' | 'android';
autoRenewEnabled: boolean;
inGracePeriod: boolean;
}FlagVariant
interface FlagVariant {
variant: string | null;
payload?: Record<string, unknown>;
}