android - 使用 Firebase 的一对一 Android 聊天

标签 android firebase xmpp push firebase-cloud-messaging

我需要一些说明。

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

现在我必须在两个 Android 设备之间实现实时聊天。我还需要推送通知。

因此,基于实时数据库的解决方案是放弃,因为如果应用程序未运行,它将不会处理 onChildAdded 事件。

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

现在,它还写着我们需要一个应用服务器。

我只是想弄清楚应用服务器(XMPP 或 HTTP)的需要,以及从设备 A 发送的消息 m1 的整个流程,以及设备 B 上的通知。

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

A ---> XMPP SERVER ---> FCM

FCM ---> XMPP SERVER ---> B

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

请有人给我解释一下。

我想到的其他解决方案: 因为我找到了非常强大的 firebase 实时数据库,所以我认为这些解决方案可以解决这个问题:

  1. 创建一个正在监听 onChildAdded 的应用服务器,并在它发生变化时向客户端设备发送通知。
  2. 在客户端应用程序上创建一个监听 onChildAdded 的后台服务,并在必要时创建通知。

即使是所有,我也不喜欢这些解决方案。 只想了解实现我的目标的标准和正确方法。

最佳答案

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

要使用 Firebase 云消息传递向设备发送消息,您需要指定项目的 FCM 服务器 key 。顾名思义,此 key 只能用于在可信环境中运行的代码:即您控制的服务器。

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

  1. 一个用户发送上游消息
  2. 其他用户收到下游消息

使用 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 .

关于android - 使用 Firebase 的一对一 Android 聊天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41325775/

相关文章:

android - 在 ScrollView android 中显示完整 map

javascript - 数据未插入 Firebase 数据库

firebase - 在 Firestore 安全规则 "List"操作中使用变量

ios - 如何使用XMPP进行广播?

android - 我将如何在 Android 上实时共享聊天/草图?

android - 使相对布局的内容大于屏幕

android - 在 Activity 完成之前处理时如何在android Activity 中显示加载消息或对话框或图像?

android - 为两个 Android 应用程序共享相同的 SQLite 数据库

firebase - 在 Firebase 中构建数据

java - XMPP Smack 无法接收消息