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

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

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

FirebaseMessaging.getInstance().subscribeToTopic(testTopicName);

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

从服务器向用户发送通知,并带有主题的名称或唯一ID
用户通过从服务器获取的主题的唯一ID打开此新主题

这是文档中的代码
 mFirebaseAdapter = new FirebaseRecyclerAdapter<FriendlyMessage,
            MessageViewHolder>(
            FriendlyMessage.class,
            R.layout.item_message,
            MessageViewHolder.class,
            mFirebaseDatabaseReference.child(testTopicName)) {

您能否解释一下使用订阅的优势是什么,否则我们仍然需要代表用户的消息列表...

随意问我是否解释得不够清楚

最佳答案

有很多方法可以将Firebase Cloud Messaging发送的消息作为目标。从documentation, you can send to:

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

  • 在文章中,我决定将每个用户与一个主题相关联。这具有以下优点:
  • 该应用程序不必deal with registration token。如果使用这些标记,则必须将它们存储在某个位置,为它们提供查找等。所有这些都是可能的,但是使用主题使文章短了很多。
  • 如果同一用户在多个设备上都具有聊天应用程序,则他们将在每个设备上收到通知

  • 这些缺点:
  • 每个用户都需要有一个唯一的用户名。
  • 消息不是私有的(请参阅Creating Firebase topic for each user)

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

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

    10-07 13:14
    查看更多