[PWA] Add Push Notifications to a PWA with React in Chrome and on Android

Posted Answer1215

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[PWA] Add Push Notifications to a PWA with React in Chrome and on Android相关的知识,希望对你有一定的参考价值。

On android and in Chrome (but not on ios), it‘s possible to send push notifications with a PWA. We‘ll start by asking the user for permission to send them push notifications, and then look at how to intercept the push event in a service worker. We can test the push notifications directly in Chrome‘s devtools, and we will also make a button that can trigger a push notification directly from the PWA app code itself.

 

Install:

npm install web-push -g

 

Generate the key:

web-push generate-vapid-keys

 

In src/serviceworker.js (Generated by create-react-app) we need to save access to the service worker registration here. Set global.registration = registration.

function registerValidSW(swUrl, config) {
  navigator.serviceWorker
    .register(swUrl)
    .then(registration => {

      global.registration = registration

    ...
    })
    .catch(error => {
      console.error(‘Error during service worker registration:‘, error);
  });
}

 

Register function for push notification:

  function subscribe () {
    const key = ‘xxx-xxx-xxx‘;
    global.registration.pushManager.subscribe({
      userVisibleOnly: true,
      applicationServerKey: urlB64ToUint8Array(key)
      }).then(sub => {
        console.log("Subscribed!")
      }).catch(err => {
        console.log("Did not subscribe.")
      })
  }

function urlB64ToUint8Array(base64String) {
  const padding = ‘=‘.repeat((4 - base64String.length % 4) % 4);
  const base64 = (base64String + padding)
    .replace(/-/g, ‘+‘)
    .replace(/_/g, ‘/‘);

  const rawData = window.atob(base64);
  const outputArray = new Uint8Array(rawData.length);

  for (let i = 0; i < rawData.length; ++i) {
    outputArray[i] = rawData.charCodeAt(i);
  }
  return outputArray;
}

 

Now in src/sw.js: we can listen for a ‘push‘, event from the push server just like we did for fetch. Add a push eventListener. We‘re going to tell the event to waitUntil we show a push notification. Access the server worker registration with self.registration and call showNotification. That takes the title as the first argument and a hash of options as the second. For now, we‘ll set the iconto an icon that we already have in the public folder and the body to whatever text comes through the push from the server.

self.addEventListener(‘push‘, event => {
  event.waitUntil(self.registration.showNotification(‘Todo List‘, {
    icon: ‘/icon-120.jpg‘,
    body: event.data.text()
  }))
})

 

Last, in App.js, we write code to send push message:

  testPushMessage = () => {
    global.registration.showNotification(‘Test Message‘, {
      body: ‘Success!‘
    })
  }

 

以上是关于[PWA] Add Push Notifications to a PWA with React in Chrome and on Android的主要内容,如果未能解决你的问题,请参考以下文章

单击 service-worker ng7 + android 处理的推送通知时打开 PWA

使用 react-native-push-notification,App 在收到新的 FCM 通知时崩溃

Send push notification on Apple (APNS) on c#.net

git可以add,pull, 不可以push的问题解决

Chrome 和 Firebase 推送通知服务人员未准备好

一个 GIT 命令来统治它们(gacp:git-add-commit-push)