promiseservice-workerpush-api

Issue with .subscribe() method of pushManager


I am following this very clear tutorial.

All works except that when I get to the stage subscribing a user with pushManager when I call pushManager.subscribe() I don't get any response from the promise whose status is pending.

Maybe I am missing some glaring problem with my setup, which is as follows:

    if ('serviceWorker' in navigator && 'PushManager' in window) {
      console.log('Service Worker and Push is supported');

      navigator.serviceWorker.register('service-worker.js')
      .then(function(swReg) {
        console.log('Service worker successfully registered.');

        navigator.serviceWorker.ready.then(function() {

          const subscribeOptions = {
            userVisibleOnly: true,
            applicationServerKey: ... // My application server key.
          };

          let promise = swReg.pushManager.subscribe(subscribeOptions)
          console.log(promise) // Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}
          promise
          .then(function(pushSubscription) {

            console.log('Received PushSubscription: ', pushSubscription); // Never gets called.
          })
          .catch(function(err) {
            console.error('Unable to subscribe.', err); // Never gets called.
          });
        })
      })
      .catch(function(err) {
        console.error('Unable to register service worker.', err);
      });
    }

Should additional configuration be made somewhere else? Any advice is appreciated.


Solution

  • Just came across this thread.

    The advice is to delete the GCM Store directory located in:

    C:\Users\[username]\AppData\Local\Google\Chrome\User Data\Default\GCM Store

    I first had to quit Chrome, delete the folder and then re-launch to get it to work.

    Seems like a bug which is traceable back to June 2016 (Chrome 51) and even though it is now October 2017 (Chrome 61) it still seems to be an issue.

    Hope this may help somebody.