2013-08-30 34 views
3

我想通過php在iOS應用程序中發送推送通知。所以iOS開發人員給我一個pem文件。我請求託管服務器打開gateway.sandbox.push.apple.com:2195,他們已經打開了該端口。但是,當我嘗試發送推送通知時,出現以下錯誤。我的代碼看起來像iOS推送通知連接失敗錯誤

$deviceToken='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; 

$passphrase=""; 

$ctx = stream_context_create(); 
stream_context_set_option($ctx, 'ssl', 'local_cert', '/home/sitename/public_html/push/ck.pem'); 
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); 

$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', 
    $err, 
    $errstr, 
    60, 
    STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, 
    $ctx); 

if (!$fp) 
exit("Failed to connect amarnew: $err $errstr" . PHP_EOL); 

echo 'Connected to APNS' . PHP_EOL; 

收到以下錯誤

Failed to connect amarnew: 0 

所以,我想通過telnet連接到蘋果,那結果是

[email protected] [~]# telnet gateway.sandbox.push.apple.com 2195 
Trying XX.XXX.XXX.XX... 
Connected to gateway.sandbox.push.apple.com. 
Escape character is '^]'. 
^\q 
^] 
telnet> q 
Connection closed. 
[email protected] [~]# 

由於我是新來這個,我只是在這裏困住了。請任何一個幫助我提前

感謝

+0

聽起來像您的證書/密鑰對.pem文件已損壞,重新生成它。我只是推動工作,所以我知道這是一個棘手的話題。 – Woodstock

回答

5

聽起來像是你的證書/密鑰對的.pem文件已損壞,重新生成。我只是推動自己的工作,所以我知道這是一個棘手的話題。

而不是簡單的telnet(它只能證明連接正常),而是從終端運行此命令來確定證書和密鑰是否有效。

openssl s_client -connect gateway.sandbox.push.apple.com:2195 
-cert cert.pem -key key.pem 

你應該看到一大堆輸出,它是openssl讓你知道發生了什麼。

如果連接成功,您應該可以輸入幾個字符。當你按回車時,服務器應該斷開連接。如果建立連接時出現問題,openssl會給你一個錯誤消息,但你可能需要向上滾動輸出才能找到它。

無論哪種方式,至少你會知道你的證書/密鑰對是否好。

在生產中,您必須使用連接的證書/密鑰對 - 如果您沒有原始密鑰和證書,則需要從開發人員處獲取此證書以測試上述內容。

+1

多數民衆贊成它...該文件已損壞...工作時,我重新創建 – ramesh

+0

很高興幫助!約翰 – Woodstock

+0

嗨@約翰我需要在Windows IIS服務器中實現此推送通知。我收到一個致命錯誤。你可以請看看我的問題請http://stackoverflow.com/questions/18560980/pushsharp-apple-notification-a-call-to-sspi-failed-error – ramesh