// sw.js 'use strict'; /* eslint-disable max-len */ // const applicationServerPublicKey = "BNbxGYNMhEIi9zrneh7mqV4oUanjLUK3m+mYZBc62frMKrEoMk88r3Lk596T0ck9xlT+aok0fO1KXBLV4+XqxYM="; /* eslint-enable max-len */ function urlB64ToUint8Array(base64String) { const padding = '='.repeat((4 - base64String.length % 4) % 4); const base64 = (base64String + padding) .replace(/\-/g, '+') .replace(/_/g, '/'); const rawData = window.atob(base64); const outputArray = new Uint8Array(rawData.length); for (let i = 0; i < rawData.length; ++i) { outputArray[i] = rawData.charCodeAt(i); } return outputArray; } self.addEventListener('push', function(event) { console.log('[Service Worker] Push Received.'); console.log(`[Service Worker] Push had this data: "${event.data.text()}"`); const title = 'Push Codelab'; const options = { body: `"${event.data.text()}"`, icon: 'images/icon.png', badge: 'images/badge.png' }; event.waitUntil(self.registration.showNotification(title, options)); }); self.addEventListener('notificationclick', function(event) { console.log('[Service Worker] Notification click Received.'); event.notification.close(); event.waitUntil( clients.openWindow('https://developers.google.com/web/') ); }); self.addEventListener('pushsubscriptionchange', function(event) { console.log('[Service Worker]: \'pushsubscriptionchange\' event fired.'); const applicationServerPublicKey = localStorage.getItem('applicationServerPublicKey'); const applicationServerKey = urlB64ToUint8Array(applicationServerPublicKey); event.waitUntil( self.registration.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: applicationServerKey }) .then(function(newSubscription) { // TODO: Send to application server console.log('[Service Worker] New subscription: ', newSubscription); }) ); });