0Pricing
Android Academy · Aula

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; onMessageReceived só é acionado quando o aplicativo está em primeiro plano.
  • Mensagens de dados — sempre são entregues a onMessageReceived como 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-messaging e solicite POST_NOTIFICATIONS na API 33 ou posterior.
  • Cada instalação tem um token FCM; envie-o ao seu servidor.
  • Estenda FirebaseMessagingService e substitua onMessageReceived / onNewToken.
  • Saiba a diferença entre mensagens de notificação e de dados.
  • Crie um canal de notificação, construa com NotificationCompat ou 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

  1. Configurando o Firebase
  2. Autenticação do Firebase
  3. Noções básicas do Cloud Firestore
  4. Envio com o Cloud Messaging
← Voltar para Android Academy