【问题标题】:Why do I need to subscribe user to topic in Firebase?为什么我需要在 Firebase 中为用户订阅主题?
【发布时间】:2016-09-04 10:52:54
【问题描述】:

我想实现聊天。例如用户 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)) {

如果我们无论如何都需要表示消息的用户列表,您能否解释一下使用订阅有什么好处...

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

【问题讨论】:

    标签: java android firebase firebase-cloud-messaging


    【解决方案1】:

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

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

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

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

    还有这些缺点:

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

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

    【讨论】:

    • 我将完成此实现,并希望您确认我的最终理解...用户 A 向用户 B 发送消息。消息保存在 FCM DB 中,服务器脚本立即捕获此消息,阅读recipents 并向他发送带有主题名称的通知。用户 B 连接到这个主题,对吧?最后一个问题是 - 这个主题名称必须是 uniq ,是否有一些开箱即用的方法来做到这一点?
    • 您似乎认为主题比实际情况更神奇。它只是一个发布/订阅模型。如果您向某个主题发布通知,则该主题的所有订阅者都会收到通知。
    【解决方案2】:

    如果您有很多客户,发布/订阅非常有用。假设您有一个天气应用程序,并且想向居住在特定城市的每个人推送像龙卷风一样的天气警告。您可以向该城市的主题发布一次消息(该消息将发送给订阅该城市的每个人),或者您可以向居住在该城市的每个人发送数千条消息,循环遍历所有用户并发送许多个人消息。哪一个似乎更容易实施和交付?

    【讨论】:

    • 好的,谢谢!我明白你的观点。但是,如果我理解正确,如果我需要实现聊天并将消息从一个确切的用户发送给另一个用户,我不必使用订阅概念,对吧?
    • 正确。您不需要对点对点消息使用发布/订阅。
    • 你有没有尝试过 appy firebase?因为据我了解,一个用户创建一个主题,而另一个用户如果知道名称(uniq Id),则可以读写该现有主题的帖子...如果其他 SMO 将知道主题的名称,他也可以阅读/ write 和 firebase 将在所有已知主题名称之间立即同步它。无论是与 2 个用户聊天还是与 1000 个订阅者的天气警告都没有关系...仅在权限上有所不同,您可以像管理员一样,只有您可以发布或其他所有用户都有权写入,并且看起来喜欢聊天,对吧?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多