109 lines
3.0 KiB
JavaScript
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();
|
|
}); |