KasyKasy

Troubleshooting

Sintoma → causa → solução. Os problemas mais comuns em um lugar só.

Antes de tudo, dois comandos resolvem a maioria dos diagnósticos:

kasy doctor    # checa ambiente, chaves, webhook e configuração do projeto
kasy check     # valida o backend remoto (secrets, functions, IAM)

Pelo MCP: "prepara minha máquina" (prepare_machine), "checa o projeto" (check_project), "qual o status do projeto" (check_status), "roda pub get / pods / clean" (fix_project). Veja MCP do Kasy.

E o log completo de qualquer execução fica em .kasy/run.log: cole na IA quando pedir ajuda.


Autenticação

Auth anônimo não cria usuário

Erro típico: User profile not found in database.

  1. lib/environments.dart → AuthenticationMode.anonymous
  2. Firebase: Firebase Console → Authentication → Anonymous habilitado, depois rode kasy deploy antes do primeiro boot. Supabase: o kasy new liga Allow anonymous sign-ins no projeto remoto. Confira em Authentication → Settings se o toggle continua ativo.
  3. Reinicie o app

Usuário anônimo criado mas não aparece no Supabase Auth

Sintoma: você passou pelo onboarding (ou tocou em Continuar sem conta), há linha em public.users (o admin do app mostra Anônimo), mas em Authentication → Users só aparecem contas com e-mail (Google, Apple, etc.).

Causa comum: o dropdown da busca em Authentication → Users está em Email address. Usuários anônimos não têm e-mail, então somem da lista mesmo tendo sido criados.

Como confirmar:

  1. No dropdown ao lado da busca, escolha Unified search (ou User ID)
  2. Limpe o texto da barra de busca
  3. Olhe o rodapé: Total: X users pode ser maior que as linhas visíveis
  4. Procure linhas com e-mail -, nome - e provider Anonymous
  5. Copie o UID em Table Editor → users e busque por User ID no Auth

No Preview Device (web simulando iPhone/iPad), o fluxo de conta anônima é o mesmo do nativo. Na web desktop pura, o app exige login real. Detalhes em Guia web.

Login some na web entre runs

Use kasy run --web (porta 5555). Porta aleatória = sessão "presa" no origin anterior.

Google Sign-In falha na web

Adicione http://localhost:5555 (e o domínio de produção) em Google Cloud Console → Credenciais → OAuth origins.

Firebase: se o erro for auth/unauthorized-domain, adicione o domínio também em Firebase Console → Authentication → Settings → Authorized domains. Supabase: o equivalente é Authentication → URL Configuration no painel do Supabase, adicione http://localhost:5555 e o domínio de produção em Site URL / Redirect URLs.

Login social não abre no navegador do editor

Navegadores embutidos (VS Code, Cursor) bloqueiam o popup de login. Teste login social no Chrome externo: no app final funciona normalmente.


Assinaturas (RevenueCat)

INVALID_CREDENTIALS

O tipo do app no RC e o prefixo da chave não batem: Test Store → test_, App Store → appl_, Google Play → goog_. Detalhes em RevenueCat → Erros comuns.

Paywall vazio no simulador

Chave errada. Simulador precisa de RC_TEST_KEY (test_xxx). O kasy run injeta automaticamente.

Produtos não aparecem no paywall (device físico)

  • IDs idênticos entre a loja e o RC, caractere por caractere
  • (iOS) Paid Applications Agreement assinado + conta bancária validada
  • (Android) App publicado no track interno

Checklist completo em RevenueCat.

Assinatura "sumiu" durante o teste

Normal. Em Sandbox, mensal dura 5 min e anual de 30 a 60 min. Veja tempos de Sandbox.

Webhook retorna 401 / tabela subscriptions não atualiza

A REVENUECAT_WEBHOOK_KEY não é igual nos dois lados (backend e painel RC), ou falta o prefixo Bearer no header. Veja Webhook key.


Pagamentos web (Stripe)

Paywall vazio na web

Não há Price recorrente ativo, ou a chave é de test mode com produtos em live (ou vice-versa). Veja Stripe → Troubleshooting.

Pagou e o premium não ativou

Confira os logs do webhook em Stripe → Webhooks. Causas comuns: STRIPE_WEBHOOK_SECRET errado, eventos não selecionados, deploy pendente.


Push

Push não chega no iOS

A APNs Key precisa estar em Firebase Console → Cloud Messaging. Só é possível testar em device físico (simulador não recebe push). Passo a passo em Notificações Push.

Diálogo de permissão não aparece de novo

iOS e Android 13+ só mostram o prompt nativo uma vez por instalação. Para testar do zero: kasy reset (simulador/emulador) ou desative em Configurações do sistema (device físico).


Build e execução

Build iOS falhou

kasy ios clean
kasy ios release

App abre com config de desenvolvimento em release

Faltou --dart-define=ENV=prod no build. O kasy ios release já injeta; em builds manuais é obrigatório.

Mudanças no painel RC/lojas não aparecem no app

Hot reload (r) não rebusca dados do RevenueCat. Use hot restart (R).

Ver log completo do Flutter

kasy run --raw
# ou leia .kasy/run.log

Web

Faixas brancas no Safari do iPhone

Já corrigido no template (web/index.html usa 100dvh). Se você customizou o index.html, restaure esse trecho.

Sessão de login some entre execuções

Porta fixa: kasy run --web usa a 5555 justamente pra isso. Se a 5555 estiver ocupada: kasy run --web --web-port 6000 (a sessão fica atrelada à nova porta).


Não achou seu problema? Rode kasy doctor, copie a saída e o .kasy/run.log e cole na sua IA, ou consulte a página da feature específica no menu.

Atualizado em 03/11/2026