✨ feat(sw.js): Ajoute la gestion des notifications push et simplifie le SW. 🔧 chore(framework.yaml): Configure les proxies de confiance pour Cloudflare. ```
61 lines
2.1 KiB
JavaScript
61 lines
2.1 KiB
JavaScript
// --- Service Worker pour la gestion des Notifications Push ---
|
|
|
|
// Permet au Service Worker de s'activer immédiatement après l'installation
|
|
self.addEventListener("message", (event) => {
|
|
if (event.data && event.data.type === "SKIP_WAITING") {
|
|
self.skipWaiting();
|
|
}
|
|
});
|
|
|
|
// --- GESTION DES NOTIFICATIONS PUSH (Réception) ---
|
|
self.addEventListener('push', (event) => {
|
|
if (event.data) {
|
|
// Le payload JSON envoyé par votre serveur doit contenir
|
|
// 'title', 'message' et 'link'.
|
|
const data = event.data.json();
|
|
|
|
const title = data.title || 'Nouvelle Notification';
|
|
const message = data.message || 'Contenu mis à jour.';
|
|
const link = data.link || '/'; // Lien par défaut vers la racine
|
|
|
|
const options = {
|
|
body: message,
|
|
// PATH MIS À JOUR ICI : Assurez-vous que l'icône est accessible
|
|
icon: data.icon || '/assets/notif.png',
|
|
data: {
|
|
link: link // On stocke le lien pour le réutiliser au clic
|
|
}
|
|
};
|
|
|
|
// Affiche la notification
|
|
event.waitUntil(
|
|
self.registration.showNotification(title, options)
|
|
);
|
|
}
|
|
});
|
|
|
|
// --- GESTION DES CLICS SUR LA NOTIFICATION ---
|
|
self.addEventListener('notificationclick', (event) => {
|
|
// Récupère le lien stocké dans la notification
|
|
const urlToOpen = event.notification.data.link || '/';
|
|
|
|
// Ferme la notification après le clic
|
|
event.notification.close();
|
|
|
|
// Ouvre l'URL associée, soit dans un onglet existant, soit dans un nouvel onglet
|
|
event.waitUntil(
|
|
clients.matchAll({ type: 'window', includeUncontrolled: true }).then((clientList) => {
|
|
|
|
// Tente de trouver un client existant pour naviguer (si l'URL est déjà ouverte)
|
|
for (const client of clientList) {
|
|
if (client.url.includes(urlToOpen) && 'focus' in client) {
|
|
return client.focus();
|
|
}
|
|
}
|
|
|
|
// Sinon, ouvre une nouvelle fenêtre/onglet
|
|
return clients.openWindow(urlToOpen);
|
|
})
|
|
);
|
|
});
|