2014-04-03 40 views
1

我有一個應用程序使用PushSharp向ios設備發送推送通知。 這是一個Windows服務。我嘗試用大量無效deviceTokens(我沒有很多有效令牌)來進行大規模測試。PushSharp - 多個無效令牌不會調用響應委託

的問題是,PushBroker的事件不會被觸發大多數令牌。 一些令牌(很少)會導致方法OnNotificationFailed被觸發(當然,消息爲「無效令牌」)。

這可能是APN的關於這種情況的一個已知的行爲,這PushSharp不會表現得像我希望它。我在我的邏輯中指望這些迴應。

執行這樣的測試是否合理?

我應該期待這種行爲嗎?如果PushBroker沒有觸發它的事件,這意味着什麼?

感謝您的任何建議或評論。

回答

1

雖然我沒有看過成PushSharp代碼,我實現了與APNS服務器通信的服務器,這樣我就可以給你這種行爲可能的原因。

當蘋果APNS服務器遇到無效的設備令牌(或任何其它類型的無效數據,如太長淨荷的),它將錯誤寫入響應於所述插座和關閉連接。

現在,如果您嘗試發送10個通知,並且僅在第10條消息之後獲得錯誤響應(通過您的案例中的OnNotificationFailed),說明第5條消息失敗,這意味着Apple從未處理過消息6到10如果你期望其中一些觸發OnNotificationFailed,這就是它沒有發生的原因)。這些消息必須重新發送。我不知道PushSharp是否自動處理此重新發送,或者您必須自己執行此操作。

除了這種複雜情況,在某些情況下(至少在我嘗試使用無效令牌時),您(或您的案例中的PushSharp)可能無法讀取來自Apple的錯誤響應,在這種情況下,您只會注意到連接關閉時會發生錯誤(例如,嘗試發送消息時會失敗)。 在這種情況下,您必須打開一個新的套接字,但您不知道哪條消息導致失敗以及應該重發哪些消息。

我建議您只使用有效的設備標記,並盡最大努力使數據庫免於使用無效標記,因爲處理由這些標記引起的錯誤響應和連接關閉可能會非常棘手。

+0

謝謝。那麼,如何使用多個令牌來測試我的服務? – gilp

+0

我知道我無法真正使用無效標記測試服務,但我想測試發送大量推送通知的服務。 如果我爲相同的有效deviceToken發送10,000個通知,我會得到所有請求的響應嗎? 我試着用GCM和一個有效的註冊ID執行一個類似的測試 - 對相同註冊ID的10,000個請求。我沒有收到所有請求的回覆。 如何在沒有許多獨特標記的情況下爲大量標記測試此服務? – gilp

+1

@gilp Apple在沒有錯誤時不會返回響應,因此如果您使用有效令牌,則不會得到任何響應。對大量不含大量有效令牌的通知進行測試的唯一方法是編寫一個模擬APNS服務器的進程。接受傳入TLS連接,然後根據APNS的二進制格式解析傳入數據)。這並不容易。另一種選擇是測試發送多個通知的整個過程,除了實際的發送。這可能需要對PushSharp源代碼進行更改。 – Eran