我想实现聊天。例如用户 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 .如果您使用这些标记,则必须将它们存储在某个地方,为它们提供查找等。这一切都是可能的,但使用主题会使文章更短。
- 如果同一用户在多台设备上都有聊天应用程序,他们将在每台设备上收到通知
还有这些缺点:
- 每个用户都需要有一个唯一的用户名。
- 消息不是私有(private)的(参见 Creating Firebase topic for each user )
在聊天应用程序中,用户已有一个唯一的昵称,因此这提供了一个简单的用户可见值来映射到主题。如果你、Veener 和我在聊天,将会有三个主题:/topics/user_aleksey
、/topics/user_veener
和/topics/user_puf
。每当你或 Veener 在聊天中提到我时,通知将被推送到 /topics/user_puf
。
有很多方法可以映射到主题。哪种方式最好取决于您的应用。
关于java - 为什么我需要让用户订阅 Firebase 中的主题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39316138/