通过XMPP在Firebase Cloud Messaging上发送上行消息的误解

4

我正在尝试将FCM功能集成到我的应用程序中。目前,我想显示一个按钮,当用户按下该按钮时,会生成一个上行消息并发送到Google的CCS。据我了解,这个上行消息将被Google CCS转换为XMPP报文。然后,它将被传递到具有我在创建上行消息时设置的ID的手机上。阅读谷歌的FCM文档后,我发现创建上行消息非常简单:

FirebaseMessaging fm = FirebaseMessaging.getInstance();
fm.send(new RemoteMessage.Builder(SENDER_ID + "@gcm.googleapis.com")
.setMessageId(Integer.toString(msgId.incrementAndGet()))
.addData("my_message", "Hello World")
.addData("my_action","SAY_HELLO")
.addData()//somewhere in here must be a way to set the senderId of the phone
// i am trying to send the message to ??? 
.build());  
现在看上面的代码,我并没有看到任何使用XMPP创建此上行消息的方式。也没有任何XMPP stanza的创建。我的问题涉及这个XMPP stanza会被传递到哪里?一旦离开Google's CCS。我看到了一个类继承FirebaseMessagingService,名为onMessageReceived的方法。我理解,在这个方法中,XMPP stanza将被传递。或者,它将在我打算建立的Smack库连接上传递,该连接将有一个PacketListener。根据"Gronkking Android"的例子,Google's CCS XMPP stanza将被传递到这个packetlistener。我打算按照这个例子来接收这些即将到来的stanza,并生成所需的ack消息。 如果有人有任何想法或想法,请分享您的评论。 谢谢。

好的。那么这个应用服务器是驻留在应用程序代码中还是外部的?从我看到的例子来看,我只需要使用与CCS通信的XMPP接口,并将相关信息存储在像GoDaddy这样的Web服务器上即可。但是,我仍然不知道如何通过smack实现这些stanza与CCS的通信。根据文档,我必须使用stanza授权我的连接。我应该向我的连接注册一个数据包侦听器吗?我会尝试这样做,以查看我的连接从CCS接收到了什么。@arthurthompson - i_o
一个非常简单的解释:应用服务器可以是您的家庭服务器或您可以访问的某个服务器(托管服务器),它必须运行xmpp服务器应用程序。它保持与FCM的连接,当设备发送上行消息时,FCM将把消息发送到您的应用服务器。 - MisterWalrus
那Firebase文档为什么说CCS使用XMPP作为认证传输层呢?它说我可以使用任何XMPP库来管理连接。由于Smack库提供了TLS和身份验证所需的所有支持,并且它是一个XMPP库,我可以使用它来管理连接以创建应用服务器。但我选择在我的代码内部使用它而不是外部使用。Smack中的连接对象也可以处理数据包。我已经在我的代码中使用Smack设置了TLS。我已经通过我的代码连接成功,而不是通过应用服务器。我遇到了SASLauth的问题。@MisterWalrus - i_o
是的,我想你是对的。如果您实现了所有必要的XMPP支持,那么您的应用程序服务器为什么不能成为设备呢?说实话,我没有像你强迫我看问题的方式那样去看待这个问题。你可能是对的。 - MisterWalrus
Smack可以管理连接。问题是大多数Smack示例都已过时。即使是javadocs也没有更新。尝试整理有效信息是一项挑战。@MisterWalrus - i_o
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
6

FCM不支持设备到设备的消息传递。上行消息被设计为从您的移动设备通过CCS发送到您的XMPP应用服务器。一旦您的XMPP应用服务器接收到消息,它可以决定通过CCS向移动设备发送下行消息。CCS与您的XMPP应用服务器之间使用stanza进行XMPP通信。


1

FCM云服务适用于从公司系统或银行系统等向下游发送PUSH通知。否则,如果要进行上游消息的工作,则需要拥有自己的XMPP应用服务器(通常在公共IP上),我看不到任何绕过它的方法。 FCM云服务将只是将收到的所有消息转发给它,而不会甚至阅读它们;路由所有消息到正确的移动设备始终是应用程序服务器的职责,通过召回FCM云服务。我想没有FCM服务中间会更容易,只需在某个公共IP上使用您自己的XMPP服务器,并且移动设备应用程序应该像XMPP客户端一样工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,