是否有可能在没有专用XMPP服务器的情况下,使用FCM for Web在生产PWA中广播消息?



这是一个架构问题。我还没有实现FCM,但据我所知,有人需要在现实场景中部署XMPP服务器,该服务器提供已注册设备令牌的清单。

在我的用例中,我只想广播关于重要更新信息的短消息,比如"XY演示者在15:00的会议被取消了",我对设备令牌不感兴趣。我的应用程序是一个渐进式Web应用程序,所以我会使用FCM Web。

到目前为止,我看到的演示显示客户机接收设备令牌,然后从调试环境中获取特定的设备令牌,并使用该设备令牌向客户机发送演示消息—从而绕过了部署独立XMPP服务器的需要,但仅用于演示目的。

我希望避免使用XMPP服务器,如果可能的话,我对处理设备令牌根本不感兴趣。Firebase的FCM/GCM服务器有它们。我的计划是为该通道选择一个主题名称(这是我的应用程序目前实际使用的唯一主题),并将消息推送到收听该主题的设备。这个计划可行吗?我没有找到任何关于这个的提及。Firebase内部知道所有令牌,如果我不需要部署服务器,它将使架构更简单。

我不知道如何解除/设备令牌到期将发生在Firebase的一边,但这是另一个问题,我必须处理,如果我要运行我自己的XMPP服务器和提供令牌。

要向设备发送消息(所谓的下游消息),需要指定服务器密钥。顾名思义,这个密钥应该只存在于服务器或其他可信环境中。因此,要向设备发送消息,您需要在受信任的环境中运行代码。

服务器不需要使用XMPP协议。您也可以只使用HTTP来调用FCM服务器。但是需要服务器,因为发送下游消息只能从服务器完成。

关于使用这种方法发送设备到设备消息的简单示例,请参阅我的博客文章《使用Firebase数据库和Cloud Messaging在Android设备之间发送通知》。这是关于Android的,但使用Firebase Database作为消息队列的相同方法将适用于所有平台。

映射的棘手之处在于(正如你已经提到的)主题还不能用于FCM的web。上次测试时,您可以调用服务器端端点来订阅主题,就像下面的答案所描述的那样:GCM:如何将设备订阅到主题?

最新更新