【问题标题】:Get current push manager subscription in Angular using SwPush service使用 SwPush 服务在 Angular 中获取当前推送管理器订阅
【发布时间】:2020-09-21 07:29:35
【问题描述】:

我已经使用 SwPush 组件为我的 Angular 应用实现了网络推送通知。

现在我遇到了与问题Changing application server key in push manager subscription类似的问题

当我的应用服务器密钥发生变化时,如何刷新订阅?归结为:

如何在 Angular 中使用 SwPush 获取当前订阅?

我试过了:

this._swPush.subscription
  .pipe(take(1))
  .subscribe(pushSubscription => {
    if (pushSubscription) {
      console.log('Active subscription', pushSubscription) // never gets called
    }
    else {
      console.log('No active subscription')
    }
  }, err => { console.log("swpush.subscription error", err); })

但是当进入应用程序时,如果有一个有效的订阅,调用将永远不会返回。

【问题讨论】:

    标签: angular push-notification progressive-web-apps


    【解决方案1】:

    这也发生在我身上,不幸的是,这有几种可能发生。 首先,注册服务工作者和激活服务工作者是有区别的。我不完全确定(因为我对此也很陌生),但是您可以在服务工作人员注册后请求通知,但在服务工作人员处于活动状态之前您无法读取现有通知。

    检查您的app.module.ts 文件中您注册服务工作者的行,我的看起来有点像这样:

    ...
    ServiceWorkerModule.register('/tms-sw-worker.js', {
          enabled: environment.production,
          // Register the ServiceWorker as soon as the app is stable
          // or after 30 seconds (whichever comes first).
          registrationStrategy: 'registerWhenStable:30000'
        }),
    ...
    

    然后检查docs。这绝对是我遇到的一个问题,因为我做了和你一样的事情,但是被一个按钮点击绑定,它突然起作用了。 (现在我使用 setTimeout() 延迟 45 秒。

    显然(同样,不确定),您也可以像您第一次请求用户许可通知时一样,通过调用swPush.requestSubscription(...) 来获得现有订阅。对我来说,这会返回与swPush.subscription 相同的PushSubscription 对象,这对我来说很有意义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-24
      • 2019-10-23
      • 2012-05-02
      • 2020-02-15
      相关资源
      最近更新 更多