首页 > 解决方案 > Angular PWA swPush.requestSubscription() 不起作用,错误:此浏览器禁用或不支持服务工作者

问题描述

我有一个使用 Angular 8 的 Ionic 5 PWA。我使用 swPush 完成了推送通知,它在 3 月之前一直按预期工作。但是,从上个月开始,由于其他一些变化,这停止了工作。我无法隔离问题。

swPush.isEnabled()返回 false,即使服务工作者已注册。关于 swPush 及其实现,代码中没有任何变化。我尝试了这个未回答的链接,但也没有帮助

当我使用 PUSH NOTIFICATION API(使用 PushManager)时,没有错误,一切正常,我正在获取订阅对象。这是 swPush 实现的问题,还是我的错误?

通知服务.ts

this.swPush.requestSubscription({
    serverPublicKey: this.VAPIDPublicKey
  })
  .then((sub: PushSubscription) => {
    const keys: SubscriptionObjectKeys = {
      auth: sub.toJSON().keys.auth,
      p256dh: sub.toJSON().keys.p256dh
    };
    const subscriptionObject: SubscriptionObject = {
      endpoint: sub.endpoint,
      expirationTime: 0,
      keys: keys
    };
    resolve(subscriptionObject);
  })
  .catch(err => {
    console.error('Could not subscribe to notifications', err);
    reject(err);
  });

Chrome 中的错误

Error: Service workers are disabled or not supported by this browser
at e.requestSubscription (service-worker.js:391)
at notification.service.ts:123
at new D (zone-evergreen.js:960)
at t.<anonymous> (notification.service.ts:103)
at Generator.next (<anonymous>)
at tslib.es6.js:73
at new D (zone-evergreen.js:960)
at o (tslib.es6.js:69)
at t.subscribeToSWPush (common-es2015.ffedc7b115b497dcd514.js:1)
at t.<anonymous> (notification.service.ts:61)

我也在 macOS 和 Windows 10 中使用 HTTP Server 和 SSL 进行了检查。两者都显示相同的问题。

我创建了一个新的 Ionic 应用程序并实现了相同的代码,在那里运行良好。我无法隔离问题。

任何建议都会非常有帮助。

标签: angularionic-frameworkpush-notificationprogressive-web-appsangular-service-worker

解决方案


我也得到了swPush.requestSubscription Error: Service workers are disabled or not supported by this browser.... 另外,swPush.isEnabled返回false。

没有使用ng serve,因为我知道服务人员不会在那里运行。我的 Angular PWA 正在使用 IIS 10、域名和 SSL(使用https)的临时服务器上运行。检查 chrome 调试(应用程序 > 服务工作人员)ngsw-worker.js 是#687 activated and is running. 除了 swPush 问题,我的 PWA 运行得非常好(就像我的 Windows 10 盒子上的桌面应用程序)。

我正在使用 Angular 11.2.7。你们解决了这个问题吗?


推荐阅读