0

在Snapchat,Line,Kik,Groupme等應用程序中,用戶可以使用聯繫人列表從中發送消息給多個人。在移動消息應用程序中,是否應該從服務器或客戶端發送消息?

我正在構建一個消息應用程序,它具有類似的功能,並且首先要添加一個服務器並讓服務器存儲設備令牌並從服務器發送通知。 (順便說一句,我使用城市飛艇發送推送通知。)所以我想象的方式是這樣的:

  1. 用戶A寫道:「你好」向用戶B
  2. 「你好」被公佈我的服務器那裏得到存儲在數據庫,供以後檢索
  3. 後2是成功,服務器上崗「你好」,以城市飛艇服務器(Server有它擁有所有的設備ID信息的聯繫人列表)

然後我意識到這也可以做到客戶端,也就是說,如果可以存儲au的設備標記ser的聯繫人在他們的應用程序。因此,這是它如何工作的:

  1. 用戶A寫道:「你好」向用戶B
  2. 「你好」被貼到我的服務器裏將被存儲在數據庫,供以後檢索
  3. 後2成功後,客戶端(iPhone)帖「你好」直接到城市飛艇服務器(應用程序商店的所有核心數據用戶的聯繫人的設備ID)

我在推送通知這樣一個新手甚至不知道在客戶端存儲設備令牌是否安全/正常,但我覺得它會更有效率在服務器負載(我的服務器)方面,因爲所有的推送通知請求都是從客戶端發送的。對最佳做法有何建議?謝謝

回答

1

其實這聽起來像一個非常糟糕的主意。 1.當用戶加入網絡時,您需要將令牌發佈給與其相連的所有用戶。 如果你有大量的新用戶,它不那麼聰明。 2.一個簡單的嗅探器(網絡嗅探器\ openSSH嗅探器)可以檢測用戶令牌。 安全明智,這不是一個好主意。 3.另外,它超載用戶的設備。經驗法則,所有開銷都應由服務器處理。 考慮一下:

- 用戶的發送 「你好」 向用戶B

  1. 用戶A發送味精服務器
  2. 服務器保存味精+發送 「OK」,以用戶A
  3. 用戶A收到「確定」,現在再次發送消息給用戶B
  4. 用戶B收到消息併發送給用戶A「確定」。 您如何知道用戶B獲取的信息?他會向服務器發送「OK」嗎?

爲了使事情簡化, 去第一種方法,第二種是非常不推薦..

好運:-)

+0

您對安全問題的評論是有道理的。這就是爲什麼我問,因爲我不太瞭解設備令牌的含義。它不好嗎?設備令牌可以做什麼?我問,因爲我認爲只是設備令牌不能幫助你做任何事情 - 用戶必須爲應用程序授予許可才能開始發送推送通知 – Vlad

+0

關於第一點,您不一定必須發佈所有的令牌都傳遞給每個設備。假設我有200個朋友,我只需要這200個朋友的設備令牌。因此,無論何時打開應用程序,它都可以獲取200個朋友列表的服務器(或者如果有新朋友註冊),然後只存儲這200個,而不是整個用戶羣。 – Vlad

+0

如果我有令牌,我需要你和你的服務器?我可以直接發郵件給所有的朋友..廣告我仍然相信你需要服務器..有令牌dosent的選項讓你選擇發送Token2Token msging ..你需要一個服務器在中間。和安全明智的,如果我有你的令牌,我可以假裝你是你的令牌,並得到你的消息和發送你的belhaf ..想想它:-)(和投票如果答案幫助你:-)) –

1

如果您正在使用蘋果推送通知服務,你一定要在服務器從設備A從上述原因發送通知到設備,而不是直接到設備B.除在另一個答案中,存在與APNS服務器保持連接的問題。

如果每個設備都可以將其消息直接發送到APNS,則每個設備都必須維護自己的TLS連接到APNS服務器。由於設備通常與互聯網連接和斷開連接,因此該連接將頻繁關閉並重新打開。乘以安裝應用程序的設備數量,您將擁有大量短期連接到APNS的連接。這可能會導致您的證書被吊銷。

保持與APNs的連接在多個通知中打開;不要反覆打開和關閉連接。 APN將快速連接和斷開視爲拒絕服務攻擊。除非您知道它會長時間處於空閒狀態 - 例如,如果您每天僅向用戶發送一次通知,則每天都可以使用新連接,否則應該保持連接處於打開狀態。

Source

相關問題