为什么我需要在Firebase中订阅用户主题?

时间:2016-09-04 10:52:54

标签: java android firebase firebase-cloud-messaging

我想实施聊天。例如用户A,B,C ...... 每个用户都可以向对方发送消息,标准如whatsup ...

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

例如,用户A向用户B发送消息,服务器创建主题testTopicName并使用此行代码订阅这个主题

FirebaseMessaging.getInstance().subscribeToTopic(testTopicName);

但问题是,如果我可以做下一步,我需要订阅用户主题:

从服务器向用户发送通知,并使用名称或主题的uniq Id 用户通过从服务器

重新获取的主题的uniq Id打开此新主题

这是文档中的代码

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

你能解释一下使用subscribe有什么好处,否则我们无论如何都需要代表用户的消息列表......

如果我不清楚地解释我的观点,请随时询问

2 个答案:

答案 0 :(得分:3)

有很多方法可以定位使用Firebase Cloud Messaging发送的邮件。来自documentation, you can send to

  • 主题名称
  • 设备注册令牌
  • 设备组名称

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

  • 该应用不必deal with registration token。如果你使用这些令牌,你必须将它们存储在某个地方,为它们提供查找等等。一切都是可能的,但使用主题使文章缩短了很多。
  • 如果同一用户在多台设备上拥有聊天应用,则会在每台设备上收到通知

这些缺点:

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

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

答案 1 :(得分:1)

如果您有很多客户,发布/订阅很有用。让我们假设您有一个天气应用程序,并希望将龙卷风等天气预警发送给居住在特定城市的所有人。您可以向该城市的主题发布一次消息(可以将其发送给订阅该城市的所有人),或者您可以向居住在该城市的每个人发送数千条消息,然后循环播放所有用户并发送许多个人消息。哪一个似乎更容易实现和交付?