FCM (Firebase Cloud Messaging) é um serviço multiplataforma do Google para entrega de notificações push e transferência de dados entre um servidor e aplicativos móveis. Ele suporta Android, iOS e plataformas web através de uma API única. De acordo com a Documentação do Firebase, o FCM processa mais de 1 bilhão de mensagens diariamente em todo o mundo.
Principais pontos
Firebase Cloud Messaging (FCM) é um serviço em nuvem do Google que garante a entrega confiável de notificações push e mensagens de dados para dispositivos móveis. Anteriormente conhecido como Google Cloud Messaging (GCM), o FCM se tornou a ferramenta principal para notificações multiplataforma no ecossistema Firebase.
O FCM seleciona automaticamente o canal de entrega ideal dependendo da plataforma: no Android, usa sua própria conexão FCM; no iOS, usa APNS (através do gateway FCM). O desenvolvedor não precisa implementar duas integrações diferentes — o FCM cuida do roteamento.
O serviço fornece uma API REST unificada e um Admin SDK para envio de mensagens. Isso permite enviar notificações do lado do servidor sem estar vinculado a uma plataforma de destinatário específica.
O FCM suporta vários modos de entrega: uma única mensagem para um dispositivo específico, transmissão em grupo por tópico e envio segmentado por condições. O envio programado e o teste A/B do conteúdo de notificações também estão disponíveis.
A arquitetura do FCM é baseada em três componentes: o aplicativo cliente, o Firebase Connection Server e o servidor de aplicativos. O cliente se registra no FCM na inicialização e recebe um token de registro único — uma string que identifica o dispositivo para o aplicativo em questão.
O servidor de aplicativos envia uma solicitação à API REST do FCM, especificando o token do destinatário ou o tópico. O Firebase Connection Server entrega a mensagem usando uma conexão XMPP persistente ou solicitação HTTP. Se o dispositivo estiver offline, a mensagem é enfileirada e entregue quando a conexão for restaurada.
O FCM garante a entrega usando filas prioritárias e um mecanismo de confirmação. No Android, a mensagem é armazenada por até 28 dias na fila; no iOS, até 4 semanas (via APNS). Após a data de expiração, a mensagem é excluída sem notificação.
O token de registro pode mudar em vários casos: ao restaurar dados do aplicativo, ao atualizar para uma nova versão ou ao limpar o cache. O aplicativo deve implementar FirebaseMessagingService.onNewToken para lidar com atualizações de token e sincronizar com o servidor.
O FCM suporta dois tipos de payload: notification e data. Cada tipo determina como e quando a mensagem é processada no dispositivo do destinatário.
| Parâmetro | Notification | Data |
|---|---|---|
| Exibição automática | Sim, se o app estiver em segundo plano | Não, apenas no app |
| Processamento | Sistema/NOS — em segundo plano; app — em primeiro plano | Sempre no app (onMessageReceived) |
| Tamanho máximo | 4 KB | 4 KB |
| Chaves personalizadas | Limitado a campos predefinidos | Quaisquer pares chave-valor |
| Requer CollapseKey | Opcional | Opcional para agrupamento |
Na prática, recomenda-se usar mensagens data quando o aplicativo precisar de processamento completo da notificação no onMessageReceived. Mensagens notification são adequadas para cenários simples onde a exibição do sistema é suficiente.
FCM e APNS são os dois principais serviços de entrega push. O FCM funciona como um gateway multiplataforma, enquanto o APNS é apenas para o ecossistema Apple. Suas principais diferenças estão na arquitetura, requisitos de certificados e mecanismos de roteamento.
A escolha entre FCM e APNS direto depende da arquitetura do projeto. Para aplicativos multiplataforma, o FCM é a escolha ideal. Para projetos apenas iOS, o trabalho direto com APNS via API HTTP/2 é aceitável.
O FCM é justificado quando o projeto usa Android e iOS simultaneamente, bem como quando são necessários analytics do Firebase, teste A/B de notificações ou tópicos sem lógica de servidor. O APNS direto é preferível para aplicativos apenas iOS com dependências mínimas e requisitos rigorosos de latência de entrega.
Para conectar o FCM a um aplicativo Android, é necessário adicionar o SDK do Firebase e configurar o google-services.json na raiz do projeto. Após o registro do token, o aplicativo está pronto para receber mensagens através do FirebaseMessagingService.
// build.gradle (Module)
dependencies {
implementation("com.google.firebase:firebase-messaging:24.1.0")
}
// AndroidManifest.xml
<service android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
class MyFirebaseMessagingService :
FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendTokenToServer(token)
}
override fun onMessageReceived(message: RemoteMessage) {
message.notification?.let {
showNotification(it.title, it.body)
}
}
}
Após a configuração, o aplicativo recebe automaticamente um token FCM na primeira inicialização. O token deve ser enviado ao servidor do aplicativo para posterior envio de notificações a este dispositivo.
No Android 8+, antes de enviar uma notificação FCM com exibição automática, é necessário criar um NotificationChannel. As mensagens notification do FCM usam o ID de canal padrão, mas é recomendável criar um canal personalizado através do FirebaseMessagingService ao receber a primeira mensagem. Mensagens data não requerem um canal — o aplicativo decide por si mesmo como e quando mostrar a notificação.
No iOS, o FCM atua como intermediário entre o servidor do aplicativo e o APNS. O Firebase recebe a mensagem do servidor, a encapsula no formato APNS e a envia através do gateway da Apple. O desenvolvedor precisa configurar uma chave ou certificado APNS no console do Firebase.
import FirebaseMessaging
import UserNotifications
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
FirebaseApp.configure()
UNUserNotificationCenter.current().delegate = self
Messaging.messaging().delegate = self
return true
}
}
extension AppDelegate: MessagingDelegate {
func messaging(
_ messaging: Messaging,
didReceiveRegistrationToken fcmToken: String?
) {
UserDefaults.standard.set(fcmToken, forKey: "fcm_token")
}
}
No iOS, o registro no APNS ocorre de forma assíncrona. O SDK do FCM obtém automaticamente o token APNS e o passa para o servidor Firebase. didReceiveRegistrationToken é acionado ao receber um novo token FCM, que combina o token APNS com o identificador do projeto.
O FCM fornece um console Firebase para monitorar a entrega: o número de notificações enviadas, recebidas e exibidas. Um callback de status também está disponível através do Firebase Cloud Functions para rastrear erros de entrega no lado do servidor. Métricas principais: impressões e aberturas de notificações.
Ao trabalhar com FCM, é importante escolher o tipo de mensagem correto para cada cenário. Para notificações simples com exibição automática, use mensagens notification. Para casos em que o aplicativo precisa processar dados antes de exibir, use mensagens data. Um tipo misto (notification + data) é recomendado apenas se os dados forem necessários para análises e não para alterar o conteúdo da notificação.
Gerencie os tokens centralizadamente. Armazene os tokens atuais no servidor em uma tabela vinculada ao usuário e à plataforma. Implemente um mecanismo de limpeza de tokens obsoletos: ao encontrar um erro NotRegistered ou InvalidRegistration, exclua o token do banco de dados. Os tokens raramente mudam, mas sua limpeza é um elemento obrigatório do suporte FCM.
Use chaves de colapso (collapseKey) para agrupar mensagens. Se você estiver enviando várias notificações do mesmo tipo (por exemplo, "atualização da taxa de câmbio), defina o mesmo collapseKey. O FCM entregará apenas a última mensagem do grupo, reduzindo a carga no dispositivo e evitando sobrecarregar o usuário com notificações.
Monitore a entrega através do Firebase Console e do Cloud Functions. As análises do FCM mostram o número de notificações enviadas, recebidas e exibidas. Se a taxa de exibição estiver abaixo de 70%, verifique as configurações de canal no Android e as permissões no iOS. A baixa entrega geralmente está relacionada a canais desativados ou proibições de notificações. Quinto: use o teste A/B do Firebase para otimizar o texto das notificações e o horário de envio — isso aumenta a conversão de abertura em 15–25% de acordo com os dados do Firebase.
Perguntas frequentes
FCM é a atualização evolutiva do GCM (Google Cloud Messaging). FCM oferece configuração simplificada através do Firebase Console, análises integradas, tópicos e suporte a Web Push. O GCM foi oficialmente descontinuado em abril de 2019, e todos os projetos devem ser migrados para o FCM.
Firebase Cloud Messaging é um serviço gratuito sem limites no número de mensagens. O pagamento é cobrado apenas pelo uso de outros serviços do Firebase, como Cloud Functions ou Firestore. O FCM não requer assinatura Spark ou Blaze para envio básico de notificações.
O token FCM muda quando: restaurando o aplicativo de um backup, limpando os dados do aplicativo, reinstalando, atualizando para uma nova versão com um Sender ID alterado. Sempre manipule onNewToken no FirebaseMessagingService para enviar o novo token ao servidor.
O FCM do Google está bloqueado na China. Para entrega de notificações na China, são usados serviços alternativos: Huawei Push Kit, MiPush (Xiaomi), Oppo Push, Vivo Push. Para entrega multiplataforma, são usados serviços multiprovider como Getui.
Use o console Firebase integrado: selecione "Cloud Messaging" — "Send Test Message". Insira um token de teste e envie uma mensagem notification. A notificação deve aparecer no dispositivo. Você também pode monitorar os logs do FirebaseMessagingService.onMessageReceived.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também