0Pricing
Android Academy · Lección

Envío mediante Cloud Messaging

Envíe y reciba notificaciones de FCM

Envío mediante Cloud Messaging es una lección gratuita de Android Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Android Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Android Academy incluye 4 lecciones en total.

¿Qué es Cloud Messaging?

Firebase Cloud Messaging (FCM) envía notificaciones push y mensajes de datos a su aplicación — incluso cuando está cerrada.

El proceso es sencillo:

  • Cada instalación de la aplicación obtiene un token de registro único.
  • Su servidor (o la consola de Firebase) envía un mensaje a ese token (o a un topic).
  • FCM lo dirige al dispositivo, que lo muestra o lo gestiona.

Añadir la dependencia de Messaging

FCM se incluye en la biblioteca firebase-messaging, cuya versión determina la BoM que configuró anteriormente.

Si la BoM está presente, no es necesario indicar un número de versión.

// app/build.gradle.kts
dependencies {
    implementation(platform("com.google.firebase:firebase-bom:33.1.0"))
    implementation("com.google.firebase:firebase-messaging")
}

El permiso de notificaciones

En Android 13 (API 33) y versiones posteriores, publicar notificaciones requiere el permiso en tiempo de ejecución POST_NOTIFICATIONS.

Declárelo en el manifiesto y solicítelo después durante la ejecución — sin concederlo, las notificaciones se descartan silenciosamente.

<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

Solicitar el permiso

Use la API Activity Result para solicitar POST_NOTIFICATIONS durante la ejecución. Solicítelo únicamente en API 33 y versiones posteriores; las versiones anteriores lo conceden implícitamente.

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)
    }
}

El token de registro

Cada instalación tiene un token de FCM único que la identifica como destino. Obténgalo con Firebase.messaging.token.

Envíe este token a su backend para que pueda enviar notificaciones a ese dispositivo específico. Los tokens pueden cambiar, así que considere siempre el más reciente como la fuente válida.

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()
}

El servicio de Messaging

Para recibir mensajes, extienda FirebaseMessagingService. Sobrescriba onMessageReceived para gestionar las cargas entrantes y onNewToken para reaccionar cuando el token se renueve.

Registre el servicio en el manifiesto con el filtro de intents de 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 el servicio

Declare el servicio en el manifiesto para que Android pueda entregarle los mensajes. El filtro de intents MESSAGING_EVENT es obligatorio.

<!-- AndroidManifest.xml inside <application> -->
<service
    android:name=".MyFcmService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

Mensajes de notificación y de datos

Los mensajes de FCM tienen dos tipos:

  • Mensajes de notificación — FCM los muestra automáticamente en la bandeja cuando la aplicación está en segundo plano; onMessageReceived solo se ejecuta cuando la aplicación está en primer plano.
  • Mensajes de datos — siempre se entregan a onMessageReceived como un mapa de clave/valor para que usted controle su gestión.

Lea los campos personalizados desde 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?) {}

Crear un canal de notificaciones

Desde Android 8, todas las notificaciones necesitan un canal. Créelo una vez al iniciar la aplicación; el sistema utiliza el canal para controlar el sonido, la importancia y los ajustes del usuario 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)
}

Mostrar la notificación

Construya la notificación con NotificationCompat.Builder, asociada al ID de su canal, y publíquela con NotificationManagerCompat.

Recuerde que, en API 33 y versiones posteriores, solo aparecerá si el usuario ha 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)
}

Suscripciones a topics

En lugar de realizar un seguimiento de tokens individuales, puede transmitir mensajes a un topic. Los clientes se suscriben a un nombre de topic y su servidor envía un único mensaje a todos los suscritos.

Es práctico para anuncios como news, sports o 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()
}

Comprobación rápida

Su aplicación está en segundo plano y recibe de FCM un mensaje de notificación puro. ¿Qué ocurre?

Recapitulación: Cloud Messaging

Ahora puede llegar a los usuarios con notificaciones push:

  • Añada firebase-messaging y solicite POST_NOTIFICATIONS en API 33 y versiones posteriores.
  • Cada instalación tiene un token de FCM; súbalo a su servidor.
  • Extienda FirebaseMessagingService y sobrescriba onMessageReceived / onNewToken.
  • Conozca la diferencia entre los mensajes de notificación y de datos.
  • Cree un canal de notificaciones, construya las notificaciones con NotificationCompat o transmítalas mediante topics.

Con esto completa el trío de Firebase: Auth, Firestore y Messaging — un backend completo para su aplicación de Android.

Preguntas frecuentes

¿La lección «Envío mediante Cloud Messaging» es gratis?

Sí — el texto completo de «Envío mediante Cloud Messaging» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Android Academy, actualiza a CoddyKit PRO. El curso de Android Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Envío mediante Cloud Messaging»?

Envíe y reciba notificaciones de FCM Practicas Android Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Android Academy?

No se requiere experiencia previa. Android Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Envío mediante Cloud Messaging»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Android Academy?

Sí. Cada lección de Android Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Configuración de Firebase
  2. Autenticación de Firebase
  3. Conceptos básicos de Cloud Firestore
  4. Envío mediante Cloud Messaging
← Volver a Android Academy