我创建了两个证书。一个用于开发的工作正常,另一个用于生产
我将Product->Edit Scheme
切换为Ad Hoc,还从Apple会员中心下载了Ad Hoc mobileProvision。
我使用Ray Wenderlich's教程完成了所有这些工作,如上所述,开发版本运行良好。
prod_cert.pem 和 prod_ck.pem 连接到 prod_ck.pem
我正在使用simplePush.php
示例来测试APNS。不得不改变:
APNS服务器端
$fp = stream_socket_client(
'ssl://gateway.sandbox.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
到:
$fp = stream_socket_client(
'ssl://gateway.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
证书
以及本地证书(生产):
stream_context_set_option($ctx, 'ssl', 'local_cert', 'Push/dev_ck.pem');
进入:
stream_context_set_option($ctx, 'ssl', 'local_cert', 'Push/prod_ck.pem');
我想也许二进制文件有问题?我在APNS前测试了生产证书,使用:
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert prod_cert.pem -key prod_key.pem -CAfile entrust_2048_ca.cer
它很顺利。 我不知道如何通知分发应用程序。我不明白为什么。
答案 0 :(得分:0)
试试这个:
$ctx = stream_context_create();
$pem = dirname(__FILE__) .'/'.'ck.pem';
stream_context_set_option($ctx, 'ssl', 'local_cert', $pem);
stream_context_set_option($ctx, 'ssl', 'passphrase', $pass);
$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195',$err,$errstr, 30, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);