Currenly我们按照方法使用浏览器推送通知:
data
属性的FCM服务器(没有 notification
属性),这省略了SDK以显示弹出消息onMessage
回调来显示前景状态的弹出窗口和服务工作者内部的setBackgroundHandler
,以便在应用程序处于后台状态时显示弹出窗口。重复弹出窗口存在问题(如果您有多个应用程序的后台选项卡/窗口),但我们设法使用ID和随机超时的消息索引来修复它以显示消息(触发索引消息的第一个超时)并显示弹出窗口,后续超时看到该消息已经显示,因此弹出窗口未显示。)
所以现在一切都很好用这种方法。几乎所有......
我们注意到只有在我们的应用程序打开了至少一个窗口/标签的情况下才会显示此类通知/弹出窗口(与背景或前景无关)。但是当我们使用SDK方法发送推送通知(在请求有效负载内提供notification
属性)时,即使我们的应用程序完全关闭,也会出现弹出窗口,这真的很糟糕!
因此,我们尝试结合使用两种方法,以便在应用程序关闭时显示弹出窗口,但我们遇到了一个问题。如果您打开了多个应用程序窗口/选项卡,其中一个位于前台而另一个位于后台,则会出现此问题。在这种情况下,弹出窗口出现两次,其中一个在onMessage
回调(前景)中创建,另一个在SDK中创建。我们认为我们只能使用SDK方法,但在这种情况下,当应用程序处于前景状态(https://firebase.google.com/docs/cloud-messaging/js/receive)时,不会显示弹出窗口。
然后我们想要跳过在onMessage
回调中显示弹出窗口,以防在浏览器中打开我们的应用程序的多个选项卡/窗口,但似乎无法找到这些信息使用现有的Web API,这有点奇怪。有一些解决方法可以使用localStorage或IndexedDB为打开的选项卡/窗口制作一些计数器,但在浏览器崩溃的情况下它们并不安全。
有没有人有这样的问题?你有什么解决方案?