← blog
JavaScript Firebase FCM Multipiattaforma Push notification

Push FCM con suono garantito su Web, Android e iOS

Payload Firebase Cloud Messaging v1 completo che garantisce il suono di notifica su tutte le piattaforme — incluso il blocco apns.payload.aps.sound che, se dimenticato, fa arrivare le push mute su iPhone.

Il problema

Una notifica push FCM "corretta" su Android e desktop può arrivare completamente muta su iOS se manca un blocco specifico nel payload. Il motivo: APNs (Apple Push Notification service) richiede esplicitamente aps.sound, mentre webpush e Android hanno un suono di default.

Payload completo: webpush + android + apns

fcm-payload.js
const msg = {
  message: {
    token,
    // Browser desktop e Android via PWA
    webpush: {
      headers: { Urgency: 'high' },
      notification: {
        title, body, tag,
        silent: false,           // esplicito: usa suono di sistema
        requireInteraction: requireInteraction
      }
    },
    // Android nativo
    android: {
      priority: 'HIGH',
      notification: { sound: 'default', default_sound: true }
    },
    // iOS — senza aps.sound la push arriva MUTA
    apns: {
      headers: { 'apns-priority': '10' },
      payload: {
        aps: { sound: 'default', 'content-available': 1 }
      }
    },
    data: strData
  }
};

requireInteraction: aggiungilo nel blocco webpush.notification per notifiche che devono restare visibili finché l'utente non le tocca esplicitamente — utile per appuntamenti o eventi critici, a differenza di messaggi chat che possono scomparire da soli.

Attenzione: il blocco apns è obbligatorio per garantire il suono su iPhone — senza apns.payload.aps.sound la notifica viene comunque consegnata, ma in totale silenzio, ed è un bug difficile da scovare perché si manifesta solo su un sottoinsieme di dispositivi.

Perché suono e push si comportano diversamente in background

In-app, il suono via AudioContext funziona solo finché la pagina è aperta e in primo piano — i browser bloccano l'audio dei tab non visibili per policy di autoplay. Quando la PWA è in background o chiusa, l'unico modo affidabile per avere suono è delegarlo al sistema operativo tramite push FCM nativa.

Articolo correlato
Calendario Firebase PWA: notifiche push e bug restore sessione — caso reale