// Firebase configuration const firebaseConfig = { apiKey: "AIzaSyDxRobExITMPXChJsilyrZ2fD0UtBvzL-M", authDomain: "forsasport-2bfff.firebaseapp.com", projectId: "forsasport-2bfff", storageBucket: "forsasport-2bfff.firebasestorage.app", messagingSenderId: "1080291197522", appId: "1:1080291197522:web:513cd54aeb2ee47731958b" }; let messaging = null; // Initialize Firebase async function initializeFirebase() { try { // Make sure Firebase is loaded if (typeof firebase === 'undefined') { throw new Error('Firebase SDK not loaded'); } // Initialize Firebase if it hasn't been initialized yet if (!firebase.apps.length) { firebase.initializeApp(firebaseConfig); } // Initialize messaging messaging = firebase.messaging(); console.log('Firebase messaging initialized'); // Set up message handlers setupMessageHandlers(); // Request permission await requestNotificationPermission(); } catch (error) { console.error('Error initializing Firebase:', error); } } function setupMessageHandlers() { if (!messaging) return; messaging.onMessage((payload) => { console.log('Received foreground message:', payload); showNotification(payload.notification); }); } function showNotification(notification) { if (!("Notification" in window)) { console.log("This browser does not support notifications"); return; } new Notification(notification.title, { body: notification.body, icon: '/assets/images/notification-icon.png' }); } async function requestNotificationPermission() { try { const permission = await Notification.requestPermission(); console.log('Notification permission:', permission); if (permission === 'granted') { await getAndSaveToken(); } } catch (error) { console.error('Error requesting notification permission:', error); } } async function getAndSaveToken() { try { if (!messaging) { throw new Error('Firebase messaging not initialized'); } const currentToken = await messaging.getToken({ vapidKey: 'BLNbPFfjM8FnwRsnxNAFNli4BJg4O5kX_RtfZeyd25Vv4IgZ2oY8iG2mrJGmOoNlX4pKNOVTJ2GFD6uueIzLDCc' }); if (currentToken) { console.log('FCM Token obtained'); await sendTokenToServer(currentToken); } else { console.log('No registration token available.'); } } catch (err) { console.error('Error getting FCM token:', err); } } async function sendTokenToServer(token) { console.log('Sending token to server...'); try { const response = await fetch('/ajax/save-fcm-token.php', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ token: token }) }); // Get response text first const responseText = await response.text(); // Log raw response for debugging console.log('Raw server response:', responseText); // Try to parse as JSON let data; try { data = JSON.parse(responseText); } catch (e) { console.error('Server returned invalid JSON:', responseText); throw new Error('Invalid server response'); } // Check for error in response if (!response.ok || data.error) { throw new Error(data.error || `HTTP error! status: ${response.status}`); } console.log('Token saved successfully:', data); return data; } catch (error) { console.error('Error saving token:', error); throw error; } } // Make sure to include the necessary Firebase SDK scripts before this code document.addEventListener('DOMContentLoaded', () => { initializeFirebase().catch(console.error); });