2016-09-04 52 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訂閱者...只有在權限,你可以像管理員,只有你會張貼或其他方面所有用戶將有權限寫,它會看起來喜歡聊天,對吧? –