2011-07-28 66 views
1

我已經爲PHP應用程序爲iPhone應用程序編碼推送通知(APNS,Apple推送通知服務)。一切正常,而沒有應用程序從設備中刪除。我使用Apple的反饋服務確實獲取了刪除的設備。如果我收到設備,我將它們標記爲INACTIVE在我的數據庫中,以便不會向這些設備發送進一步的推送通知。Apple反饋服務(APNS)速度慢

問題是蘋果很慢。如果您從設備上刪除應用程序,則會向Apple發送請求,並使用反饋服務收集設備。但蘋果沒有轉發滅活裝置瞬間,所以我得到了下面的錯誤,因爲我不能發送推送通知到活動裝置:

PHP Warning: fwrite(): SSL: Broken pipe in apns.php on line 155

我的留言服務腳本運行每5分鐘,但來自蘋果更新每10-15分鐘一次。如果我在10-15分鐘內發送推送通知,則會出現上述錯誤,因爲在數據庫中設備仍標記爲ACTIVE,並且在Apple服務器上設備標記爲INACTIVE

連接到反饋服務或推送服務沒有問題,但我並不總是從反饋服務獲取設備。

映入眼簾, TheFox

+0

要麼處理它,要麼聯繫蘋果支持。我們應該怎麼做? – hakre

回答

1

從Apple.com開發者論壇(https://devforums.apple.com/thread/114446)答:

您的服務器需要檢測斷線並在必要時重新連接。涉及網絡時什麼都不是「即時」的;總是有一些延遲和代碼需要考慮。 另外,請考慮使用增強的二進制接口,以便您可以檢查返回響應並知道連接丟失的原因。由於TCP保持活動狀態,連接也可以被丟棄,這是Apple無法控制的。

因此,我要將所有設備設置爲如果服務器檢測到斷開連接,則不活動

+0

我還沒有真正明白你在做什麼。我有幾千推送通知相同的錯誤。你怎麼修好它的? –

+1

當蘋果設備出現問題時,他們關閉連接。你不會得到任何錯誤信息或類似的東西。如果您在設備上遇到SSL錯誤,則認爲此設備不再處於活動狀態。所以你必須(1)把它變成不活動的,(2)你必須重新連接到蘋果服務器。當您發送數千個推送通知時,您可能會有數百個SSL錯誤(重新連接)。我知道,這個系統並不完美。我不知道蘋果爲什麼如此棘手。 – TheFox

+0

所以我設法得到給我一個SSL錯誤的ID。在目前的情況下,我正在重新連接並重新嘗試將消息發送到該ID。 可以肯定的是,當我得到一個SLL錯誤時,我只是跳過該ID從我們的數據庫中刪除它? –