You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.9 KiB
64 lines
1.9 KiB
// 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);
|
|
})
|
|
);
|
|
});
|
|
|