2016-09-04 51 views
3

我想实现聊天。例如用户A,B,C ... 每个用户可以将消息发送到对方它是标准的像whatsup ...为什么我需要订阅用户到Firebase中的主题?

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

例如用户A发送消息给用户B,服务器创建一个话题testTopicName和他们订阅此话题该行代码

FirebaseMessaging.getInstance().subscribeToTopic(testTopicName); 

,但问题是,为什么我需要,如果我可以订阅用户到话题下一步:

发送通知从服务器到用户,并与名称或uniq的标识主题 用户通过这个uniq的话题的ID从服务器

retrived打开这个新的话题这是代码F ROM文件

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

你能解释一下什么是优势利用认购否则无论如何,我们需要表现的邮件用户列表...

随意问,如果我解释我的观点不是不够清楚点

回答

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

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

+0

我要完成这个实现,并希望你确认我的finilly理解...用户A发送消息给用户B.消息保存在FCM DB和立即服务器脚本中捕获此消息,阅读配方并向他发送名称通知的话题。和用户B连接到这个主题,对不对?最后一个问题是 - 这个主题名称必须是uniq,是否有一些出类拔萃的方法来做到这一点? –

+0

你似乎认为话题比他们更神奇。它只是一个发布/订阅模型。如果您向主题发布通知,则该主题的所有订阅者都会收到通知。 –

1

如果你有很多客户,发布/订阅就很有用。比方说,你有一个天气应用程序,并希望将龙卷风这样的天气警告推给住在特定城市的每个人。您可以发布一条消息给该城市的一个主题(这会传递给正在订阅该城市的每个人),或者您可以向住在该城市的每个人发送数千条消息,循环所有用户并发送许多个人消息。哪一个似乎更容易实施和交付?

+0

好的,谢谢!我明白你的观点。但如果我正确理解你,如果我需要实现聊天并将消息从一个确切的用户发送到另一个我没有使用订阅概念,对不对? –

+0

正确。您不需要使用发布/订阅点对点消息。 – Veener

+0

你有没有试过appy firebase?因为据我所知,一个用户创建一个主题,另一个用户有能力读写这个现存主题的帖子,如果他知道名称(uniq Id)...如果SMO否则会知道主题的名称,他也可以读/编写和firebase会一起知道它的所有知识名称。并不要紧,如果它会聊天惠特2用户或天气预警与1000订阅者...只有在权限,你可以像管理员,只有你会张贴或其他方面所有用户将有权限写,它会看起来喜欢聊天,对吧? –