0Pricing
Android Academy · Lección

Notificaciones push

Envíe notificaciones push mediante Firebase Cloud Messaging. Configure FCM, cree canales de notificación, construya notificaciones con acciones y gestione la entrega en primer plano y en segundo plano.

Notificaciones push es una lección gratuita de Android Academy en CoddyKit. Esta es la lección 4 de 6. 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 6 lecciones en total.

¿Qué son las notificaciones push?

Las notificaciones push permiten que su servidor envíe mensajes a los usuarios incluso cuando la aplicación no está en primer plano. Usos habituales:

  • Alertas de nuevos mensajes
  • Actualizaciones del estado de los pedidos
  • Noticias de última hora
  • Recordatorios y promociones

En Android, Firebase Cloud Messaging (FCM) es el servicio estándar para enviar notificaciones push.

Descripción general de FCM

Flujo de Firebase Cloud Messaging (FCM):

  1. La aplicación se registra en FCM durante el primer inicio y recibe un token del dispositivo
  2. La aplicación envía el token a su servidor
  3. Cuando desea enviar una notificación push, su servidor envía un mensaje a FCM
  4. FCM lo entrega al dispositivo

FCM es gratuito, fiable y funciona incluso cuando la aplicación se ha cerrado.

Añadir Firebase al proyecto

Pasos para añadir Firebase:

  1. Vaya a Firebase Console → Add project → Add Android app
  2. Registre su aplicación con el nombre del paquete
  3. Descargue google-services.json y colóquelo en app/
  4. Añada los plugins y las dependencias
// project/build.gradle:
buildscript {
    dependencies { classpath 'com.google.gms:google-services:4.4.1' }
}

// app/build.gradle:
plugins { id 'com.google.gms.google-services' }

dependencies {
    implementation platform('com.google.firebase:firebase-bom:32.7.4')
    implementation 'com.google.firebase:firebase-messaging-ktx'
}

Permiso de FCM (Android 13+)

A partir de Android 13 (API 33), debe solicitar el permiso POST_NOTIFICATIONS durante la ejecución, igual que un permiso peligroso:

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

// In Activity (Android 13+):
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
    requestPermissionLauncher.launch(android.Manifest.permission.POST_NOTIFICATIONS)
}

FirebaseMessagingService

Cree un servicio que gestione los mensajes entrantes de FCM y las actualizaciones del token:

class MyFirebaseService : FirebaseMessagingService() {

    override fun onNewToken(token: String) {
        // Send token to your backend to enable push delivery
        sendTokenToServer(token)
    }

    override fun onMessageReceived(message: RemoteMessage) {
        val title = message.notification?.title ?: "New Message"
        val body  = message.notification?.body  ?: ""
        showNotification(title, body)
    }
}

Registrar el servicio en el manifiesto

Declare el servicio en AndroidManifest.xml:

<service
    android:name=".MyFirebaseService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

Canales de notificaciones (Android 8+)

Desde Android 8 (Oreo), las notificaciones deben asignarse a un channel. Los usuarios pueden controlar el sonido, la vibración y la importancia de cada canal:

fun createNotificationChannel(context: Context) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        val channel = NotificationChannel(
            "messages_channel",           // channel ID
            "Messages",                   // user-visible name
            NotificationManager.IMPORTANCE_HIGH
        ).apply {
            description = "Incoming message notifications"
            enableVibration(true)
        }
        val manager = context.getSystemService(NotificationManager::class.java)
        manager.createNotificationChannel(channel)
    }
}

Crear y mostrar una notificación

Use NotificationCompat.Builder para garantizar la compatibilidad entre versiones de Android:

fun showNotification(context: Context, title: String, body: String) {
    val intent = Intent(context, MainActivity::class.java)
    val pendingIntent = PendingIntent.getActivity(
        context, 0, intent,
        PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
    )

    val notification = NotificationCompat.Builder(context, "messages_channel")
        .setSmallIcon(R.drawable.ic_notification)
        .setContentTitle(title)
        .setContentText(body)
        .setPriority(NotificationCompat.PRIORITY_HIGH)
        .setAutoCancel(true)             // dismiss on tap
        .setContentIntent(pendingIntent) // open app on tap
        .build()

    NotificationManagerCompat.from(context)
        .notify(System.currentTimeMillis().toInt(), notification)
}

Notificación con acciones

Añada botones de acción a las notificaciones para que los usuarios puedan actuar sin abrir la aplicación:

val replyIntent = Intent(context, ReplyReceiver::class.java)
val replyPending = PendingIntent.getBroadcast(
    context, 1, replyIntent,
    PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)

val notification = NotificationCompat.Builder(context, "messages_channel")
    .setSmallIcon(R.drawable.ic_notification)
    .setContentTitle("New message from Alice")
    .setContentText("Hey, are you coming?")
    .addAction(R.drawable.ic_reply, "Reply", replyPending)
    .addAction(R.drawable.ic_dismiss, "Dismiss", null)
    .build()

Gestión en primer plano y en segundo plano

FCM se comporta de forma diferente según el estado de la aplicación:

  • Aplicación en primer plano — se llama a onMessageReceived(); usted crea y muestra la notificación
  • Aplicación en segundo plano o cerrada — FCM muestra automáticamente la notificación a partir del payload notification; NO se llama a onMessageReceived

Coloque los datos adicionales en el payload data, no en notification, para recibirlos siempre en onMessageReceived.

Obtener el token de FCM

Recupere el token actual de FCM para enviarlo a su servidor:

FirebaseMessaging.getInstance().token.addOnCompleteListener { task ->
    if (!task.isSuccessful) {
        Log.w("FCM", "Fetching token failed", task.exception)
        return@addOnCompleteListener
    }
    val token = task.result
    Log.d("FCM", "Token: $token")
    // Send token to your server
    sendTokenToServer(token)
}

Comprobación rápida

¿Qué ocurre cuando su aplicación está en segundo plano y FCM entrega un mensaje con un payload 'notification'?

Repaso: notificaciones push

Notificaciones push con FCM en Android:

  • Añadir Firebase, google-services.json y firebase-messaging-ktx
  • Solicitar POST_NOTIFICATIONS en Android 13+
  • Crear FirebaseMessagingService → onNewToken + onMessageReceived
  • Crear un NotificationChannel para Android 8+
  • Crear notificaciones con NotificationCompat.Builder
  • Usar el payload data para recibirlo siempre en onMessageReceived

A continuación: programar trabajo en segundo plano con WorkManager.

Preguntas frecuentes

¿La lección «Notificaciones push» es gratis?

Sí — el texto completo de «Notificaciones push» 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 6 lecciones en total.

¿Qué aprenderé en «Notificaciones push»?

Envíe notificaciones push mediante Firebase Cloud Messaging. Configure FCM, cree canales de notificación, construya notificaciones con acciones y gestione la entrega en primer plano y en segundo plan… 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 6.

¿Cuánto tiempo toma la lección «Notificaciones push»?

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. Retrofit y API REST
  2. Carga de imágenes con Coil
  3. Gestión de errores y UX
  4. Notificaciones push
  5. WorkManager y tareas en segundo plano
  6. Publicación en Play Store
← Volver a Android Academy