2012-12-16 54 views
29

我們的應用使用APNS接收推送通知。但是,我們的客戶聲稱他們的一些設備沒有收到通知,並認爲他們'必須'確保通知能夠100%交付。但我已閱讀somewhere APNS不是100%可靠的,並且應該有通知未交付的情況。APNS(蘋果推送通知服務)可靠性

我目前很擔心我們如何確保APNS隨時可以收到。我已經閱讀了a case,這可能是APNS未交付(設備可能脫機)。但是我們的測試顯示,即使設備在線(Wifi或3G),有時APNS也未交付。

有沒有可能APNS不能交付的具體情況?或者我們(開發人員)可以使用代碼來確保接收所有通知?我在代碼中所做的只是將應用程序註冊到遠程通知,然後寫入didRegisterForRemoteNotificationsWithDeviceToken,然後將設備令牌扔到我們的服務器。

任何幫助將不勝感激,因爲我們的客戶幾乎殺了我們,如果他們所有的設備都沒有收到APNS!

+2

呀,這不是*可靠*,在這個詞的正常的網絡意識。 – Nate

+0

後端是否將消息推送給由您控制的APNS?在這種情況下,您應該能夠記錄某些發送給APNS的發送失敗,並且您可以查看反饋服務是否包含未收到消息的設備的令牌。 – johan

+1

謝謝你快速回復johan!如果你在談論服務器端,是的,他們是由我們的PHP服務器控制的。根據我們負責服務器端開發的開發人員之一,目前看起來APNS消息已成功發送。該設備有時會收到通知,有時不會。我對這個APNS事物感到困惑和瘋狂...... –

回答

42
  1. APNS基於Apple服務器,Apple不保證成功發送消息。
  2. 如果在通知到達時應用程序處於打開狀態(即用戶正在使用應用程序),iOS不會顯示通知消息,您需要處理它。
  3. 僅當應用程序背景或死亡時纔會顯示通知。
  4. 還在您的服務器端實施反饋服務;將幫助您擺脫舊的不需要的令牌(通過設置刪除應用或禁用通知的用戶)。
  5. 不要在短時間內向設備發送太多通知,因爲APNS只緩存1條消息/設備(如果設備處於脫機狀態)。所以它可以在設備聯機時傳遞消息。我不確定郵件緩存多長時間。

或者只實現推... http://pusher.com

+1

謝謝你的明確答案!即使在文件狀態和許多真正的開發者解釋它,我們的空頭客戶也不會相信APNS不是100%可靠的......也許他們對案例2進行了測試,但沒有收到通知。我們不能使用第三方實施,但無論如何都要提供好的建議! –

+2

只需注意:實施推送器的建議不是一個完整的解決方案,因爲推送器不處理在離線或應用程序未運行時錯過的消息。我推薦的用於推送消息可靠性的最佳解決方案是使用同步到同步(在此處下載並顯示所有消息)和服務質量序列號(時間戳),一旦推送到達,服務質量就會回調到服務器。如果未到達,請再次發送同步至同步推送。這可以實現100%交付。當然這取決於你的需求。 – deepwinter

+6

首先你要處理證書廢話..然後你必須處理APNS的不可靠性.. –

2

它說,它很清楚地在蘋果的文檔,它不是100%gauranteed並且也不應被用作這樣。它以「盡力而爲」發送。

+0

可以有人張貼鏈接到它是這麼說的 – user2387149

+2

尋找在https://developer.apple「盡力而爲」的文檔。 COM /庫/ iOS設備/文檔/ NetworkingInternet /概念/ RemoteNotificationsPG /章節/ ApplePushService.html – steve

8

我們正面臨同樣的問題。正如大家所說,APNS是一個盡力服務服務,所以你不能確定每個通知將被交付,但你可以做的是確定哪些已收到。這就是我們要做的。我們在我們的後端註冊每個通知隊列船舶並且移動應用程序報告它收到的每個通知。然後我們設置等待收到通知的最長時間,如果我們沒有收到報告,我們再試一次。

我希望它可能會有所幫助的人(甚至兩年後)

+0

如果什麼終端用戶設備處於關閉狀態? – neilb

+0

如何阻止原始郵件的傳遞(根據我們的經驗,有時最多3分鐘後...... :( –