我們開發了一個iPhone應用程序,並且推送通知用於開發和臨時版本正常工作。但是當我們嘗試向我們的數據庫中的真實用戶設備發送推送通知時,我們得到了SSL連接重置,然後斷開了管道錯誤。我們認爲我們的數據庫中可能有太多設備(超過70000個),所以無法同時發送所有消息。所以我們嘗試將消息發送到1000個設備一次,但仍有100條消息出現「Broken pipe」錯誤。我們不確定這些郵件是否已發送。任何建議?獲取SSL嘗試進行推送通知時出現斷開管道錯誤
回答
我們已經解決了這個問題。它因數據庫表中的無效標記而中斷。如果存在無效標記,則Apple apns服務將斷開與我們的連接。由於連接中斷,當您嘗試再次發送消息時,它會出現「Broken Pipe」錯誤。基本的解決方案是找到寫入管道是否成功,如果沒有,只需斷開連接,並在延遲後重新連接。
我希望你已經解釋過你是如何編碼的 - Mona Jun 14 at 23:52 – Mona 2013-06-19 21:32:36
通常,當我遍歷所有用戶的設備令牌時,如果其中任何一個失敗,它打破鏈式並顯示相同的錯誤,所有我們可以做的是用最近的設備令牌對用戶進行排序,並在我們的結束時檢查長度,之後它就起作用了。 謝謝你的回答幫助我!〜 – 2016-10-22 18:07:09
emagic是正確的,「無效管道」錯誤的一個原因可能來自無效標記。還有其他一些原因可能會發生。以下是來自Apple Technical Note TN2265:
最常見的問題是無效的設備令牌。如果來自沙盒環境的令牌來自 ,例如當您在內部測試 開發版本時,則無法將其發送到生產推送 服務。每個推送環境將爲同一設備或計算機發出不同的令牌。如果您將設備令牌發送到錯誤的環境中,則推送服務會將該設備令牌視爲無效令牌,並丟棄該通知。
無效的設備令牌也可能表示用戶已從其設備或計算機中刪除了您的 應用程序。您應該至少每天檢查一次反饋 服務,以獲取不再有效的設備令牌 。
其他可能的問題可能會比256 個字節發送有效載荷時間越長,你的有效載荷可能無法正確格式化,或者您 JSON字典有不正確的語法。
偶爾斷開你的提供者空閒的時候是無關緊要的 ;只需重新建立連接並進行即可。如果推送服務器的一個 處於關閉狀態,則負載均衡機制將 透明地將您的新連接導向另一臺服務器,前提是您通過主機名而不是靜態IP地址連接 。
上EMAGIC的回答延伸,這是我的PHP代碼snipplet:
private $fp;
private function connect(){
$apnsHost = 'gateway.push.apple.com';
$apnsCert = 'certs/cert.pem';
$apnsPort = 2195;
$pass = "blah";
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
stream_context_set_option($streamContext, 'ssl', 'passphrase', $pass);
$this->fp = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $streamContext);
if (!$this->fp) return("Failed to connect: $err $errstr<br>");
echo 'Connected to APNS<hr />';
}
private function send(){
$this->connect();
foreach($pushes as $push) {
$payload['aps'] = array('alert' => $push->text, 'badge' => 0, 'sound' => 'default');
$payload2 = json_encode($payload);
$msg = chr(0) . pack('n', 32) . pack('H*', $push->token) . pack('n', strlen($payload2)) . $payload2;
try {
$result = fwrite($this->fp, $msg, strlen($msg));
}
catch (\Exception $e) {
fclose($this->fp);
echo('Error sending payload: ' . $e->getMessage());
sleep(5);
$this->connect();
}
}
}
- 1. 嘗試點擊推送通知時出現錯誤Android
- 2. 嘗試推送到github時出現SSL錯誤
- 3. 使用notnoopapns向apns發送推送通知時出現ssl錯誤
- 4. 從PHP發送推送通知時出現主鍵錯誤
- 5. 當嘗試通過php文件執行Apple推送通知時出錯
- 6. 節點APN錯誤513嘗試發送推送通知
- 7. 在Parse.com註冊Android設備獲取推送通知時出現114錯誤
- 8. 推送通知推送出現兩次?
- 9. 在linux上部署後推送通知時出現錯誤
- 10. 使用示例代碼推送通知時出現404錯誤
- 11. 推送通知不出現
- 12. Hive斷開管道錯誤
- 13. 嘗試推送到heroku時ExecJS錯誤?
- 14. 嘗試在Roku通道中斷開連接會引發錯誤
- 15. 嘗試通過Twilio發送GIF時出現Invalid-Content-Type錯誤
- 16. Apple推送通知錯誤/ SSL錯誤20
- 17. 打開WordPress管理器時出現SSL錯誤管理
- 18. 運行Gradle測試時出現斷管錯誤
- 19. 每當我打開我的應用程序時,推送通知不斷出現
- 20. 嘗試將推送通知發送到iOS設備 - 未收到推送通知
- 21. 推送通知錯誤
- 22. IOS推送通知錯誤
- 23. IOS推送通知錯誤
- 24. Bluemix - 推送通知錯誤
- 25. Yodlee - 嘗試Cobrand登錄時出現SSL錯誤
- 26. 嘗試從GIT中刪除時出現SSL錯誤
- 27. 嘗試獲取文件名長度時出現分段錯誤
- 28. 嘗試獲取圖像時出現錯誤標題
- 29. 嘗試獲取節點數時出現屬性錯誤
- 30. 嘗試獲取Android上的日期時出現錯誤CallLog.Calls
我們有同樣的問題;儘管有100,000個用戶。 據我們所知,通知將達到前100個,但之後不會。我只能假設發送的通知存在限制(通過計數或時間)。 真的可以與某人確認嗎? – Wex 2010-05-19 16:48:49