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)
}
}