2012-02-14 68 views
9

要檢測無效令牌,我應該多久檢查一次反饋服務?檢查APNS反饋的頻率如何?

我已經實現了一個使用APNS服務的廣播系統。我打開一個連接,發送所有APNS消息,並斷開連接。然後,我在廣播完成後立即打開反饋連接,並閱讀任何無效令牌。

我在反饋連接上收到無效令牌。但是,我的廣播通常只會部分成功(某些設備接收而其他設備不接收),而當我刪除除已知良好令牌之外的所有設備時,我的測試設備始終會收到該消息。

我認爲這意味着Apple收到前幾個無效令牌後會停止播放。

所以我沒有正確聽取反饋?

+2

經過進一步調查令牌,我發現,發送** **單令牌,蘋果不喜歡後(格式是好的,與普通的令牌無法區分),他們斷開了我的聯繫。 – 2012-06-07 19:38:50

回答

2

每次發送推送和刪除非活動設備時,您都應該檢查反饋響應。雖然,這看起來不像你現在的問題。

你的問題看起來像你有一些無效令牌在你的數據庫中。如果您發送無效的令牌,蘋果將放棄您的連接。發送不活動的令牌不起作用,但如果您發送格式錯誤/無效的令牌,Apple將終止您的套接字。

另一個問題可能是您身邊缺少重試計劃。你是否實施了任何例行程序,如果在推送時掉線,它將重新開啓與Apple的連接?您必須預測連接可能會失敗,如果連接失敗,則必須重新啓動並從停止的位置重新開始推送。

你應該尋找的是:

  • 讓您的數據庫中確定只股票VALID令牌
  • 確保你有一個重試機制到位
  • 看看Notnoop,它是一個非常簡單的Java API,可以爲你處理很多問題
+0

謝謝,但令牌似乎都有效。它們全部來自Apple設備,具有相同的有效格式。一個重試方案是不可能的,因爲Apple沒有提供關於何時斷開我的套接字的反饋。由於關閉套接字可能需要100ms左右,因此我可能會發送數百條通知。 – 2012-06-07 19:39:15

3

最後,正確處理這個問題的唯一方法就是轉向蘋果新的「增強通知格式」。這種格式允許您爲每條發送的消息提供一個ID,當Apple斷開連接時,它們會向您發送導致錯誤的消息的錯誤和ID。

這允許客戶以正確重試已經發送的消息,並丟棄無效