2012-02-08 24 views
4

(以下問題適用於一般移動平臺(iPhone,Android,Blackberry))使用推送通知的移動聊天功能,什麼時候應該推送?

我們正在將聊天功能集成到我們現有的應用程序中。我使用.Net Web服務和Sql數據庫設計了系統,以跟蹤聊天消息。當聊天窗口打開時,一切正常。

我需要一種方式來通知用戶當他/她當前沒有查看聊天屏幕時(意味着應用程序不在前臺或者他們在應用程序的另一部分中(而不是聊天中)屏幕)。

顯然,推送通知將是完美這裏,但我不知道,當我要發送推送。

如何將客戶端發送的消息知道其他人是否正在觀看聊天屏幕?我應該只是發送每一條消息推送,並讓接收設備決定是否需要彈出窗口或在禁止欄中顯示某些內容?

似乎每次發送郵件時都會過度使用它。這通常如何完成?

任何想法都將不勝感激。

謝謝。

+0

答案因平臺而異 - 沒有一種解決方案涵蓋了android,iphone和blackberry,因爲它們在客戶端代碼中都有不同的約束。 – 2012-02-08 20:29:57

回答

4

首先,請記住,您的服務器將充當所有在不同聊天客戶端之間傳遞的消息的代理。以下是這可能是工作:

  • 用戶A啓動消息的用戶B
  • 消息被髮送到服務器。
  • 服務器確定此消息適用於用戶B
  • 服務器發起推送通知並將消息傳遞給用戶B

現在爲什麼你需要推每一個聊天消息?因爲您的用戶獲得通知的唯一方式是輪詢您的服務器是否有新消息。恆輪詢(你確定任何率)在移動領域極其惡劣由於有限的資源(電池,網絡等)

推送通知情況下,它是由你的應用程序處理用戶是否在接收到新消息時通知的邏輯是。這意味着當用戶B收到來自用戶A的新消息時,由您決定是否要通知B(即將您的應用程序置於前臺)。無論在哪種情況下,都希望使用推送通知而不是輪詢。

在類似的說明中,用戶B未必知道用戶A的應用程序(您的應用程序)在後臺,因此您需要適當地處理該邏輯(在您的應用程序內)。

+0

感謝您的回覆。因此,我認爲每次有新消息可供用戶使用時都需要進行推送,並且設備應理清當然如何處理。這就是我需要知道的,謝謝。 – PaulG 2012-02-08 19:43:57

+0

@PaulG不客氣!只是爲了澄清(對於未來的讀者),這不是必要的,但您的用戶會感激它(在電池壽命等方面) – 2012-02-08 19:50:12

+1

不推薦每條消息的推送恕我直言。來自Apple文檔:「發送通知過於頻繁會對設備電池壽命造成負面影響,因爲設備必須訪問網絡才能接收通知。」 – heroandtn3 2016-04-23 09:58:25

0

如果應用程序不在前臺,通常會將推送通知應用於應用程序。這是一種喚醒應用程序以處理來自服務器的新事務的方式。基本上,如果客戶端在後臺運行並且準備從服務器獲取新消息,則會執行推送通知。只要不提取新消息,如果其他消息到達服務器,則應將推送通知發送給應用程序。

即使用戶正在查看應用程序的其他屏幕,如果應用程序仍在運行,則無需推送通知。然而,線程正在處理到服務器的連接是非常重要的,該服務器「耐心」地等待來自服務器的事務。

一個問題,您使用什麼協議進行消息傳遞?是OMA IMPS協議嗎?