iOS推送通知连接失败错误

3

我正在尝试通过PHP在iOS应用程序中发送推送通知。因此,iOS开发者给了我pem文件。我要求主机服务器打开gateway.sandbox.push.apple.com:2195端口,他们已经打开了该端口。但是当我尝试发送推送通知时,我遇到了以下错误。我的代码如下:

$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 连接到苹果,结果如下:

root@uio3-i [~]# 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.
root@uio3-i [~]#

作为一个新手,我在这里卡住了,请有经验的人帮助我。提前感谢您。

看起来你的证书/密钥对.pem文件已经损坏了,需要重新生成。我刚刚才搞定推送功能,所以我知道这是一个棘手的问题。 - Woodstock
1个回答

5

这似乎是由于您的证书/密钥对.pem文件已损坏,需要重新生成。我最近自己刚刚使推送工作,所以我知道这是一个棘手的问题。

与其仅仅使用telnet(只能证明连接正常),不如从终端运行以下命令来确定证书和密钥是否有效。

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

您应该会看到一堆输出,这是openssl让您知道底层正在发生什么。

如果连接成功,您应该能够输入几个字符。当您按下回车时,服务器应该断开连接。如果建立连接时有问题,openssl将给您一个错误消息,但您可能需要通过输出向上滚动以找到它。

无论如何,您至少会知道您的证书/密钥对是否有效。

在生产中,您必须使用连接后的证书/密钥对 - 如果您没有原始的密钥和证书,则需要从开发人员那里获取它们以测试上述内容。


1
那个文件已经损坏了...当我重新创建时就可以工作了。 - ramesh
嗨@John 我需要在Windows IIS服务器中实现这个推送通知。 我遇到了致命错误。 你能看一下我的问题吗?https://dev59.com/onbZa4cB1Zd3GeqPE1oo - ramesh
@ramesh 你好!当然,我会看一下,不过Windows不是我的强项! - Woodstock
哦,谢谢 @John。我在这里卡住了。 - ramesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接