我已为我的应用实施了示例推送通知服务。
现在我在沙箱环境中测试。
当我手动调用PHP脚本以通过APN推送通知时,我收到通知。
当我使用 crontab 编写调度程序以自动传递通知时,我没有收到通知。我收到的邮件错误是:
PHP Warning: stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages:
error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure in /Users/aspire/Desktop/SimplePush/simplepush.php on line 21
PHP Warning: stream_socket_client(): Failed to enable crypto in /Users/aspire/Desktop/SimplePush/simplepush.php on line 21
PHP Warning: stream_socket_client(): unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error) in /Users/aspire/Desktop/SimplePush/simplepush.php on line 21
Failed to connect: 0
有人可以解释问题是什么吗?
答案 0 :(得分:49)
此问题已修复。真正的问题出在我使用的PHP脚本中。
在stream_context_set_option的早些时候,我没有包含ck.pem文件的完整路径。在给出完整路径之后没有错误。以下是我现在使用的代码。
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', '/Users/Development/Dev/ck.pem');
其他一些有这个问题及其讨论的人
答案 1 :(得分:1)
试试这段代码
$apnsCert = $_SERVER['DOCUMENT_ROOT'].'/..../..../ck.pem';
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert',$apnsCert);
stream_context_set_option($ctx, 'ssl', 'cafile', 'entrust_2048_ca.cer');
$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195',$err,$errstr,60,STREAM_CLIENT_CONNECT,$ctx);