Firebase Cloud Messaging no React Native, do token ao primeiro push
Como pedir permissão, pegar o token FCM e tratar notificação com o app aberto, em background e fechado.
Push no React Native quebra em três pontos: permissão, token e o handler certo para cada estado do app. O Firebase Cloud Messaging cobre os três, mas a ordem importa.
O que precisa estar pronto
- App iOS com Push Notifications e
GoogleService-Info.plist - App Android com
google-services.jsone o plugin do Google Services no Gradle - Pacote
@react-native-firebase/appe@react-native-firebase/messaging
Sem o arquivo nativo do Firebase, o JS até instala. O token não chega.
Permissão
No iOS a permissão é explícita. No Android 13+ também.
import messaging from "@react-native-firebase/messaging";
async function requestPermission() {
const status = await messaging().requestPermission();
return (
status === messaging.AuthorizationStatus.AUTHORIZED ||
status === messaging.AuthorizationStatus.PROVISIONAL
);
}
Se o usuário recusar, não adianta insistir no mesmo open. Guarde o status e ofereça um caminho para as configurações do sistema.
Token
const token = await messaging().getToken();
Esse token muda. Cadastre um listener onTokenRefresh e envie de novo para o backend (ou para o Klaviyo, se o push passar por lá).
Token sem usuário logado ainda vale: você pode gravar como anônimo e amarrar depois do login.
Três estados, três handlers
- App aberto —
messaging().onMessage. Você decide se mostra um banner próprio. - Background —
setBackgroundMessageHandlernoindex.js, fora do React. - App fechado, usuário tocou —
getInitialNotificationna inicialização.
O erro clássico é tratar só o onMessage e achar que o push “não funciona”. Na verdade o SO entregou a notificação e o JS não estava escutando o tap.
Payload
Separe notification de data. Título e corpo padrão o sistema desenha sozinho. Dado extra (reportId, screen) vai em data para o app abrir a tela certa.
Não coloque informação sensível no payload. Push pode aparecer na tela de bloqueio.
Teste rápido
O console do Firebase envia uma mensagem de teste para um token. Se essa chegar e a do seu backend não chegar, o problema não é o app: é o servidor usando a API errada ou um token velho.
Quando integrar com ferramenta de marketing, o app ainda precisa entregar o token FCM. A ferramenta não substitui o setup nativo.
