Como testar o Push FCM (integrador + app Flutter)¶
Status: Aprovado · Responsável: Gustavo Madruga · Atualizado em: 2026-07-06
Pré-requisitos¶
- Mesmo projeto Firebase no integrador e no app Flutter (o
firebase-admin-sdk.jsondo integrador e ogoogle-services.json/ Firebase do app apontam para o mesmo projeto). - App Flutter já com FCM configurado e inscrição nos 4 tópicos (
bl_liberado_sulplata,nota_venda_emitida_sulplata,bl_liberado_onpetrotrading,nota_venda_emitida_onpetrotrading) e permissão de notificação concedida no celular.
1. Integrador no PC local¶
-
Ativar o push
Emapplication.ymlou via variável de ambiente:Ou defina na linha de comando ao subir:push: enabled: true empresa: "sulplata" # ou "onpetrotrading" na instância OnPetro (ex.: porta 3002) credentials-path: "C:/caminho/para/firebase-admin-sdk.json" # fora do repo notification-image-url: "https://navarro-app.web.app/logo-sulplata.png"Ou crie./gradlew run --args="--push.enabled=true"application-local.yml(e useMICRONAUT_ENVIRONMENTS=local) compush.enabled: true. -
Credenciais
Apontepush.credentials-path(ou a envPUSH_CREDENTIALS_PATH) para o caminho absoluto do JSON da conta de serviço no seu PC. Não coloque o arquivo emsrc/main/resources/: a credencial é segredo, não entra no repo nem no jar (decisão 0030). Compush.enabled=truee a credencial ilegível, o app não sobe — a mensagem de erro nomeia o path. -
Subir o integrador
Ou rode pela IDE. O servidor sobe (por exemplo em./gradlew runhttp://localhost:8080). -
Teste rápido pelo navegador (opcional)
Acesse http://localhost:8080/debug e clique em: - Enviar push BL Liberado
- Enviar push Nota de Venda Emitida
Isso envia uma mensagem de teste para cada tópico. Se o app estiver inscrito e em primeiro plano/background, a notificação deve aparecer no celular.
2. App Flutter (release) no celular¶
- Build release e instale no aparelho (USB ou build de distribuição).
- Login / uso normal para garantir que o app obtém o FCM token e se inscreve nos tópicos
bl_liberadoenota_venda_emitida. - Permissão de notificação concedida para o app no Android/iOS.
- Celular pode estar em qualquer rede (4G/5G ou outro Wi‑Fi); não precisa estar na mesma rede do PC. O integrador envia para os servidores do FCM e eles entregam no dispositivo.
3. Formas de testar¶
A) Pela tela de teste do integrador (recomendado primeiro)¶
- No PC: http://localhost:8080/debug
- Clique em um dos dois botões.
- No celular: deve chegar a notificação (título “BL Liberado” ou “Nota de Venda Emitida”) se o app estiver inscrito nesse tópico.
B) Por um PUT XADM real (PBLDI ou PNOTAI)¶
- Envie um PUT para o endpoint XADM do integrador (
PUT /api/v1/xadmcom body JSON de origem PBLDI ou PNOTAI). - Se o processamento der certo, o integrador dispara o push para o tópico correspondente (BL Liberado ou Nota de Venda Emitida).
- O app no celular deve receber a notificação da mesma forma.
4. Se não chegar notificação no celular¶
- Logs do integrador: verifique se aparece algo como
Push FCM enviado tópico=... messageId=.... Se aparecer, o envio até o FCM está ok. - App: confirme no código Flutter que, após o login/token, está sendo chamado
subscribeToTopic("bl_liberado")esubscribeToTopic("nota_venda_emitida"). - Firebase Console: em “Cloud Messaging” (e testes de mensagem) dá para enviar uma mensagem de teste por tópico e ver se o dispositivo recebe; isso ajuda a isolar se o problema é integrador → FCM ou FCM → app.
- Desabilitar otimização de bateria para o app no Android pode evitar atraso ou bloqueio de notificações em segundo plano.
Resumo¶
| Onde | O que fazer |
|---|---|
| PC (integrador) | push.enabled: true, credenciais no classpath ou em credentials-path, ./gradlew run |
| Navegador | Abrir http://localhost:8080/debug e usar os dois botões de push |
| Celular (app release) | App com FCM + inscrição nos 4 tópicos (sulplata + onpetrotrading) + permissão de notificação |
| Teste | Primeiro pela tela /debug; depois, se quiser, por PUT XADM com PBLDI/PNOTAI |
Sim: você pode rodar o integrador no PC local com push.enabled=true e o app em release no celular; desde que o app esteja inscrito nos tópicos e use o mesmo projeto Firebase, o teste funciona.