86 lines
2.6 KiB
JavaScript
86 lines
2.6 KiB
JavaScript
import { initializeApp, getApps } from "firebase/app";
|
|
import { getMessaging, getToken, onMessage } from "firebase/messaging";
|
|
|
|
const firebaseConfig = {
|
|
apiKey: "AIzaSyBZV7KBLRJSTApahfrO8lBesmIM3zNRSaY",
|
|
authDomain: "sweet-home-b2766.firebaseapp.com",
|
|
projectId: "sweet-home-b2766",
|
|
storageBucket: "sweet-home-b2766.firebasestorage.app",
|
|
messagingSenderId: "602865114600",
|
|
appId: "1:602865114600:web:ed9b6754940507a6ab585d",
|
|
measurementId: "G-M2V95NBJLX",
|
|
};
|
|
|
|
// Initialize Firebase (avoid duplicate init in SSR)
|
|
const app = getApps().length === 0 ? initializeApp(firebaseConfig) : getApps()[0];
|
|
|
|
// Get messaging instance (only works in browser)
|
|
let messaging = null;
|
|
if (typeof window !== "undefined" && "serviceWorker" in navigator) {
|
|
try {
|
|
messaging = getMessaging(app);
|
|
} catch (e) {
|
|
console.warn("[Firebase] Messaging init failed:", e.message);
|
|
}
|
|
}
|
|
|
|
// Request notification permission and get FCM token
|
|
export async function requestNotificationPermission() {
|
|
if (typeof window === "undefined") return null;
|
|
|
|
try {
|
|
const permission = await Notification.requestPermission();
|
|
if (permission !== "granted") {
|
|
console.log("[FCM] Notification permission denied");
|
|
return null;
|
|
}
|
|
|
|
const registration = await navigator.serviceWorker.register("/firebase-messaging-sw.js");
|
|
|
|
const token = await getToken(messaging, {
|
|
vapidKey: "BGZ4Fo8rRhoTdStLGlCySDZOnAX4ekCA0e3HDWXL5uEi2kOnXynYjbaDbY15002phUrFqxBpPPFHgfH2VhrmFDU",
|
|
serviceWorkerRegistration: registration,
|
|
});
|
|
|
|
console.log("[FCM] Token:", token);
|
|
|
|
// Send token to backend
|
|
if (token) {
|
|
try {
|
|
const authToken = localStorage.getItem("auth_token");
|
|
if (authToken) {
|
|
const apiBase = process.env.NEXT_PUBLIC_API_URL || "http://45.93.137.91/api";
|
|
await fetch(`${apiBase}/Notifications/RegisterWebToken`, {
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
Authorization: `Bearer ${authToken}`,
|
|
},
|
|
body: JSON.stringify({ token }),
|
|
});
|
|
console.log("[FCM] Token sent to backend");
|
|
}
|
|
} catch (err) {
|
|
console.error("[FCM] Failed to send token to backend:", err);
|
|
}
|
|
}
|
|
|
|
return token;
|
|
} catch (err) {
|
|
console.error("[FCM] Error getting token:", err);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
// Listen for foreground messages
|
|
export function onForegroundMessage(callback) {
|
|
if (!messaging) return () => {};
|
|
|
|
return onMessage(messaging, (payload) => {
|
|
console.log("[FCM] Foreground message:", payload);
|
|
callback(payload);
|
|
});
|
|
}
|
|
|
|
export { app, messaging };
|