const CACHE_NAME = 'fcm-test-pwa-v1'; const urlsToCache = [ '/', '/index.html', '/app.js', '/manifest.json' ]; // Install event self.addEventListener('install', function(event) { event.waitUntil( caches.open(CACHE_NAME) .then(function(cache) { return cache.addAll(urlsToCache); }) ); }); // Fetch event self.addEventListener('fetch', function(event) { event.respondWith( caches.match(event.request) .then(function(response) { if (response) { return response; } return fetch(event.request); }) ); }); // Background sync for FCM importScripts('https://www.gstatic.com/firebasejs/10.7.1/firebase-app-compat.js'); importScripts('https://www.gstatic.com/firebasejs/10.7.1/firebase-messaging-compat.js'); // Initialize Firebase in service worker firebase.initializeApp({ apiKey: "AIzaSyAw1v4COZ68Po8CuwVKrQq0ygf7zFd2QCA", authDomain: "fcmtest-push.firebaseapp.com", projectId: "fcmtest-push", storageBucket: "fcmtest-push.firebasestorage.app", messagingSenderId: "439263996034", appId: "1:439263996034:web:9b3d52af2c402e65fdec9b" }); const messaging = firebase.messaging(); // Handle notification clicks self.addEventListener('notificationclick', function(event) { console.log('Notification clicked:', event); event.notification.close(); if (event.action === 'close') return; event.waitUntil( clients.matchAll({ type: 'window', includeUncontrolled: true }).then(function(clientList) { for (const client of clientList) { if (client.url === '/' && 'focus' in client) { return client.focus(); } } if (clients.openWindow) { return clients.openWindow('/'); } }) ); }); // Handle background messages messaging.onBackgroundMessage(function(payload) { console.log('Received background message ', payload); const notificationTitle = payload.notification.title; const notificationOptions = { body: payload.notification.body, icon: '/icon-192.png', badge: '/icon-192.png', tag: 'fcm-test' }; return self.registration.showNotification(notificationTitle, notificationOptions); });