From 3f7bcbfd76c0147cca76d3a53e359478921d2890 Mon Sep 17 00:00:00 2001 From: Matthew Raymer Date: Mon, 28 Aug 2023 19:57:47 +0800 Subject: [PATCH] Added unsubscribe and mute --- web-push.md | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/web-push.md b/web-push.md index c0eb253..2415033 100644 --- a/web-push.md +++ b/web-push.md @@ -314,3 +314,47 @@ OneSignal) can perform in the role of such proxies. #4 -The INTERMEDIARY- doesn't appear to be anything we should be spending our time on. + +A BROWSER may also remove a subscription. In order to remove a subscription, +the registration record must be retrieved from the serviceWorker using +`navigator.serviceWorker.ready`. Within the `ready` property is the +`pushManager` which has a `getSubscription` method. Once you have the +subscription object, you may call the `unsubscribe` method. `unsubscribe` is +asynchronnous and returns a boolean true if it is successful in removing the +subscription and false if not. + + +``` +async function unsubscribeFromPush() { + // Check if the browser supports service workers + if ("serviceWorker" in navigator) { + // Get the registration object for the service worker + const registration = await navigator.serviceWorker.ready; + + // Get the existing subscription + const subscription = await registration.pushManager.getSubscription(); + + if (subscription) { + // Unsubscribe + const successful = await subscription.unsubscribe(); + if (successful) { + console.log("Successfully unsubscribed from push notifications."); + // You can also inform your server to remove this subscription + } else { + console.log("Failed to unsubscribe from push notifications."); + } + } else { + console.log("No subscription was found."); + } + } else { + console.log("Service workers are not supported by this browser."); + } +} + +// Unsubscribe from push notifications +unsubscribeFromPush().catch((err) => { + console.error("An error occurred while unsubscribing from push notifications", err); +}); +``` + +NOTE: We could offer an option within the app to "mute" these notifications. This wouldn't turn off the notifications at the browser level, but you could make it so that your Service Worker doesn't display them even if it receives them.