Мы в https://gdezerno.ru как сделали? В PWA у нас за приём сообщений отвечает Service Workers и Web Push API. Также мы запаковали приложение для Android и iOS с помощью Cordova, чтобы размещаться в маркетах (Google Play и App Store). Но в Cordova нет поддержки Service Workers. Поэтому за приём и отображение пушей у нас отвечает специальный плагин для Cordova. Называется cordova-plugin-firebase. Таким образом у нас пуши на всех 3 платформах.
На бэке у нас Firebase Cloud Functions (то есть по сути Node.js). Формируем объект (JSON) и шлём его на API endpoint Firebase Cloud Messaging. Всё, сообщение ушло на все 3 платформы.
А ещё у Firebase прямо в их web-консоли можно слать пуши в приложения (так же просто как написать письмо, заполняешь формочку: тема, тело, url и т.д.) и нажимаешь кнопку "Отправить".
Вообще если нужны только пуши для веба (без Android и iOS), то есть чисто для PWA, то есть набор отличных либ для всех популярных языков программирования: https://github.com/web-push-libs