OneSignal-Website-SDK icon indicating copy to clipboard operation
OneSignal-Website-SDK copied to clipboard

[Question]: One signal notifications are not working in edge browsers?

Open krishnacoder-02 opened this issue 11 months ago • 1 comments

How can we help?

I have integrated one signal + next.js with one signal package I am getting notifications in chrome browser but not receiving notifications in edge browser.

this is my one signal implementation. useEffect(() => { router.events.on("routeChangeStart", () => NProgress.start()); router.events.on("routeChangeError", () => NProgress.done()); router.events.on("routeChangeComplete", () => NProgress.done());

const initOneSignal = async () => {
  if (!isLoggedIn) {
    console.log("User is not logged in, skipping OneSignal initialization.");
    return;
} 
  //debugger;
  const oneSignalExternalId = await fetchCustomerProfile();
  
  
  if (typeof window !== "undefined" && isLoggedIn && !isOneSignalInitialized.current && oneSignalExternalId && router.pathname != "/") {
    isOneSignalInitialized.current = true;
    console.log("Initializing OneSignal...");
    await OneSignal.init({
      appId: ONESIGNAL_APP_ID,
    //  safari_web_id: ONESIGNAL_SAFARI_WEB_ID,
      //serviceWorkerPath: '/OneSignalSDKWorker.js',
      //serviceWorkerParam: {scope:"/"},
      notifyButton: {
        enable: true,
      },
    });
    console.log("OneSignal initialized.");
   // console.log('OneSignal.setExternalUserId(oneSignalExternalId) ',OneSignal.setExternalUserId(oneSignalExternalId));
    
  // Ensure OneSignal is available before calling login
  if (OneSignal && typeof OneSignal.login === 'function') {
    await OneSignal.login(oneSignalExternalId);
    console.log(`User logged into OneSignal with external ID: ${oneSignalExternalId}`);
  } else {
    console.error("OneSignal.login is not a function");
  }

    const notifications = OneSignal.Notifications;

    if (notifications.isPushSupported()) {
      console.log("Push notifications are supported.");

      // Check if the user has already subscribed to notifications
      const pushSubscription = OneSignal.User.PushSubscription;
      console.log('User subscription: ', pushSubscription.optedIn);

      if (pushSubscription.optedIn) {
        console.log("User is already subscribed.");
        setIsSubscribed(true);
      } else {
        console.log("User is not subscribed. Showing popup.");
        setShowPopup(true);
      }

      // Add event listener to handle subscription change
      pushSubscription.addEventListener("change", (change) => {
        console.log("Subscription status changed:", change.current.optedIn);
        if (change.current.optedIn) {
          setIsSubscribed(true);
          setShowPopup(false);
        } else {
          setIsSubscribed(false);
        }
      });
    } else {
      console.log("Push notifications are not supported in this browser.");
    }
  }
};
if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/OneSignalSDKWorker.js?v=2')
    .then(registration => {
      console.log('Service Worker registered with scope:', registration.scope);

      if (registration.waiting) {
        registration.waiting.postMessage('skipWaiting');
      }

      navigator.serviceWorker.addEventListener('controllerchange', () => {
        console.log('New service worker activated');
      });
    })
    .catch(error => {
      console.error('Service Worker registration failed:', error);
    });
}

initOneSignal();
return () => {
  console.log("OneSignal cleanup");
  initOneSignal();
}

}, [isLoggedIn, router.pathname]);

krishnacoder-02 avatar Nov 13 '24 03:11 krishnacoder-02