我可以在没有通知权限的情况下使用firebase云消息吗?(Javascript)

我可以在没有通知权限的情况下使用firebase云消息吗?(Javascript),firebase,websocket,firebase-cloud-messaging,Firebase,Websocket,Firebase Cloud Messaging,更新:谷歌漏洞报告说明 (正如google dev advocate在回答1的评论中所建议的,提交了一份bug报告;更新了这里的内容,因为它更简洁、准确地描述了问题) 我不需要或不想向我的用户显示任何通知。许多用户不愿意授予通知权限,因为他们认为他们将开始看到通知 但我希望将数据从服务器推送到我的网页。该网页处于活动状态且位于前台。这是Web套接字设计的经典用例 我知道我可以编写自己的web套接字服务器,并设法扩展它,或者到其他第三方寻求外包的可扩展web套接字推送解决方案 但,这不是Fireb

更新:谷歌漏洞报告说明

(正如google dev advocate在回答1的评论中所建议的,提交了一份bug报告;更新了这里的内容,因为它更简洁、准确地描述了问题)

我不需要或不想向我的用户显示任何通知。许多用户不愿意授予通知权限,因为他们认为他们将开始看到通知

但我希望将数据从服务器推送到我的网页。该网页处于活动状态且位于前台。这是Web套接字设计的经典用例

我知道我可以编写自己的web套接字服务器,并设法扩展它,或者到其他第三方寻求外包的可扩展web套接字推送解决方案

但,这不是Firebase消息传递所针对的一个非常常见的消息传递“子用例”吗?因此,谷歌不应该支持这个用例吗?我看不到任何基本的技术止损点,但由于谷歌是如此聪明,请告诉我,如果我遗漏了一些为什么不能或不应该这样做

原始堆栈溢出问题文本:

我不需要背景通知或服务人员。我只想在当前加载的网页处于前台时将数据发送到该网页

websocket不需要任何权限,但需要websocket服务器和维护。扩展它很困难,也很昂贵


Firebase从根本上解决了这个问题,但我不明白为什么它必须要求用户授予通知权限,即使我只想在加载页面时推送数据;不在后台。

这是为了保护用户对允许应用程序执行的操作的偏好。推送消息在浏览器上的工作方式是使用服务工作者。即使你说你不需要服务人员,但在你的应用程序中使用Firebase云消息时,你实际上是在利用它


鉴于此,提示是必要的,因为浏览器不知道您打算如何处理推送消息。如果用户不信任你的应用程序,他们应该有权限制它的实际功能,尤其是当他们不使用你的应用程序时。移动操作系统(iOS、Android)也是如此。

问题在于Firebase消息只使用一种方法发送通知。这是Push API规范规范,该规范(错误和不幸)不允许服务工作者在用户不允许不相关的权限显示通知的情况下接收消息

修复方法是Firebase消息传递团队提供一种不同的方式将消息传递到活动网页——长轮询或WebSocket


但这对他们来说是额外的工作,而且可能没有足够的人要求它。

如果你认为它做了错误的事情,请随时提交错误报告。是的,这正是我希望通过您与支持部门的联系实现的。我猜浏览器的逻辑是,如果您打算接收推送消息,它会假定您也可能尝试显示可见的通知,但它无法确定,一种选择是使用Firebase实时数据库或云Firestore作为消息传递系统。由于您不需要后台消息,只需写入数据库,您的foregrounded应用程序就会得到更新。@ArthurThompson谢谢。我成功地编写了您建议的解决方案,并且我能够将Cloud Firestore用作消息传递系统,而无需要求miy用户授予不必要的“显示通知”权限。问题是Firestore相对于消息传递来说非常昂贵,因为它首先是一个超级智能数据库。我面临同样的问题,你最终使用了什么解决方案?昂贵的解决方案是在应用程序处于前台时使用云Firestore通知(长轮询、web套接字)而不是推送API。根本原因似乎是那些想要杀掉网络应用而代之以移动应用的力量,因此推送API规范要求用户获得“显示通知权限”,即使用户永远不会显示通知,只接收异步通知。你知道这方面的代码示例吗?如果你有这方面的经验,你愿意进一步帮助我吗?你能链接到这个bug报告让我们投票吗?@D2TheC另外,显然谷歌firebase团队的一名成员已经回答了下面这个问题(doug stevens),提高他们注意力的一种方法是在他的回答中添加一条评论,看看他们是否易于说服。