firebase fcm 后台通知在 chrome 上不起作用,但在 firefox 上工作得很好

问题描述 投票:0回答:1

这是我的 Service Worker 文件“firebase-messaging-sw.js”的代码

firebase-messaging.sw.js

和我用来获取令牌的版本相同。

分享我已经尝试过的, 通过替换我的项目配置,对许多其他项目进行了在线测试,但它们都不适用于 chrome,因为之前我们实现此功能时,它已经过测试,并且在 chrome 浏览器中工作 100% 正常,但现在不行。

我使用最新的 Firebase sdk 版本 10.7.1 从头开始创建了一个 React,并尝试从 Firebase 测试消息控制台部分发送通知

从这个存储库克隆了一个项目并添加了我的凭据,它对于 Firefox 的前台和后台消息都运行良好 https://github.com/AudreyHal/React-Firebase-Cloud-Messaging-Demo

然后从消息文件夹中的官方 google firebase 存储库下载此代码,然后对服务工作人员和普通消息使用相同版本的 firebase,但问题仍然相同,在 Firefox 上工作,但在 chrome 上不起作用 https://github.com/firebase/quickstart-js/blob/master/messaging/README.md

我认为这可能是因为 chrome 的最新更新,所以我卸载了当前的浏览器并安装了 2022 年 6 月推出的版本,但问题仍然存在

通过执行这些操作并与 GPT 聊天后

我只能找到一些问题,但还没有解决方案

我只是得到并且仍然得到相同的错误,即“未捕获(承诺)未定义” 此错误是由此方法 self.registration.showNotification() 的承诺拒绝引发的,如果从 Service Worker 内部调用此方法,或者在我们设置注册路径的 Service Worker 外部注册 Service Worker 后调用此方法,它给出了同样的错误。通过在线检查,人们说问题可能是其中之一

  1. 图标路径无效(已测试但未解决问题)
  2. 缺乏显示通知的权限,但事实并非如此,因为我在浏览器中获得用户的权限后调用了此方法
  • 尝试将其放入 try catch 块中
  • 和 showNotification().then().catch() 块,但错误没有任何内容,因为此 showNotification Promise 解析为未定义,因此没有任何内容被捕获,并且除了未定义之外,在 catch 块中没有发现任何内容。

并且我已确保 Service Worker 已安装并激活,并检查了 Service Worker 内部和外部的状态。并做了人们正在做的一切,因为每个人都在说同样的方法来接收后台通知,所以尝试了所有这些方法,并尝试使用旧的非模块化 sdk 和新的带有 importscripts 的 firebase 模块化 sdk 版本,尝试使用简单的库和兼容的库,如文档所示。

但是以上都没有解决问题。

预期结果:它应该像以前一样在 chrome 上运行良好。

google-chrome firebase-cloud-messaging
1个回答
0
投票

尝试打开端口 5228-5230 和 443。

您可能还需要允许这些主机名:

mtalk.google.com
mtalk4.google.com
mtalk-staging.google.com
mtalk-dev.google.com
alt1-mtalk.google.com
alt2-mtalk.google.com
alt3-mtalk.google.com
alt4-mtalk.google.com
alt5-mtalk.google.com
alt6-mtalk.google.com
alt7-mtalk.google.com
alt8-mtalk.google.com
android.apis.google.com
device-provisioning.googleapis.com
firebaseinstallations.googleapis.com

来源:https://firebase.google.com/docs/cloud-messaging/concept-options#messaging-ports-and-your-firewall

FCM(Firebase 云消息传递):Firebase 推送通知在 Firefox 中显示,但在 Chrome 中不显示

© www.soinside.com 2019 - 2024. All rights reserved.