Firebase(网络/浏览器)推送通知正确处理

时间:2018-06-13 11:02:13

标签: javascript firebase web push-notification firebase-cloud-messaging

Currenly我们按照方法使用浏览器推送通知:

  1. 请求被发送到有效负载内的data属性的FCM服务器(没有 notification属性),这省略了SDK以显示弹出消息
  2. 在客户端应用程序中,我们使用onMessage回调来显示前景状态的弹出窗口和服务工作者内部的setBackgroundHandler,以便在应用程序处于后台状态时显示弹出窗口。
  3. 重复弹出窗口存在问题(如果您有多个应用程序的后台选项卡/窗口),但我们设法使用ID和随机超时的消息索引来修复它以显示消息(触发索引消息的第一个超时)并显示弹出窗口,后续超时看到该消息已经显示,因此弹出窗口未显示。)

    所以现在一切都很好用这种方法。几乎所有......

    我们注意到只有在我们的应用程序打开了至少一个窗口/标签的情况下才会显示此类通知/弹出窗口(与背景或前景无关)。但是当我们使用SDK方法发送推送通知(在请求有效负载内提供notification属性)时,即使我们的应用程序完全关闭,也会出现弹出窗口,这真的很糟糕!

    因此,我们尝试结合使用两种方法,以便在应用程序关闭时显示弹出窗口,但我们遇到了一个问题。如果您打开了多个应用程序窗口/选项卡,其中一个位于前台而另一个位于后台,则会出现此问题。在这种情况下,弹出窗口出现两次,其中一个在onMessage回调(前景)中创建,另一个在SDK中创建。我们认为我们只能使用SDK方法,但在这种情况下,当应用程序处于前景状态(https://firebase.google.com/docs/cloud-messaging/js/receive)时,不会显示弹出窗口。

    然后我们想要跳过在onMessage回调中显示弹出窗口,以防在浏览器中打开我们的应用程序的多个选项卡/窗口,但似乎无法找到这些信息使用现有的Web API,这有点奇怪。有一些解决方法可以使用localStorage或IndexedDB为打开的选项卡/窗口制作一些计数器,但在浏览器崩溃的情况下它们并不安全。

    有没有人有这样的问题?你有什么解决方案?

0 个答案:

没有答案