Envio com o Cloud Messaging
Envie e receba notificações do FCM.
Envio com o Cloud Messaging é uma aula grátis de Android Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Android Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Android Academy inclui 4 aulas no total.
O que é o Cloud Messaging?
O Firebase Cloud Messaging (FCM) entrega notificações push e mensagens de dados ao seu aplicativo — mesmo quando ele está fechado.
O fluxo é simples:
- Cada instalação do aplicativo recebe um token de registro exclusivo.
- Seu servidor (ou o console do Firebase) envia uma mensagem para esse token (ou para um tópico).
- O FCM encaminha a mensagem para o dispositivo, que a exibe ou processa.
Adicionar a dependência de mensagens
O FCM é fornecido pela biblioteca firebase-messaging, cuja versão é definida pela BoM configurada anteriormente.
Não é necessário informar um número de versão quando a BoM está presente.
// app/build.gradle.kts
dependencies {
implementation(platform("com.google.firebase:firebase-bom:33.1.0"))
implementation("com.google.firebase:firebase-messaging")
}A permissão para notificações
No Android 13 (API 33) e versões posteriores, publicar notificações exige a permissão em tempo de execução POST_NOTIFICATIONS.
Declare-a no manifesto e solicite-a em tempo de execução — sem essa concessão, suas notificações serão descartadas silenciosamente.
<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />Solicitar a permissão
Use a API Activity Result para solicitar POST_NOTIFICATIONS em tempo de execução. Solicite-a somente na API 33 ou posterior; versões mais antigas concedem essa permissão implicitamente.
import android.Manifest
import android.os.Build
import androidx.activity.result.contract.ActivityResultContracts
val requestPermission = registerForActivityResult(
ActivityResultContracts.RequestPermission()
) { granted ->
println(if (granted) "Notifications allowed" else "Notifications denied")
}
fun askNotificationPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
requestPermission.launch(Manifest.permission.POST_NOTIFICATIONS)
}
}O token de registro
Cada instalação tem um token FCM exclusivo que a identifica como destino. Obtenha-o com Firebase.messaging.token.
Envie esse token ao seu servidor para que ele possa enviar mensagens para esse dispositivo específico. Os tokens podem mudar, portanto, sempre considere o mais recente como válido.
import com.google.firebase.Firebase
import com.google.firebase.messaging.messaging
import kotlinx.coroutines.tasks.await
suspend fun currentToken(): String {
return Firebase.messaging.token.await()
}O serviço de mensagens
Para receber mensagens, estenda FirebaseMessagingService. Substitua onMessageReceived para processar as cargas recebidas e onNewToken para reagir quando o token for renovado.
Registre o serviço no manifesto com o filtro de intenção do FCM.
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
class MyFcmService : FirebaseMessagingService() {
override fun onNewToken(token: String) {
// Upload the fresh token to your backend
sendTokenToServer(token)
}
override fun onMessageReceived(message: RemoteMessage) {
val title = message.notification?.title ?: "New message"
val body = message.notification?.body ?: ""
showNotification(title, body)
}
private fun sendTokenToServer(token: String) { /* ... */ }
private fun showNotification(title: String, body: String) { /* ... */ }
}Registrar o serviço
Declare seu serviço no manifesto para que o Android possa entregar mensagens a ele. O filtro de intenção MESSAGING_EVENT é obrigatório.
<!-- AndroidManifest.xml inside <application> -->
<service
android:name=".MyFcmService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>Mensagens de notificação e de dados
As mensagens do FCM têm dois tipos:
- Mensagens de notificação — o FCM as exibe automaticamente na bandeja quando o aplicativo está em segundo plano;
onMessageReceivedsó é acionado quando o aplicativo está em primeiro plano. - Mensagens de dados — sempre são entregues a
onMessageReceivedcomo um mapa de chave/valor, para que você controle o processamento.
Leia os campos personalizados de message.data.
import com.google.firebase.messaging.RemoteMessage
fun handle(message: RemoteMessage) {
val type = message.data["type"] // your custom field
val itemId = message.data["itemId"]
when (type) {
"chat" -> openChat(itemId)
"promo" -> openPromo(itemId)
}
}
fun openChat(id: String?) {}
fun openPromo(id: String?) {}Criar um canal de notificação
Desde o Android 8, toda notificação precisa de um canal. Crie-o uma vez na inicialização; o sistema usa o canal para controlar o som, a importância e as configurações do usuário para cada canal.
import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context
fun createChannel(context: Context) {
val channel = NotificationChannel(
"messages",
"Messages",
NotificationManager.IMPORTANCE_HIGH
)
val manager = context.getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(channel)
}Exibir a notificação
Crie a notificação com NotificationCompat.Builder, associada ao ID do canal, e publique-a com NotificationManagerCompat.
Lembre-se: na API 33 ou posterior, ela só aparecerá se o usuário tiver concedido POST_NOTIFICATIONS.
import android.content.Context
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
fun showNotification(context: Context, title: String, body: String) {
val notification = NotificationCompat.Builder(context, "messages")
.setSmallIcon(android.R.drawable.ic_dialog_info)
.setContentTitle(title)
.setContentText(body)
.setAutoCancel(true)
.build()
NotificationManagerCompat.from(context).notify(1, notification)
}Inscrições em tópicos
Em vez de acompanhar tokens individuais, você pode transmitir para um tópico. Os clientes se inscrevem em um nome de tópico, e seu servidor envia uma única mensagem para todos os inscritos.
Isso é útil para coisas como anúncios de news, sports ou all-users.
import com.google.firebase.Firebase
import com.google.firebase.messaging.messaging
import kotlinx.coroutines.tasks.await
suspend fun subscribeToNews() {
Firebase.messaging.subscribeToTopic("news").await()
}
suspend fun unsubscribeFromNews() {
Firebase.messaging.unsubscribeFromTopic("news").await()
}Verificação rápida
Seu aplicativo está em segundo plano e recebe uma mensagem pura de notificação do FCM. O que acontece?
Recapitulação: Cloud Messaging
Agora você já pode alcançar os usuários com notificações push:
- Adicione
firebase-messaginge solicite POST_NOTIFICATIONS na API 33 ou posterior. - Cada instalação tem um token FCM; envie-o ao seu servidor.
- Estenda
FirebaseMessagingServicee substituaonMessageReceived/onNewToken. - Saiba a diferença entre mensagens de notificação e de dados.
- Crie um canal de notificação, construa com
NotificationCompatou transmita por meio de tópicos.
Isso conclui o trio do Firebase: Auth, Firestore e Messaging — um back-end completo para seu aplicativo Android.
Perguntas Frequentes
A aula “Envio com o Cloud Messaging” é grátis?
Sim — o texto completo de “Envio com o Cloud Messaging” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Android Academy, atualize para CoddyKit PRO. O curso de Android Academy inclui 4 aulas no total.
O que vou aprender em “Envio com o Cloud Messaging”?
Envie e receba notificações do FCM. Você pratica Android Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Android Academy?
Nenhuma experiência prévia é necessária. Android Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Envio com o Cloud Messaging”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Android Academy?
Sim. Cada aula de Android Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Configurando o Firebase
- Autenticação do Firebase
- Noções básicas do Cloud Firestore
- Envio com o Cloud Messaging