我正在我的应用程序中实现推送通知,在开发部分它工作正常,我很好地接收推送通知。当我决定在应用程序商店中发布它时,我实现它以进行分发(我使用证书和配置文件进行分发),我做了相同的步骤,我将.p12文件转换为.pem通过了,我结合了certificate.pem和key.pem到另一个文件ck.pem。 在PHP文件中,我执行了以下操作:
$passphrase = 'The passphrase I put it in the shall';
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
// Open a connection to the APNS server
$fp = stream_socket_client(
'ssl://gateway.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
我已经在我的php中将沙箱更改为ssl://gateway.push.apple.com:2195。
我通过这些步骤创建了production.pem。
$ openssl x509 -in aps_developer_identity.cer -inform der
-out PushChatCert.pem
$ openssl pkcs12 -nocerts -out PushChatKey.pem -in PushChatKey.p12
Enter Import Password: MAC verified OK Enter PEM pass phrase: Verifying - Enter PEM pass phrase:
$ cat PushChatCert.pem PushChatKey.pem > ck.pem
我将我的ck.pem上传到我的共享主机。这不是错误,但它没有推动通知。
在我的php中说:连接到APNS消息已成功发送
答案 0 :(得分:0)
您可能使用了错误的deviceToken。请记住,生产deviceToken和开发deviceToken 不同!
您应该记录您的deviceToken,然后iPhone Configuration Utility将记录您正确的生产deviceToken。
答案 1 :(得分:0)
我相信服务器端不使用分发PEM文件。主要的基本规则是App和服务器应该以相同的模式运行。如果你的应用程序在调试模式下运行,那么服务器也应该使用开发PEM文件,就像你的应用程序在发布模式下运行一样,服务器也应该使用分发PEM文件。