Notificaciones push en PHP con Firebase FCM

Enviar una notificación desde PHP con FCM (Firebase Cloud Messaging)

Las notificaciones push son esenciales para mantener el engagement de los usuarios. En este tutorial, veremos cómo crear una clase en PHP para comunicarnos con el API de Firebase (FCM) y cómo capturar el token en una App desarrollada con Cordova.

class NotifyGoogleFcm {
    private static $urlFcmGoogle = 'https://fcm.googleapis.com/fcm/send';
    private static $apiKey = 'TU_API_KEY_AQUI';
    
    public $title;
    public $body;
    public $to = '/topics/all'; // Destinatario por defecto
    public $registrationIds = array();
    public $data = array();
    public $icon = 'myicon'; // Icono por defecto de la app

    /**
     * Envía la notificación vía cURL a los servidores de Google
     */
    public function sendNotify() {
        $header = [
            'Authorization: key=' . self::$apiKey,
            'Content-Type: application/json'
        ];

        $payload = [
            'notification' => [
                'title' => $this->title,
                'body'  => $this->body,
                'sound' => 'default',
                'color' => '#22c08a',
                'click_action' => 'FCM_PLUGIN_ACTIVITY',
                'icon'  => $this->icon
            ],
            'priority' => 'high'
        ];

        // Lógica de destinatarios: IDs múltiples o un solo TO
        if (!empty($this->registrationIds)) {
            $payload['registration_ids'] = $this->registrationIds;
        } else {
            $payload['to'] = $this->to;
        }

        if (!empty($this->data)) {
            $payload['data'] = $this->data;
        }

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, self::$urlFcmGoogle);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Nota: En producción, mejor usar certificados
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
        
        $result = curl_exec($ch);
        curl_close($ch);
        
        return $result;
    }
}Lenguaje del código: PHP (php)

Ejemplos prácticos de uso en PHP

Para usar estos ejemplos, asegúrate de haber incluido primero tu clase NotifyGoogleFcm y configurado tu API_KEY.

1. Enviar una notificación masiva (a todos los suscritos)

Este es el caso más común para anuncios globales. Por defecto, nuestra clase apunta al tópico /topics/all.

$clNotify = new NotifyGoogleFcm();
$clNotify->title = '¡Nueva actualización disponible!';
$clNotify->body  = 'Hemos añadido nuevas funciones de PHP. Haz clic para verlas.';
$clNotify->icon  = 'ic_launcher'; // Nombre del recurso en tu App
$clNotify->sendNotify(); 
Lenguaje del código: PHP (php)

2. Enviar a un único dispositivo (Token individual)

Ideal para mensajes personalizados, como una alerta de seguridad o un mensaje privado. Solo tienes que asignar el token del dispositivo a la propiedad $to.

$clNotify = new NotifyGoogleFcm();
$clNotify->to    = "dtbjlnBC3Os:APA91bEHzYAdwZrCOvrMc5ottIbX6mygHi2N5UKg-_fdzsf63U_Ste"; 
$clNotify->title = 'Hola Marius';
$clNotify->body  = 'Tu código de verificación es 1234.';
$clNotify->sendNotify();
Lenguaje del código: PHP (php)

3. Enviar a un grupo selecto (Varios tokens)

Si tienes una lista de usuarios específicos (por ejemplo, solo administradores), utiliza el array registrationIds. La clase detectará automáticamente que debe usar registration_ids en lugar de to.

$clNotify = new NotifyGoogleFcm();
$clNotify->registrationIds = [
    "dtbjlnBC3Os:APA91bEHzYAdwZrCOvrMc5....",
    "dfuTx5jdD0w:APA91bFfDkzY0ntMOt......"
];
$clNotify->title = 'Alerta del Sistema';
$clNotify->body  = 'Se ha detectado un inicio de sesión desde una nueva IP.';
// También podemos pasar datos invisibles para que la App los procese
$clNotify->data  = ['id_alerta' => 45, 'urgente' => true]; 
$clNotify->sendNotify();
Lenguaje del código: PHP (php)

Me he basado en el código publicado en Stackoverflow

En la parte de Android, estoy utilizando Cordova con el plugin cordova-plugin-fcm-notification

Una vez instalado el plugin, como utilizarlo.

document.addEventListener("deviceready", function() {
    // 1. Obtener el token único del dispositivo
    FCMPlugin.getToken(function(token){
        console.log("Token del dispositivo: " + token);
        // Aquí deberías enviar el token a tu base de datos mediante AJAX
    });

    // 2. Escuchar cuando llega una notificación
    FCMPlugin.onNotification(function(data){
        if(data.wasTapped){
            // El usuario hizo clic en la notificación con la app cerrada
            alert("Notificación recibida: " + data.title);
        } else {
            // La app estaba abierta (Primer plano)
            console.log("Notificación en primer plano", data);
        }
    });
}, false);Lenguaje del código: JavaScript (javascript)

11 comentarios en “Notificaciones push en PHP con Firebase FCM”

  1. amigo otra pregunta, de casualidad sabes como activar el conteo de las notificaciones sobre el icono de la app ?, hay q activar alguna propiedad del plugin fcm para eso ?

      1. gracias, lo mirare, tengo una pregunta, sabes por que las notificaciones no suenan en algunos dispositivos ? o es solo cosa de los xiaomi ?

        1. Hola Raizel,
          La verdad que yo en todo los dispositivos que he probado han sonado, por lo que no te podria ayudar en este caso.
          Podrías mirar a nivel de notificaciones en los ajuste del Xiaomi ver si la app que has creado tiene asignado algun sonido.

          Saludos

    1. Hola Sergio, ya te he enviado un correo a la dirección de email que has indicado al publicar el comentario.
      Saludos

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Captcha cargando...

Scroll al inicio