繁体   English   中英

如何正确注销firebase消息传递所安装的服务工作者

[英]How to properly unregister service worker installed by firebase messaging

我正在尝试使用Firebase消息传递实现切换以在Web应用中打开/关闭通知。 我的通知工作正常,但是当用户尝试关闭通知时出现问题。 如果我只是通过以下方式取消注册服务工作者:

navigator.serviceWorker.getRegistrations().then((r) => {
  return Promise.all(r.map(reg => reg.unregister()));
});

然后工作人员确实未注册,但如果用户尝试重新打开通知,Firebase将抛出此错误:

messaging/no-sw-in-reg

该错误是有道理的,但似乎没有任何内置方法可以为不再需要它的用户取消注册Firebase。 如果用户再次要求通知,您是否应该删除firebase应用并重新初始化?

我意识到我可以删除firebase令牌并忘记我的数据库中的用户,但我不想留下永远不会再被调用的无用服务工作者。

让用户在Web应用中完全禁用firebase通知的正确方法是什么?

我有完全相同的问题。 所以我使用你的代码来摆脱服务工作者,然后我重新启动消息传递对象,这样你就可以在不重新加载页面的情况下再次取消订阅并安装服务工作者。

我发现这个问题发生了(至少在我的代码中),因为消息传递对象缓存了设备令牌,因此它不会触发在获取设备令牌时应该触发的事件。 因此,当您不想重新加载页面时,重新启动消息传递对象是一个可行的选项。 清理消息传递对象缓存,将是一个更好的解决方案。

示例代码:

navigator.serviceWorker.getRegistrations().then((r) => {
   return Promise.all(r.map(reg => reg.unregister()));
});
this.messaging = firebase.messaging();

愿来源与你同在。

如果对其他人有用,则可以仅取消订阅PushNotifications,而不是停用整个ServiceWorker。

通过仅取消订阅PushSubscription,您还可以避免重新分配消息传递属性。

这就是我取消订阅的方式:

/*
Returns a Promise that resolves on the PushSubscription object that controls the push notification subscription, after it finds the coresponding ServiceWorker
*/
getSubscription() : Promise<any>{
    if(!navigator) return;

    const subscriptions = navigator.serviceWorker.getRegistrations().then((r) => {
      return r.map((sw) =>{
        if(!(sw.active && sw.active.scriptURL.includes("firebase-messaging")))
          return Promise.resolve();
        return sw.pushManager.getSubscription();

      });
    });

    return subscriptions.then(arr => arr ? arr[0] : Promise.resolve(null));
  }

================================================== =========================

// Unsubscribes PushNotifications
rejectPermission() : Promise<boolean>{
    return this.getSubscription().then((pushSubscription : PushSubscription) =>{
      return pushSubscription.unsubscribe();
    });
  }

这就是我正在为我的应用程序做的事情,一切似乎都运行正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM