Search
 
SCRIPT & CODE EXAMPLE
 

JAVASCRIPT

next-pwa push notification

// public/firebase-messaging-sw.js
importScripts('https://www.gstatic.com/firebasejs/7.9.1/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/7.9.1/firebase-messaging.js');

firebase.initializeApp({
  apiKey: '****',
  authDomain: '*****',
  projectId: '*****',
  storageBucket: '******',
  messagingSenderId: '*****',
  appId: '*****',
  measurementId: '*****',
});

firebase.messaging();

//background notifications will be received here
firebase.messaging().setBackgroundMessageHandler((payload) => {
  const { title, body } = JSON.parse(payload.data.notification);
  var options = {
    body,
    icon: '/icons/launcher-icon-4x.png',
  };
  registration.showNotification(title, options);
});

// webpush.js
import 'firebase/messaging';
import firebase from 'firebase/app';
import localforage from 'localforage';

const firebaseCloudMessaging = {
  //checking whether token is available in indexed DB
  tokenInlocalforage: async () => {
    return localforage.getItem('fcm_token');
  },

  //initializing firebase app
  init: async function () {
    if (!firebase.apps.length) {
      firebase.initializeApp({
        apiKey: '****',
        authDomain: '*****',
        projectId: '*******',
        storageBucket: '******',
        messagingSenderId: '******',
        appId: '*****',
        measurementId: '*******',
      });

      try {
        const messaging = firebase.messaging();
        const tokenInLocalForage = await this.tokenInlocalforage();

        //if FCM token is already there just return the token
        if (tokenInLocalForage !== null) {
          return tokenInLocalForage;
        }

        //requesting notification permission from browser
        const status = await Notification.requestPermission();
        if (status && status === 'granted') {
          //getting token from FCM
          const fcm_token = await messaging.getToken();
          if (fcm_token) {
            //setting FCM token in indexed db using localforage
            localforage.setItem('fcm_token', fcm_token);
            //return the FCM token after saving it
            return fcm_token;
          }
        }
      } catch (error) {
        console.error(error);
        return null;
      }
    }
  },
};
export { firebaseCloudMessaging };

// _app.js
import { firebaseCloudMessaging } from '../webPush';
import firebase from 'firebase/app';

useEffect(() => {
    setToken();
    async function setToken() {
      try {
        const token = await firebaseCloudMessaging.init();
        if (token) {
          getMessage();
        }
      } catch (error) {
        console.log(error);
      }
    }
    function getMessage() {
      const messaging = firebase.messaging();
      console.log({ messaging });
      messaging.onMessage((message) => {
        const { title, body } = JSON.parse(message.data.notification);
        var options = {
          body,
        };
        self.registration.showNotification(title, options);
      });
    }
  });
Comment

PREVIOUS NEXT
Code Example
Javascript :: automatically adjust color 
Javascript :: function expession js 
Javascript :: javascript camel case to words 
Javascript :: Changing Async/Await to Promises.all to Speed Up API Calls in Node.JS 
Javascript :: convert json to .env node 
Javascript :: setinterval clearinterval querySelector until render 
Javascript :: console.dir vs console.log 
Javascript :: change style selected text js 
Javascript :: api dfetch data in reactjs 
Javascript :: send data with next 
Javascript :: Custom usePagination hook 
Javascript :: Implicit returns in ES6 
Javascript :: ngFor fake 
Javascript :: image opacity reduce js 
Javascript :: vscode react debug chrome profile 
Javascript :: tampermonkey all pages 
Javascript :: stiches js keyframes 
Javascript :: unique in order codewars javascript 
Javascript :: why is table.current.row.length not working 
Javascript :: array[-1] not working 
Javascript :: create 24 hours array like 00:00 to 23:30 
Javascript :: javascript covert html characters to text 
Javascript :: storing jason format in perl and retriving it 
Javascript :: how to translate the title in js file in magento 2 
Javascript :: javascript to prevent method POST from realoading 
Javascript :: cantsee auto complete for node jsmodules in vs code 
Javascript :: filter last object of recursive array using javascript 
Javascript :: use only dispatch from useContext 
Javascript :: return a specific value filter javascript 
Javascript :: TOTAL 
ADD CONTENT
Topic
Content
Source link
Name
5+1 =