使用XMPP服务器和Google云消息传递(或更新的Firebase云消息传递)进行推送通知的Android应用程序App

San*_*mín 18 java android xmpp google-cloud-messaging firebase-cloud-messaging

我正在为Android开发一个聊天应用程序.我已经阅读了几周关于XMPP和Google Cloud Messaging(以及Firebase云消息传递)的内容,我仍然感到非常困惑.

目前,我已经在本地设置了一个XMPP服务器(Ejabberd)并使用Smack库成功地将我的Android应用程序连接到它.

根据我的理解,我需要使用GCM或更新的FCM进行推送通知,因此我已经在Google Cloud Platform中创建了一个项目.我的Android应用程序也可以使用Smack库连接到它(而不是直接连接到我的XMPP服务器).在我的服务器中,我有一个小型Java应用程序,它也使用Smack库连接到GCM.

一切都很好,直到这里.我最大的困惑是:如何将我的XMPP服务器与GCM一起用于推送通知?我在服务器端实现中找到的每个文档,示例,指南和教程都告诉我如何连接到GCM,但没有人告诉我如何将我的XMPP服务器与GCM结合使用.我错过了什么?我的Java应用程序只是连接到GCM,从GCM接收和发送消息,但我的XMPP服务器只是坐在那里什么都不做.实际上我的Android App和服务器Java App只使用GCM,而不是我的XMPP服务器.

我希望有人可以帮助我理解这一点,我显然缺少实现这一实现的一些关键要素.

Nim*_*yan 15

你需要将Ejabberd和FCM混合在一起,这就是所有大型聊天应用程序在那里做的事情.对于基础知识,有3个组件:App Server通过XMPP连接到FCM,Ejabberd和您的客户端应用程序.

  1. 当应用程序位于前台时,您可以使用Smack库直接连接到Ejabberd服务器,发送消息,更改用户的状态等.在此期间保持与Ejabberd的连接.在此期间您发送上游消息!
  2. 用户离开您的应用后,您将关闭该连接.用户现在被视为"离开"或"离线".
  3. 从现在开始,您的App Server与FCM进行通信,以便使用Smack库将下游消息发送到设备.
  4. 在客户端设备上:您处理传入的消息并显示通知.使用Android N,用户可以直接从通知中回复.我假设在这种情况下,您将使用FCM向您的应用服务器发送上游消息,因为在此期间,您的Ejabberd服务器没有活动连接.
  5. 一旦用户点击通知,应用程序将返回到前台,您重新连接到Ejabberd并返回到步骤1.

这是您应该实现所需的架构的基本描述.


小智 6

这是一个示例Java项目,用于展示Firebase Cloud Messaging(FCM)XMPP连接服务器。该项目是一个非常简单的独立服务器,我将其作为较大项目的基础而开发。它是我们必须在环境中实现的应用服务器。该服务器使用XMPP协议通过FCM CCS服务器将数据发送到客户端应用程序。

https://github.com/carlosCharz/fcmxmppserver

另外,我还在youtube上创建了一个视频,解释了它的作用。

https://www.youtube.com/watch?v=PA91bVq5sHw

希望你觉得它有用。


Ril*_*ald 5

您应该设置连接到FCM(以前称为GCM)的Java服务器。然后,您可以从设备将上游消息发送到FCM,FCM然后将该上游消息发送到Java服务器,然后在该Java服务器中,您可以处理该上游消息以将下游消息发送到目标设备。然后,在设备端,您可以处理收到的那些下游消息以发出推送通知。

一些有用的链接:

如何发送上游消息:
https : //firebase.google.com/docs/cloud-messaging/upstream#sample-send

如何接收和处理下游消息:
https : //firebase.google.com / docs / cloud-messaging / downstream#sample-receive

如何设置示例Java服务器:https :
//stackoverflow.com/a/38170310/4433653