APNS + PHP“stream_socket_client():未能启用encryption”
我在使用APNS和PHP时遇到了问题,并得到以下消息:
stream_socket_client(): Failed to enable crypto
这个问题有时只会发生,而其他时候则会发生推动。
由于我有一个循环的10次迭代的testing脚本,我有时会得到这个:
stream_socket_client(): SSL: Connection reset by peer
我正在使用沙盒服务器tls://gateway.sandbox.push.apple.com:2195
这是我试过的:
- 我试图重新发布PEM和所有证书。
- 我玩弄了请求协议
sslv3://
和tls://
。 - 我玩了密码(push没有密码btw)
- 我试图寻找一个解决scheme的计算器,没有任何工作。
- 检查pem文件的权限
644
- 检查pem父目录权限
755
看来,我在Google和SO上find的所有解决scheme都是有问题的人。
我觉得这个服务可能是限速吗? 因为我们等了一会儿(大约15分钟),然后再试了一遍,并能够成功推送100条消息,直到我再次开始收到这条消息。
沙箱推送服务的速率是有限的。 我在testing时自己经历过这种情况,但从未遇到过使用生产API的任何限制。
你也可能会受到其他保护。
你是打开一个连接,发送一条消息,closures连接,然后循环再做一遍?
这将使您的通知被丢弃。 苹果希望您使用相同的连接发送多个推送通知,而不是每次都有新的推送通知。
pipe理连接的最佳实践
您可以build立到同一个网关或多个网关实例的多个连接。 如果您需要发送大量远程通知,请将它们分散到多个不同网关的连接上。 与使用单个连接相比,这样可以提高性能:它可以让您更快地发送远程通知,并使APN更快地发送。
与多个通知的APN保持联系; 不要反复打开和closures连接。 APN将快速连接和断开视为拒绝服务攻击。 除非您知道连接会长时间处于空闲状态,否则您应该打开一个连接,例如,如果您每天只向用户发送一次通知,则每天都可以使用新的连接。
我的PHP代码产生以下错误:
PHP Warning: stream_socket_client(): Failed to enable crypto in /private/tmp/t.php on line 12 PHP Warning: stream_socket_client(): unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error) in /private/tmp/t.php on line 12 PHP Warning: fclose() expects parameter 1 to be resource, boolean given in /private/tmp/t.php on line 24
问题是,该死的证书,前天过期了! :-)你能相信吗?
所以,我需要重新创build我的PEM文件。
这是没有必要重新创build您的Pem文件
当您使用不正确的PassPhrase时,会发生该错误
关于埃米利亚诺
我有这个问题。 授予.pem文件的“所有人”的写入权限后消失。
我有这个问题,因为我愚蠢地忘记包含文件扩展名(.pem)时提供local_cert的文件path。
几个检查 :
- 设备令牌应该是 – 没有
spaces
而且没有<
或>
- 确保证书的path正确并且过期。
- 确保您使用的密码是您用来制作证书的密码
在我的情况下,问题是我的Mac(OSX Sierra)。 我上传了PHP和证书给我的服务器,运行它,并通知交付。