I have minimal experience. only got it working once. however, this worked in iOS for me:
const handlePushEnable = async () => {
const userChoice = await window.Notification.requestPermission();
if (userChoice === 'granted') {
const registration = await navigator.serviceWorker.getRegistration();
const subscribed = await registration.pushManager.getSubscription();
if (subscribed) {
console.info('User is already subscribed to push notifications.');
return;
}
const subscription = await registration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: urlB64ToUint8Array(process.env.REACT_APP_VAPID)
});
try {
await pushRegistration(subscription);
} catch (error) {
console.error('Unable to add push subscription to API', error);
}
navigator.serviceWorker.controller.postMessage({
type: 'ENABLE_PUSH',
});
}
setPushEnabled(userChoice);
};