firebase.messaging needs a SW registration. If you don’t specify a registration, it creates a new registration at the root level and needs a firebase-messaging-sw.js file at the root
useServiceWorker is deprecated

Registration can be passed when you getToken():

if ("serviceWorker" in navigator) {
  .then(function(registration) {
    console.log("Registration successful, scope is:", registration.scope);
    messaging.getToken({vapidKey: 'YOUR_VAPID_KEY', serviceWorkerRegistration : registration })
      .then((currentToken) => {
        if (currentToken) {
          console.log('current token for client: ', currentToken);

          // Track the token -> client mapping, by sending to backend server
          // show on the UI that permission is secured
        } else {
          console.log('No registration token available. Request permission to generate one.');

          // shows on the UI that permission is required 
      }).catch((err) => {
        console.log('An error occurred while retrieving token. ', err);
        // catch error while creating client token
    .catch(function(err) {
      console.log("Service worker registration failed, error:"  , err );


Support On Demand!