wesal/frontend/web/firebase-messaging-sw.js
2025-07-20 10:01:32 +03:00

109 lines
3.0 KiB
JavaScript

importScripts('https://www.gstatic.com/firebasejs/9.19.1/firebase-app-compat.js');
importScripts('https://www.gstatic.com/firebasejs/9.19.1/firebase-messaging-compat.js');
// Firebase configuration
const firebaseConfig = {
apiKey: "AIzaSyB5C-HmErqNFRlJwM4S4wfs-arMkJRVmGA",
authDomain: "wesalapp-bc676.firebaseapp.com",
projectId: "wesalapp-bc676",
storageBucket: "wesalapp-bc676.firebasestorage.app",
messagingSenderId: "865533380916",
appId: "1:865533380916:web:46725564ea0e1d4e70fd61",
measurementId: "G-V4BQJQB24E"
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);
// Initialize Firebase Messaging
const messaging = firebase.messaging();
// Handle background messages
messaging.onBackgroundMessage((payload) => {
console.log('Received background message ', payload);
const notificationTitle = payload.notification?.title || 'Wesal App';
const notificationOptions = {
body: payload.notification?.body || 'You have a new notification',
icon: '/icons/Icon-192.png',
badge: '/icons/Icon-192.png',
data: payload.data,
tag: payload.data?.type || 'general',
requireInteraction: true,
actions: [
{
action: 'open',
title: 'Open App',
},
{
action: 'close',
title: 'Close',
}
]
};
return self.registration.showNotification(notificationTitle, notificationOptions);
});
// Handle notification clicks
self.addEventListener('notificationclick', (event) => {
console.log('Notification clicked:', event);
event.notification.close();
if (event.action === 'close') {
return;
}
// Handle notification click - open the app
event.waitUntil(
clients.matchAll({ type: 'window' }).then((clientList) => {
// If the app is already open, focus it
for (const client of clientList) {
if (client.url === '/' && 'focus' in client) {
return client.focus();
}
}
// Otherwise, open a new window
if (clients.openWindow) {
return clients.openWindow('/');
}
})
);
});
// Handle push events
self.addEventListener('push', (event) => {
console.log('Push event received:', event);
if (event.data) {
const data = event.data.json();
console.log('Push data:', data);
const notificationTitle = data.notification?.title || 'Wesal App';
const notificationOptions = {
body: data.notification?.body || 'You have a new notification',
icon: '/icons/Icon-192.png',
badge: '/icons/Icon-192.png',
data: data.data,
tag: data.data?.type || 'general',
requireInteraction: true,
};
event.waitUntil(
self.registration.showNotification(notificationTitle, notificationOptions)
);
}
});
// Handle service worker activation
self.addEventListener('activate', (event) => {
console.log('Service worker activated');
});
// Handle service worker installation
self.addEventListener('install', (event) => {
console.log('Service worker installed');
self.skipWaiting();
});