如何在不请求通知权限的情况下获取 Firebase 云消息传递的注册令牌?

Posted

技术标签:

【中文标题】如何在不请求通知权限的情况下获取 Firebase 云消息传递的注册令牌?【英文标题】:How to get a registration token for Firebase Cloud Messaging without requesting permission for notifications? 【发布时间】:2017-09-20 12:23:59 【问题描述】:

我的最终目标是让 Web 客户端订阅 Firebase 云消息传递中的主题,以接收按键分区的简单数据推送事件。通过这个问题,这似乎是可能的,但前提是您可以将客户端的注册密钥发送到您使用 FCM Admin API 控制的应用服务器:How to subscribe to topics with web browser using Firebase Cloud Messaging

此外,通过https://firebase.google.com/docs/cloud-messaging/js/client,似乎需要向用户请求权限才能显示桌面通知,才能访问 Firebase 消息传递的注册令牌。

有什么方法可以告诉 Firebase 不,我绝对不想要桌面通知,事实上请不要显示它们,我只想使用 data 消息而不是 notification?然后,获取注册令牌?或者,是否有其他方式可以从 Web 客户端订阅主题?

【问题讨论】:

我同意这个问题。如果我不想触发官方浏览器通知,而只想触发 javascript 事件,这不是安全问题。 Firebase 数据库无需特殊用户权限即可运行。 嘿,你知道这是否可行吗?我正在将 firebase 视为 Web 套接字的替代品(为了向查看网站的用户发送简单的推送消息,因为我根本不关心桌面通知) 【参考方案1】:

目前没有其他方法可以获取注册令牌,也没有其他方法可以为 Web 客户端订阅主题。

你已经知道了,但不妨提一下。出于安全目的(防止用户不想要的通知),请求权限是必须的,并且为了为网络客户端订阅主题,您首先必须获得一个令牌(这不会' t 生成,除非用户授予权限)。

【讨论】:

【参考方案2】:

您似乎在寻找Pusher

用于通信的用户通道。无令牌工作,支持双向联系。

示例代码

后端

pusher->trigger('my-channel', 'my-event', [

  'message' => 'hello world'

]);

前端

var channel = pusher.subscribe('my-channel');

channel.bind('my-event', function(data) 

  alert('Received my-event with message: ' + data.message);

);

【讨论】:

以上是关于如何在不请求通知权限的情况下获取 Firebase 云消息传递的注册令牌?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不请求的情况下在firebase-auth中首次加载时获取currentUser

如何在不使用 Firebase 控制台的情况下向 iOS 设备发送 Firebase 云消息通知?

如何在不迁移到 Firebase 的情况下获取 google-services.json

我开发了提醒应用程序,因此如何在不使用 firebase 的情况下向用户发送本地通知

如何在不使用 Firebase Cloud Messaging 控制台的情况下向 Flutter/Firebase Cloud Messaging 上的特定设备发送通知 [重复]

如何在不从参考节点获取所有数据的情况下获取 Firebase 数据库中的随机键?