首先,它不是关于认证或开发/分发的问题。
我使用了分发认证和服务器网址 - > gateway.push.apple.com:2195
我在我的本地服务器(apache2)中测试过,它可以工作!
但是,在我的真实服务器(IIS / Window服务器)中,我使用相同的php代码,相同的认证文件(.pem)和相同的iphone应用程序......等,它打印出“已连接到APNS消息已成功发送”,但是我的手机没有收到消息。
一个嫌疑人是,我通过cmd命令行'openssl s_client -connect gateway.push.apple.com:2195 -cert xxxx.pem'测试了我的认证文件(.pem),它返回“验证返回码:20(无法获得本地发行人证书。所以我找到下载委托认证(.cer)的解决方案并做了“openssl s_client -connect gateway.push.apple.com:2195 -cert xxxx.pem -CAfile entrust_2048_ca.cer”,它返回'验证返回代码:0'。所以我添加了我的php代码'stream_context_set_option($ ctx,'ssl','CAfile','entrust_2048_ca.cer');',但它没有同样的问题。