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.
lib/environments.dart→AuthenticationMode.anonymous- Firebase: Firebase Console → Authentication → Anonymous habilitado, depois rode
kasy deployantes do primeiro boot. Supabase: okasy newliga Allow anonymous sign-ins no projeto remoto. Confira em Authentication → Settings se o toggle continua ativo. - 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:
- No dropdown ao lado da busca, escolha Unified search (ou User ID)
- Limpe o texto da barra de busca
- Olhe o rodapé: Total: X users pode ser maior que as linhas visíveis
- Procure linhas com e-mail -, nome - e provider Anonymous
- 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 releaseApp 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.logWeb
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

