Created
November 12, 2020 02:15
-
-
Save kaycebasques/04efb69b949682e35df654d2e169f297 to your computer and use it in GitHub Desktop.
Cross-browser compatible code for requesting notification permission
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
async function subscribeButtonHandler() { | |
function permissionRequestCallback(result) { | |
permissionStatus = result; | |
subscribe(); | |
} | |
async function subscribe() { | |
if (subscriptionInFlight) return; | |
subscriptionInFlight = true; | |
if (permissionStatus === 'denied') { | |
console.error('The user explicitly denied notification permission.'); | |
return; | |
} | |
const registration = await navigator.serviceWorker.getRegistration(); | |
console.info({registration}); | |
if (!registration.pushManager) { | |
console.error('PushManager interface not found.'); | |
return; | |
} | |
const subscription = await registration.pushManager.subscribe({ | |
userVisibleOnly: true, | |
applicationServerKey: urlB64ToUint8Array(VAPID_PUBLIC_KEY) | |
}); | |
if (subscription.endpoint) { | |
console.info('Successfully subscribed to push notifications!'); | |
console.info({subscription}); | |
unsubscribeButton.disabled = false; | |
} | |
fetch('/add-subscription', { | |
method: 'POST', | |
headers: { | |
'Content-Type': 'application/json' | |
}, | |
body: JSON.stringify(subscription) | |
}); | |
} | |
let permissionStatus; | |
let subscriptionInFlight = false; | |
try { | |
Notification.requestPermission(permissionRequestCallback).then(result => { | |
permissionStatus = result; | |
subscribe(); | |
}); | |
} catch (error) { | |
if (error instanceof TypeError) { | |
console.info('Callback version of Notification.requestPermission() detected'); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment