Emerson Lima

Emerson Lima

Software Engineer

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.json e o plugin do Google Services no Gradle
  • Pacote @react-native-firebase/app e @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.

JavaScript
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

JavaScript
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

  1. App aberto — messaging().onMessage. Você decide se mostra um banner próprio.
  2. Background — setBackgroundMessageHandler no index.js, fora do React.
  3. App fechado, usuário tocou — getInitialNotification na 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.