Java Android聊天应用程序,使用XMPP服务器和谷歌云消息(或更新的Firebase云消息)进行推送通知
我正在为Android开发一个聊天应用程序。我已经阅读了数周关于XMPP和Google云消息(以及Firebase云消息)的内容,但我仍然非常困惑 目前,我已经在本地安装了一个XMPP服务器(Ejabberd),并使用Smack库成功地将我的Android应用程序连接到它 据我所知,我需要使用GCM或更新的FCM进行推送通知,因此我已经在Google云平台上创建了一个项目。我的Android应用程序也可以使用Smack库连接到它(而不是直接连接到我的XMPP服务器)。在我的服务器中,我有一个小型Java应用程序,它也使用Smack库连接到GCM 在这里之前一切都很好。我最大的困惑是:如何将我的XMPP服务器与GCM一起用于推送通知?我为服务器端实现找到的所有文档、示例、指南和教程都告诉我如何连接到GCM,但没有人告诉我如何将XMPP服务器与GCM一起使用我错过了什么?我的Java应用程序只是连接到GCM,从GCM接收和发送消息,但我的XMPP服务器只是坐在那里无所事事。实际上,我的Android应用程序和服务器Java应用程序只使用GCM,而不是我的XMPP服务器。Java Android聊天应用程序,使用XMPP服务器和谷歌云消息(或更新的Firebase云消息)进行推送通知,java,android,google-cloud-messaging,xmpp,firebase-cloud-messaging,Java,Android,Google Cloud Messaging,Xmpp,Firebase Cloud Messaging,我正在为Android开发一个聊天应用程序。我已经阅读了数周关于XMPP和Google云消息(以及Firebase云消息)的内容,但我仍然非常困惑 目前,我已经在本地安装了一个XMPP服务器(Ejabberd),并使用Smack库成功地将我的Android应用程序连接到它 据我所知,我需要使用GCM或更新的FCM进行推送通知,因此我已经在Google云平台上创建了一个项目。我的Android应用程序也可以使用Smack库连接到它(而不是直接连接到我的XMPP服务器)。在我的服务器中,我有一个小型
我希望有人能帮助我从整体上理解这一点,我显然缺少了实现这一实现的一些关键元素。您应该设置一个连接到FCM(以前的GCM)的Java服务器。然后,您可以从您的设备向FCM发送上行消息,FCM随后将该上行消息发送到您的java服务器,然后在该java服务器内,您可以处理该上行消息以向目标设备发送下行消息。然后在设备端,您可以处理接收到的那些下游消息,以发出推送通知 以下是一些有用的链接:
如何发送上行消息:
如何接收和处理下游消息:
如何设置示例Java服务器:
你需要将Ejabberd和FCM混合在一起,所有大型聊天应用程序都是这样做的。对于最基本的部分,有3个组件:通过XMPP连接到FCM的应用程序服务器、Ejabberd和您的客户端应用程序
这是实现所需的体系结构的基本描述。这是一个示例java项目,用于展示Firebase云消息传递(FCM)XMPP连接服务器。这个项目是一个非常简单的独立服务器,我是作为一个更大项目的基础开发的。它是我们必须在环境中实现的应用程序服务器。该服务器使用XMPP协议通过FCM CCS服务器向客户端应用程序发送数据 我还在youtube上制作了一段视频,解释它的功能
希望您觉得它有用。我还在Android中使用Smack v.4.1.8构建聊天应用程序,该版本是Smack的最新版本,我们的服务器使用ejabberd。我不会使用任何第三方(如GCM或Firebase)将下游消息从用户推送到用户消息。若我并没有错,你们将使用GCM或Firebase来推送用户对用户的消息,若有,就不要这样做 为什么?? TCP协议是保持侦听一个调用侦听器,当连接建立并仍然连接时,您在应用程序中注册了该侦听器。Smack有一个名为“addAsyncStanzaListener()的侦听器” addAsyncStanzaListener用于侦听应用程序中的接收数据包。他们有
public void processPacket(Stanza packet)
您可以调用它,并在一段时间内监听数据包
我做了一项关于保持Smack稳定连接的研究。大多数安卓智能手机都有各自的配置和限制。我们无法测试所有设备。
以下是我保持连接稳定的建议:
R Aditya Gumay您的建议适用于tcp/ip连接永不中断。在移动3G/4G网络中,情况并非如此。因此,在真正的3G/4G网络中,移动客户端/应用程序可能处于僵尸状态(断开连接)。
这就是为什么您需要Firebase/FCM来玩。非常感谢您的回答,但我仍然感到困惑。我已经有了一个连接到FCM的Java服务器(非常类似于该链接的代码),但是它在没有XMPP服务器的情况下工作,它只是使用FCM处理所有事情。我缺少什么?FCM有两个受支持的协议HTTP和XMPP。H