Not Getting Onesignal Subscription Id Chrome

128 Views Asked by At

I am trying to implement web push. I need to store the device id in the db to send notifications using api. After giving permission for Web Push. I am trying to get PushSubscription.id but I keep getting the error Abort _getOneSignalAndSubscriptionIds: no subscription & missing onesignalId instead of the id. I have added the detailed error & my code below. Any help would be highly appreciated.

Error is mentioned below

SessionManager.js:70 Uncaught (in promise) n: Abort _getOneSignalAndSubscriptionIds: no subscription
at $t.<anonymous> (https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.page.es6.js?v=160101:1:102170)
at Generator.next (<anonymous>)
at r (https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.page.es6.js?v=160101:1:260398)


n: processSubscriptionModel: missing onesignalId: {"subscribers":{},"modelName":"pushSubscriptions","modelId":"9boxjm6ty9u","data":{"type":"ChromePush","token":"*******","enabled":true,"notification_types":1,"sdk":"160101","device_model":"MacIntel","device_os":120,"web_auth":"*******","web_p256":"********"},"awaitOneSignalIdAvailable":{}}

My Code logic is

const currentOneSignalTimer = useRef();


  const OneSignalLoop = async () => {
    currentOneSignalTimer.current = setInterval(async ()=>{
      let subscriptionId = await OneSignal.User.PushSubscription.id
      console.log(subscriptionId, "onesignal subscription id after login")
      if(subscriptionId !== null && subscriptionId !== undefined){
        console.log('enter inside interval loop')
        let req = {
          device_id: subscriptionId
        }
        dispatch(saveDeviceId(req))
        clearInterval(currentOneSignalTimer.current);
      }
    }, 1000)
  }


  const handleOneSignal = async () => {
    try {
      let name = buyerDetails?.first_name?.trim() + " " + buyerDetails?.last_name?.trim()
      await OneSignal.login(name);
      const isSupported = await OneSignal.Notifications.isPushSupported();
      console.log(isSupported, "onesignal support")
      let permission = await OneSignal.Notifications.permission // boolean
      console.log(permission, "onesignal permission")
      let subscriptionId = await OneSignal.User.PushSubscription.id
      console.log(subscriptionId, "onesignal subscription id")
      let oneSignalInitialized = await sessionStorage.getItem('onesignalInitialized')
      console.log(OneSignal.User.PushSubscription.token,"token")
      console.log(oneSignalInitialized, "onesignal initialized")
      console.log(initializedOneSignal,oneSignalInitialized)
      if(!initializedOneSignal && (oneSignalInitialized !== 'true' || oneSignalInitialized === null)){
        console.log('enter')
        // await OneSignal.login(`${buyerDetails?.user_id}_${buyerDetails?.first_name?.trim()}`);
        OneSignal.init({
          appId: **************,
          safari_web_id: **************,
          allowLocalhostAsSecureOrigin: true,
          autoResubscribe: true,
          promptOptions: {
            slidedown: {
              enabled: true,
              actionMessage: "We'd like to show you notifications for the latest messages and other updates.",
              acceptButtonText: "Yes",
              cancelButtonText: "No"
            }
          },
          welcomeNotification: {
            "title": "Book An Artist",
            "message": "Thanks for subscribing!",
          },
          notifyButton: {
            enable: false,
          },
          allowLocalhostAsSecureOrigin: true,
        }).then(async (res) => {
          console.log(res,"res")
          OneSignalLoop()
          setTimeout(() => {
            clearInterval(currentOneSignalTimer.current);
          }, 90000);
          await setInitializedOneSignal(true)
          await OneSignal.Notifications.requestPermission()
          await OneSignal.Slidedown.promptPush()
          sessionStorage.setItem('onesignalInitialized',true)
          // OneSignal.login('Javed');
          let subscriptionIdNew = await OneSignal.User.PushSubscription.id
          console.log(subscriptionIdNew, "onesignal subscription id from then")
          // if(subscriptionIdNew !== null && subscriptionIdNew !== undefined){
          //   let req = {
          //     device_id: subscriptionIdNew
          //   }
          //   dispatch(saveDeviceId(req))
          // }
            // do other stuff
          });
      }
    } catch (error) {
      console.log(error)
    }
    
  }
0

There are 0 best solutions below