使用Firebase进行一对一Android聊天

时间:2016-12-26 01:47:08

标签: android firebase xmpp push firebase-cloud-messaging

我需要一些澄清。

我正在使用Firebase实时数据库。

现在,我已经实现了两个Android设备之间的实时聊天。我还需要推送通知。

因此,基于实时数据库的解决方案将被删除,因为如果应用程序未运行,它将无法处理 onChildAdded 事件。

我在文档中读到了我可以实现我的目标,使用从设备到服务器的上游消息

现在,它还写了我们需要一个app服务器。

我只想澄清app服务器(XMPP或HTTP)的需求,这是从设备A发送的整个消息流m1,以及设备B上的通知。

在我看来,应用服务器应该充当中间的男人,所以:

  

A ---> XMPP服务器---> FCM

     

FCM ---> XMPP服务器--->乙

这是流吗? 在文档中我无法理解我是否正确。 如果是这样,我如何从FCM发送消息回XMPP服务器? 通知消息是从FCM发送到客户端o从XMPP服务器?

请有人澄清我。

我认为的其他解决方案: 由于我发现了非常强大的firebase实时数据库,我认为这些解决方案可以解决这个问题:

  1. 创建正在侦听onChildAdded的应用服务器,并在更改时向客户端设备发送通知。
  2. 在听取onChildAdded的客户端应用上创建后台服务,并在必要时创建通知。
  3. 即便如此,我也不喜欢这些解决方案。 只想了解实现目标的标准和正确方法。

1 个答案:

答案 0 :(得分:1)

Firebaser和文章的作者在这里的问题评论中进行了辩论

要将消息发送到具有Firebase Cloud Messaging的设备,您需要指定项目的FCM服务器密钥。顾名思义,此密钥只应用于在受信任环境中运行的代码中:即您控制的服务器。

要发送设备到设备消息(例如在接收用户不一定在线的1:1聊天应用程序中),您需要两个步骤:

  1. 一个用户发送上游消息
  2. 其他用户收到下游消息
  3. 使用Firebase云消息传递和您的自定义应用服务器代码,您可以处理第2步。但是仍然会离开第1步:用户需要发送一条消息,以某种方式在应用服务器上触发您的代码。有很多方法可以做到这一点。

    例如,您可以在应用服务器上实现HTTP端点,并让聊天应用程序也在那里发送消息(除了发送到数据库之外)。

    您还可以实现XMPP端点并让聊天应用程序在那里发送消息(除了将其发送到数据库之外)。

    My article建议另一种方式,根本不需要实现端点。它使用在您的应用服务器上运行的node.js脚本,基本上只是数据库的客户端。只要此脚本检测到相关的聊天消息,它就会调用FCM API并发送下游消息。

    使用Firebase时,使用Firebase数据库作为终端,然后使用服务器端脚本的这种模式非常常见。我们将其记录在我们的经典博客帖子Where does Firebase fit in your app?(作为选项2)和此article in the Google Cloud documentation中。