java - 为什么我需要让用户订阅 Firebase 中的主题?

标签 java android firebase firebase-cloud-messaging

我想实现聊天。例如用户 A、B、C... 每个用户都可以互相发送消息,这是标准的,例如 whatsup...

并根据this article ,当一个用户向另一个用户发送消息时,我必须为他们订阅一个主题。

例如用户A给用户B发消息,服务器创建一个主题testTopicName并用这行代码订阅他们到这个主题

FirebaseMessaging.getInstance().subscribeToTopic(testTopicName);

但问题是,如果我接下来可以做,为什么我需要订阅用户主题:

从服务器向用户发送通知,并带有主题的名称或唯一标识 用户通过从服务器检索到的主题的唯一 ID 打开这个新主题

这是文档中的代码

 mFirebaseAdapter = new FirebaseRecyclerAdapter<FriendlyMessage,
            MessageViewHolder>(
            FriendlyMessage.class,
            R.layout.item_message,
            MessageViewHolder.class,
            mFirebaseDatabaseReference.child(testTopicName)) {

您能否解释一下使用订阅的优势是什么,否则我们无论如何都需要表示用户消息列表...

如果我解释得不够清楚,请随时问我

最佳答案

有很多方法可以定位使用 Firebase 云消息传递发送的消息。来自documentation, you can send to :

  • 主题名称
  • 设备注册 token
  • 设备组名

在这篇文章中,我决定将每个用户与一个主题相关联。这具有以下优点:

  • 应用程序不必 deal with registration token .如果您使用这些标记,则必须将它们存储在某个地方,为它们提供查找等。这一切都是可能的,但使用主题会使文章更短。
  • 如果同一用户在多台设备上都有聊天应用程序,他们将在每台设备上收到通知

还有这些缺点:

在聊天应用程序中,用户已有一个唯一的昵称,因此这提供了一个简单的用户可见值来映射到主题。如果你、Veener 和我在聊天,将会有三个主题:/topics/user_aleksey/topics/user_veener/topics/user_puf。每当你或 Veener 在聊天中提到我时,通知将被推送到 /topics/user_puf

有很多方法可以映射到主题。哪种方式最好取决于您的应用。

关于java - 为什么我需要让用户订阅 Firebase 中的主题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39316138/

相关文章:

java - 如何在 Android Marshmallow 上使用旧版 Apache HTTP 客户端?

java - 如何在调试级别的Gradle中运行Java测试

Java char 数组似乎每个 char 需要超过 2 个字节

Android MotionEvent 和 View 坐标

Java PBKDF2WithHmacSHA1 问题

iOS 空 Firebase 推送通知不显示

java - 具有许多不同 View 的 ListView 适配器

android - 检查 Google 附近是否已允许

php - 在 webView 中 PHP 登录后发送 Firebase 注册 token

android - Firebase 分析和同意对话框