Começar

Solução de problemas

Comece ativando os logs de depuração: eles dizem exatamente o que o SDK fez e por quê. Veja Logs de depuração. Procure a tag Unolink no Logcat, ou [Unolink] no console do Xcode.

Nada aparece no painel

  • Ative Incluir dispositivos de teste em Funil ou Jornadas. Builds de depuração são dispositivos de teste e ficam ocultas por padrão.
  • Confira se o configure roda. Ele precisa ser chamado uma vez, cedo: Application.onCreate() no Android, o init() do App @main no iOS, o layout raiz no React Native, main() no Flutter.
  • Envie os eventos agora. Os eventos são enviados a cada 15 segundos enquanto o app está aberto, e quando ele vai para segundo plano. Aperte o botão de início, ou chame flush().
  • Confira a rede. Sem internet, os eventos esperam no dispositivo e são enviados quando a conexão volta.

"Chave do SDK inválida (401)"

A chave está errada, é de outro app ou foi revogada. Copie-a de novo em seu app → Configurações → Chaves do SDK. Se você não a salvou quando a criou, crie uma nova chave: a chave completa só é exibida uma vez. Depois de um 401, nada é enviado até a próxima abertura.

O SDK faz parte do plano Pro ou superior. O dono do app precisa fazer upgrade em Cobrança. Até lá, o SDK não envia nada e não deixa nada na fila.

Alguns eventos estão faltando

  • Nome inválido. Os nomes de eventos começam com uma letra e usam só letras, dígitos, _ e ., com no máximo 64 caracteres. Os inválidos são rejeitados e registrados no log.
  • Propriedades demais. No máximo 20 por evento, strings de até 200 caracteres, 4 KB no total.
  • IDs de tela de onboarding inválidos. step e flow seguem a mesma regra dos nomes de eventos: how_heard, não how-heard. Em builds de desenvolvimento, o SDK de React Native (0.3.1 ou posterior) avisa no console.
  • Muito acima da cota mensal. Nada é bloqueado ao atingir sua cota. Só depois do dobro da cota seus próprios eventos (personalizados) são rejeitados, com quota_exceeded; os eventos padrão do funil são sempre registrados.
  • Chamado antes do configure. Os SDKs nativos de iOS e Android ignoram chamadas feitas antes do configure. O React Native (0.3.1 ou posterior) as guarda e as envia logo depois dele.
  • Rastreamento desativado. setEnabled(false) interrompe o rastreamento e é lembrado entre aberturas.

Compras ou testes grátis contados duas vezes, ou nenhuma

  • RevenueCat conectado? Então o RevenueCat informa testes grátis e compras, e as chamadas do app a purchase e trialStarted são ignoradas. Remova-as se quiser; elas não causam problema.
  • As compras do RevenueCat não se juntam à instalação? Informe o próprio app user ID do RevenueCat. Com o SDK 0.3.2 ou posterior, connectRevenueCat o mantém atualizado (veja RevenueCat). Senão, chame setUserId com ele (Purchases.shared.appUserID, Purchases.sharedInstance.appUserID, Purchases.getAppUserID() ou Purchases.appUserID) depois de Purchases.configure, depois de cada Purchases.logIn e Purchases.logOut, e em toda abertura. Uma compra que chega antes de o app informar seu usuário espera, e se junta assim que ele informar. Todo ID de usuário que uma instalação já informou conta, então um convidado que compra e depois cria uma conta mantém a compra. Se o app informar só o ID da conta, a compra de um convidado se junta apenas com o próximo evento do RevenueCat para esse cliente (por exemplo, a primeira renovação). Veja Convidados e contas.
  • Sem RevenueCat? Chame purchase com o preço como número decimal e um código de moeda de três letras, depois que a loja confirmar a compra.
  • No iPhone, isso é esperado. A Apple não tem referrer de instalação, então deep links adiados são só para Android.
  • Instale pelo Google Play. Instalações por sideload e pelo Android Studio não têm referrer do Play. Use o teste interno, ou debugInstallReferrer em uma build de depuração. Veja Testes.
  • Só na primeira abertura. O referrer é lido uma vez por instalação. Desinstale o app, ou limpe os dados dele, para testar de novo.
  • Defina um deep link no link. No painel, Links → ⋯ → Editar → Deep link. Um link sem deep link ainda recebe o crédito da instalação, mas não há nada para abrir.
  • Registre o listener. Ele pode ser adicionado depois do configure: um link que chegou antes continua sendo entregue. No React Native isso exige 0.3.1 ou posterior; com 0.3.0, assine logo depois do configure.
  • A tela fica depois do onboarding ou do login? O listener roda uma vez por instalação. Quando o onboarding terminar, leia getPendingDeferredDeepLink(), abra o link e depois chame consumeDeferredDeepLink(). A partir da 0.3.3, o link espera até você consumi-lo, mesmo que o app seja fechado nesse meio-tempo (até 30 dias). Veja Abrir depois do onboarding.
  • O mesmo link abre a cada abertura do app? Chame consumeDeferredDeepLink() depois de abri-lo.

Cada clique é atribuído a uma única instalação. Depois de uma reinstalação, o Google Play pode entregar o mesmo referrer ao app de novo, e essa segunda instalação não é atribuída ao link uma segunda vez. O Unolink nunca chuta.

React Native e Flutter

  • O Expo Go não funciona. O SDK tem código nativo: faça uma development build (npx expo prebuild ou EAS Build).
  • "Native module not found" ou MissingPluginException. Recompile o app depois de instalar. Um reload do JavaScript ou um hot restart do Flutter não carrega código nativo novo.
  • A build do iOS falha depois de instalar. Rode pod install na pasta ios (React Native puro) e compile de novo.

Ainda com problemas?

Envie um e-mail para [email protected] com o nome do seu app, a plataforma, a versão do SDK e o log de depuração de uma abertura do app.