2012-05-24 30 views
16

由於我想在移動應用中建立可靠的通信,我可以從第三方推送服務(C2DM,APN,城市飛艇)推送失敗的報告(可能設備處於脫機狀態)嗎? 或者我們需要自己構建它?如何實現可靠的推送消息服務?

回答

4

Android C2DM的預期用途是爲您的服務器應用程序發送信號,告知移動設備它希望開始可靠的通信。

您可以構造消息,以便每個新的C2DM都包含自從與服務器進行最後雙向交互(即「來,拿到我所得到的東西」)以來發生的所有事情。您的失敗投遞報告隱含在移動設備沒有及時響應(您可以這樣做,因爲您知道C2DM使用Intent激活您的應用程序)。

這是真的比保證每個消息在有損介質中傳遞更糟嗎?好吧,更糟糕的是你還必須實施主要的溝通方式。但無論如何,你必須這樣做,因爲C2DM僅限入站,對嗎?

+0

謝謝!我認爲它適用於任何不可靠的基於推送的服務。我會評估每個答案,並獎勵給我最好的一個。 –

2

正如Vinay所說,MQTT可能會爲您提供所需的功能。當客戶端連接到服務器時,它可以向服務器註冊「最後的遺囑」消息。如果客戶端意外斷開連接,服務器會將此消息發送給它被指示執行的主題。

在這個方案中,你的客戶端可以發送消息「在線」給客戶端//狀態之類的東西,並將消息「脫機」註冊爲同一主題的LWT。然後,您可以擁有一個服務器本地客戶端,該客戶端可以監聽主題客戶端/ + /狀態,並知道哪些客戶端在線以及哪些客戶端處於離線狀態。

我建議tokudu演示不是最好看的地方。本博客文章由戴爾巷深入分析了在Android上使用MQTT:http://dalelane.co.uk/blog/?p=1599並沒有在http://stephendnicholas.com/archives/219

有客戶端實現,以滿足這兩個IOS和Android MQTT電量(再次在Android)的審查,看http://mqtt.org/software

+0

感謝您的回覆!大拇指首先爲您的答案。 –

+3

這裏是另一個用電比較,這次https:http://stephenndnicholas.com/archives/1217 – ralight

2

沒有一個服務沒有提供關於失敗推送的報告。

未能推報告提出用APN/C2DM /氦

所有服務都旨在在所有情況下提供推送消息的小SENCE。 如果設備現在處於脫機狀態,則當設備變爲聯機狀態時將會發送推送。

此外,對於iOS推送消息只是一個用戶通知,而不是一個應用程序!

簡單案例將說明它: 假設應用程序關閉時收到推送。在這種情況下,會發生用戶通知。但是,只有當用戶點擊該通知時,應用纔會從推送中接收數據!如果用戶點擊應用程序的圖標,則不會收到數據。

技術上來說,推送被傳送到iOS設備並且應用程序已啓動,但數據未被傳送。

UrbanAirhip與APN和氦

你可以考慮實現自己的推運輸。 MQTT似乎是一個不錯的選擇。 但在這種情況下,您必須處理keepalive,設備睡眠和電池優化。 Apple,Google和UrbanAirship的工程師已經完成了所有這些艱苦的工作。

根據您的業務需求,您可以更輕鬆地調整現有解決方案的架構,然後重新實現推送服務。

仔細觀察一下UrbanAhiphip。事實上,C2DM有一些侷限性,有時推送消息的傳遞時間太長。由於UA已經實施了自己的交通工具 - 氦氣,它運行得非常好。氦氣是一種付費服務,但UA提供良好的SLA。

1

我做了類似的事情,我有一個數據庫跟蹤已知訂戶的推送隊列,並在失敗時進行報告。這是非常簡單的,去這樣的事情...

The schema was like so: 

pushMessages 
    messageID , GUID, PK 
    message , nvarchar (256), 
    expires , datetime 

messageQueues 
    subscriberID , GUID, PK 
    messageID , GUID PK 

failedPushMessages 
    subscriberID, GUID, PK 
    messageID , GUID PK 

(subscriber table omitted) 

一旦客戶收到的消息成功,客戶端將回ping到推送服務器,並通過它在推收到的唯一queueItems ID通知它通知。還會有一個每日數據庫過程來檢查過期的推送消息。找到它時,它會在匹配messageID的queueMessages上進行連接,然後將它們從messagesQueues表中刪除並將它們複製到failedPushMessages表中。

這很容易理解和維護,但我沒有經驗做另一種方式。

0

推送服務是一種高效可靠的方式來提醒您的用戶。它們甚至允許後臺應用程序實時通知用戶新信息。推送服務廣泛用於移動應用中的各種領域,例如天氣更新,消息服務,郵件通知,優惠券服務等。推送服務不再是可選的,但已變得至關重要。