Começar

RevenueCat

Se o seu app usa RevenueCat, conecte o webhook dele e o Unolink recebe cada teste grátis, compra, renovação, cancelamento e reembolso direto do RevenueCat, inclusive renovações e reembolsos que acontecem quando o app nem está aberto. A receita no seu funil passa a ser líquida de reembolsos. Plano Pro ou superior.

1. Conectar

No Unolink, abra seu app → Configurações → RevenueCat → Conectar. Copie a URL do webhook e o valor do cabeçalho Authorization (exibido só uma vez).

2. Adicione o webhook no RevenueCat

No RevenueCat, abra seu projeto → Integrations → Webhooks → Add new configuration:

  • Webhook URL e Authorization header value: cole os dois.
  • Environment: both. Compras em sandbox contam como dispositivos de teste, então ficam fora dos seus números reais.
  • App: este app. Events: todos.

Salve e depois clique em Send test event. O cartão do RevenueCat no Unolink mostra quando ele chegar.

As compras são ligadas à instalação (e ao link de onde ela veio) pelo ID de usuário que seu app reporta: o próprio app user ID do RevenueCat. Com o SDK 0.3.2 ou posterior, uma linha o mantém atualizado. Chame-a uma vez na abertura, antes ou depois de configure:

Unolink.connectRevenueCat { Purchases.isConfigured ? Purchases.shared.appUserID : nil }
Unolink.connectRevenueCat { Purchases.sharedInstance.appUserID }
import Purchases from "react-native-purchases"

Unolink.connectRevenueCat(Purchases)
Unolink.connectRevenueCat(
  () => Purchases.appUserID,
  addListener: Purchases.addCustomerInfoUpdateListener,
  removeListener: Purchases.removeCustomerInfoUpdateListener,
);

O Unolink lê o ID na abertura, sempre que o app volta ao primeiro plano e sempre que o ID muda, e só o envia quando ele é novo. Ele não adiciona o RevenueCat ao seu app: é você quem entrega o RevenueCat a ele. No iOS e no Android, chame também Unolink.revenueCatUserChanged() depois de Purchases.logIn e Purchases.logOut para enviar o novo ID na hora (senão ele vai com o próximo evento). O React Native e o Flutter percebem a mudança sozinhos.

Sem connectRevenueCat (um SDK mais antigo, ou se você preferir fazer isso você mesmo), chame setUserId com o ID do RevenueCat depois de Purchases.configure, depois de cada Purchases.logIn e Purchases.logOut, e em toda abertura. Use um ou outro, não os dois:

Unolink.setUserId(Purchases.shared.appUserID)
Unolink.setUserId(Purchases.sharedInstance.appUserID)
Unolink.setUserId(await Purchases.getAppUserID())
Unolink.setUserId(await Purchases.appUserID);

Para um convidado, esse é o ID anônimo do RevenueCat, então uma compra feita antes do cadastro se junta à instalação na hora. Depois do logIn, é o ID da conta. O Unolink guarda todo ID que uma instalação reportou, então a compra do convidado continua ligada.

Se o seu app informar só o ID da conta, a compra de um convidado ainda se junta, mas só com o próximo evento do RevenueCat para esse cliente que listar os dois IDs (por exemplo, a primeira renovação). Até então, a pessoa aparece como ainda não paga. Reportar o próprio ID do RevenueCat evita essa espera.

Quando alguém toca em "continuar como convidado", chame também Unolink.signUpSkipped() (SDK 0.3.2 ou posterior, React Native 0.3.1; SDKs mais antigos: track("sign_up_skipped")), para que a etapa Seguiu como convidado do funil conte essa pessoa. Veja Convidados e contas.

O Unolink nunca armazena o ID em si, apenas um hash com chave, diferente para cada um dos seus apps. Uma compra que chega antes de o app informar seu usuário espera, e se junta à instalação assim que ele informar. Pagamentos que chegam dias ou semanas depois continuam contando, e o Relatório mostra quanto tempo as pessoas levam: veja Pagamentos e IDs de usuário, que também trata de privacidade e das regras da Apple.

O que chega

RevenueCatNo Unolink
INITIAL_PURCHASE (teste grátis)Iniciou o teste grátis
INITIAL_PURCHASE, NON_RENEWING_PURCHASE, conversão do teste grátisPagou, com receita
RENEWALRenovou, com receita
CANCELLATION (reembolso)Reembolsado, receita subtraída
CANCELLATION, EXPIRATION, BILLING_ISSUECancelou a assinatura, Assinatura expirou, Problema de cobrança

Depois que o RevenueCat é conectado, ele passa a ser a fonte da verdade para compras e testes grátis: se o seu app também chamar Unolink.purchase() ou trialStarted(), essas chamadas são ignoradas, então nada é contado duas vezes. Renovações, cancelamentos e o resto podem ser adicionados como etapas em qualquer funil (Funil → Editar).