Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon How do service workers handle push notifications in a PWA


How do service workers handle push notifications in a PWA


Service workers play a crucial role in enabling push notifications in Progressive Web Apps (PWAs). Here's how service workers handle push notifications:

1. Service Worker Registration:
- The client (PWA) registers a service worker using the `navigator.serviceWorker.register()` method. This sets up the service worker to handle push notification-related tasks in the background.

2. Push Subscription:
- The client subscribes to the push service using the `registration.pushManager.subscribe()` method. This method requests permission from the user to receive push notifications and returns a push subscription object.
- The push subscription object contains information like the endpoint URL and encryption keys, which are necessary for the server to send push messages to the client.

3. Storing Subscription:
- The client typically stores the push subscription object on the server, so that the server can use it to send push notifications to the client later.

4. Receiving Push Messages:
- The service worker listens for the `push` event, which is triggered when the server sends a push message.
- When the `push` event is received, the service worker can handle the push message, such as displaying a notification to the user.

5. Notification Display:
- The service worker can use the `self.registration.showNotification()` method to display a notification to the user, based on the data received in the push message.

6. User Interaction:
- When the user interacts with the notification (e.g., clicks on it), the service worker can handle the `notificationclick` event and perform additional actions, such as opening a specific page in the PWA.

7. Offline Functionality:
- Service workers can cache the necessary resources for push notifications, allowing the PWA to display notifications even when the user is offline.

Here's an example of how a service worker might handle a push event and display a notification:

javascript
self.addEventListener('push', function(event) {
  const title = 'New Message';
  const options = {
    body: event.data.text(),
    icon: 'images/icon.png',
    badge: 'images/badge.png'
  };

  event.waitUntil(
    self.registration.showNotification(title, options)
  );
});

In this example, the service worker listens for the `push` event, extracts the message data from the event, and then displays a notification to the user using the `self.registration.showNotification()` method.

By handling push notifications through service workers, PWAs can provide a seamless and engaging user experience, even when the user is not actively using the app. This helps to improve user engagement and retention, which are crucial for the success of a PWA.

Citations:
[1] https://www.mobiloud.com/blog/pwa-push-notifications
[2] https://stackoverflow.com/questions/77311595/push-notification-not-displayed-using-web-push-and-service-workers
[3] https://www.simicart.com/blog/pwa-service-worker/
[4] https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Tutorials/js13kGames/Re-engageable_Notifications_Push
[5] https://pushalert.co/blog/pwa-push-notifications-ios-android/