Call store action after IOS notification received



  • This is not really a Quasar issue but i implemented IOS notifications using Quasar, Cordova and the OneSignal SDK. the notifications work great but I can’t seem to be able to call a store action from the oneSignal config file after a user clicks on a notification. What i’m trying to do is grab a fresh copy of a user’s profile via an api call when a user clicks a notification and then navigate to the profile page.

    This is my OneSignal config file located in src/boot/one-signal.js directory

    export default async ({ app, router, store ,Vue }) => {
      app.$oneSignal = Vue.prototype.$oneSignal = {
        get instance () {
          return window.plugins && window.plugins.OneSignal
        },
    
        setup (appId, {initCallback} = {}) {
          if (!appId) {
            throw new Error('boot/one-signal: app id is required')
          }
    
          document.addEventListener('deviceready', function () {
    
            window.plugins.OneSignal.setLogLevel({ logLevel: 6, visualLevel: 0 });
    
            window.plugins.OneSignal.startInit(appId)
    
            if (initCallback) {
              initCallback(window.plugins.OneSignal)
            }
    
            window.plugins.OneSignal.handleNotificationOpened(function(openResult) {
    
              store.dispatch("user/loadProfile").then((res) => {
                router.push({ name: "profile" }).catch(() => {}); 
              })
         
            })
    
            window.plugins.OneSignal.endInit()
          }, false)
        },
    
        optIn (externalUserId) {
          window.plugins.OneSignal.setExternalUserId(externalUserId)
        },
    
        optOut () {
          window.plugins.OneSignal.removeExternalUserId()
        }
      }
    }
    

    The redirect works, but the loadProfile action is not called and ‘res’ is undefined. I know i could reload in ‘mount’ but most times i don’t want grab a fresh copy. What am i missing here in the way i’m handling it?



  • That was actually a silly mistake. In the action, i don’t call the api if profile is defined in the store already. The solution was to call the action in mount of the profile component. And in one-signal.js commit to null out the profile.

    store.commit("user/setProfile", null)
    

Log in to reply