Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过react js(pwa)中的服务工作者推送通知_Javascript_Reactjs_Service Worker - Fatal编程技术网

Javascript 通过react js(pwa)中的服务工作者推送通知

Javascript 通过react js(pwa)中的服务工作者推送通知,javascript,reactjs,service-worker,Javascript,Reactjs,Service Worker,我正在和PWA的服务人员一起尝试推送通知。注册服务人员后。我添加了用于安装和激活的事件侦听器,在激活事件侦听器中添加了用于通过push manager订阅注册推送服务的逻辑,但问题是控制台中没有关于激活和安装事件的日志,而尝试测试推送chrome开发工具而不在此处工作是我的问题代码: index.js serviceWorker.register() worker.js const publicVapidKey = "BOdud_KdO16dL40D56LbksLa6ElXFAJu-2

我正在和PWA的服务人员一起尝试推送通知。注册服务人员后。我添加了用于安装和激活的事件侦听器,在激活事件侦听器中添加了用于通过push manager订阅注册推送服务的逻辑,但问题是控制台中没有关于激活和安装事件的日志,而尝试测试推送chrome开发工具而不在此处工作是我的问题代码:

index.js

serviceWorker.register()

worker.js

const publicVapidKey = "BOdud_KdO16dL40D56LbksLa6ElXFAJu-2XEdIKQUmehzomo6FES2jJ1niaUYrCobfI8U5rkqeQNjPB03mKZMvY"

export const register = () => {
  console.log('register called');
  if ('serviceWorker' in navigator) {
    navigator.serviceWorker.register('/worker.js')
      .then((responseRegister) => {
        console.log('register object', responseRegister);
        window.registration = responseRegister;
      })
      .catch((err) => {
        console.log('error is ', err);
      })
  }
}

export const unregister = () => {
  console.log("unregister called");
  if ('serviceWorker' in navigator) {
    navigator.serviceWorker.getRegistrations()
      .then(function (registrations) {
        console.log('registrations', registrations);
        for (let registration of registrations) {
          registration.unregister()
        }
      }).catch(function (err) {
        console.log('Service Worker registration failed: ', err);
      });
  }
}

window.self.addEventListener('install', (event) => {
  console.log('service worker installed', event);
})

window.self.addEventListener('activate', (event) => {
  console.log('service worker activated', event);

  console.log('window', window);
  window.registration.pushManager.subscribe({
    userVisibleOnly: true,
    applicationServerKey: urlBase64ToUint8Array(publicVapidKey)
  }).then((subscription) => {
    console.log('subscription', subscription);
  })
    .catch((err) => {
      console.log('error in subscribing to push', err);
    });
})

window.self.addEventListener("push", e => {
  const data = e.data.json();
  console.log("Push Recieved...");
  window.registration.showNotification(
    data.title, {
    body: "Notified by Traversy Media!",
  });
});

function urlBase64ToUint8Array(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;
}
const publicVapidKey=“BOdud_KdO16dL40D56LbksLa6ElXFAJu-2xedikqumehzomo6fes2jjj1niauyrcobfi8u5rkqeqnjpb03mkzmvy”
导出常量寄存器=()=>{
log('register called');
if(导航器中的“serviceWorker”){
navigator.serviceWorker.register('/worker.js')
.然后((响应注册表)=>{
log('register object',responseRegister);
window.registration=响应注册器;
})
.catch((错误)=>{
log('error is',err);
})
}
}
导出常量取消注册=()=>{
log(“注销调用”);
if(导航器中的“serviceWorker”){
navigator.serviceWorker.getRegistrations()
.然后(功能(注册){
console.log(“注册”,注册);
用于(注册登记){
注册。注销()
}
}).catch(函数(err){
console.log('服务工作者注册失败:',错误);
});
}
}
window.self.addEventListener('install',(事件)=>{
console.log(“安装了服务人员”,事件);
})
window.self.addEventListener('activate',(事件)=>{
console.log(“服务工作人员已激活”,事件);
console.log('窗口',窗口);
window.registration.pushManager.subscribe({
userVisibleOnly:true,
applicationServerKey:urlBase64ToUint8Array(publicVapidKey)
})。然后((订阅)=>{
console.log('subscription',subscription);
})
.catch((错误)=>{
log('订阅推送时出错',err);
});
})
window.self.addEventListener(“推”,e=>{
const data=e.data.json();
控制台日志(“推送接收…”);
window.registration.showNotification(
data.title{
正文:“由Traversy Media通知!”,
});
});
函数urlBase64ToUint8Array(base64String){
常量padding=“=”。重复((4-base64String.length%4)%4);
常量base64=(base64String+填充)
.替换(/\-/g,“+”)
.替换(/_/g,“/”);
const rawData=window.atob(base64);
const outputArray=新的Uint8Array(rawData.length);
for(设i=0;i


单击推送不会触发任何推送事件

如果有人在寻找解决方案,我发现了问题所在,我使用的是src/worker.js,而代码则为all self。将进入public/worker.js,不必是window.self,只需self即可