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

Posted

技术标签:

【中文标题】我可以在没有通知许可的情况下使用 Firebase 云消息吗? (Javascript)【英文标题】:Can i use firebase cloud messaging without notification permission? (Javascript) 【发布时间】:2018-11-21 00:50:12 【问题描述】:

更新:Google 错误报告说明

(正如谷歌开发倡导者在 cmets 中对答案 1 的建议,提交了错误报告;在此处更新内容,因为它更简洁准确地描述了问题)

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

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

我知道我可以编写自己的 Web 套接字服务器并尝试以某种方式对其进行扩展,或者向其他第三方寻求外包的可扩展 Web 套接字推送解决方案。

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

原始 *** 问题文本:

我不需要后台通知或服务人员。我想要的只是在当前加载并在前台时将数据发送到网页。

Websockets 不需要任何权限,但它们需要一个 websocket 服务器和维护。扩展它既困难又昂贵。

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

【问题讨论】:

我也遇到了同样的问题,你最后用的是什么解决方案? 当应用程序处于前台时,昂贵的解决方案是使用 Cloud Firestore 通知(长轮询、Web 套接字)而不是 Push API。根本原因似乎是当权者想要杀死 Web 应用程序以支持移动应用程序,因此 Push API 规范要求从用户那里获得“显示通知权限”,即使一个人永远不会显示通知并且只接收异步通知。 你知道这方面的任何代码示例吗?如果您有这方面的经验,您愿意进一步帮助我吗? 您能否链接到此错误报告以供我们投票? @D2TheC 同样,显然 google firebase 团队成员在下面回答了这个问题(doug stevens),引起他们注意的一种方法是在他的回答中添加评论,看看他们是否可以接受说服。 【参考方案1】:

问题在于 Firebase 消息传递仅使用一种方法来传递通知。那是 Push API 规范规范,并且该规范(错误且不幸地)不允许服务工作者在没有用户允许 unrelated 权限来显示通知的情况下接收消息。

解决方法是让 Firebase 消息传递团队提供一种不同的方式来将消息传递到活动网页——长轮询或 websocket。

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

【讨论】:

【参考方案2】:

这是为了保护用户对允许您的应用执行的操作的偏好。推送消息在浏览器上的工作方式是使用服务工作者。即使您说不需要 Service Worker,但实际上在您的应用中使用 Firebase Cloud Messaging 时正在使用它。

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

【讨论】:

通知权限似乎只有在我的代码尝试显示通知时才起作用。如果 Service Worker 使用消息而不对其进行任何不需要通知权限的操作。 如果您认为它做错了,请随时提交错误报告。 firebase.google.com/support/contact/bugs-features 不知道您是开发者倡导者。我按照您的建议提交了一份报告,并用更准确的问题描述更新了问题文本。你能否让我知道至少你理解了这个问题(在我修改过的、精确的描述中)。如果你能让其中一位工程师就此发表意见,我将不胜感激。关键是我需要推送但我不需要显示通知,并且许多用户不允许通知权限,因为他们有理由期望开始看到通知,而我不需要显示。 一种选择是使用 Firebase 实时数据库或 Cloud Firestore 作为消息传递系统。由于您不需要后台消息传递,只需写入数据库,您的前台应用程序就会获得更新。 @ArthurThompson 谢谢。我成功编写了您建议的解决方案,并且可以将 Cloud Firestore 用作消息传递系统,而无需要求我的用户提供不必要的“显示通知”权限。问题是 Firestore 相对于消息传递来说非常昂贵,因为它首先是一个超级智能的数据库。

以上是关于我可以在没有通知许可的情况下使用 Firebase 云消息吗? (Javascript)的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有firebase的情况下显示推送通知?

是否可以在没有分析部分的情况下使用 Firebase Cloud Messaging Android 通知?

如何在没有 Firebase 和自定义后端的情况下使用 Flutter 设置推送通知

如何在不点击通知的情况下从通知中获取数据(firebase 云消息传递和本机反应)

Flutter - 将 Firebase 通知推送给没有 Firebase 身份验证的特定用户

适用于 Android 的 Firebase 推送通知