7

我已经开发了一个脚本stream_socket_client(),它可以在我的本地主机上运行,​​但是当我尝试在线使用它(使用Fatcow.com网络托管)时,它就不起作用了。我收到以下错误:

警告: stream_socket_client() [function.stream-socket-client]: 无法连接到 ssl://gateway.sandbox.push.apple.com:2195 (Connection denied) in .../send-notification.php在线18 连接失败 111 连接被拒绝

这是第 18 行:

$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);

我知道 .pem 文件的密码是正确的。问题变成了如果我不能使用这个端口我该怎么办?有没有我可以使用的免费服务?我知道80端口是开放的。

我听说使用该curl()功能会起作用,但到目前为止还没有成功。

我真的很感激能指出正确的方向。

4

5 回答 5

8

为了向设备发送通知,需要在防火墙中启用 2195 端口。出于安全原因,一些组织在防火墙中禁用了这些端口。2196 端口用于反馈服务,该端口也应在防火墙中开放。如果不打开这些端口,消息将无法传递到 APNS。

于 2013-10-23T09:00:01.123 回答
3

我相信以下是您正在寻找的

$url = 'https://gateway.sandbox.push.apple.com:2195';
$cert = 'AppCert.pem';

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SSLCERT, $cert);
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, "passphrase");
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"device_tokens": ["458e5939b2xxxxxxxxxxx3"], "aps": {"alert": "test message one!"}}');

$curl_scraped_page = curl_exec($ch);

可以在此处找到更多信息:使用 cURL 的 Apple 推送通知

于 2013-10-24T10:58:15.583 回答
0

尝试使用端口 2196。

我也遇到过类似的问题,即使使用 cURL 你也会遇到这个问题。与您的托管服务提供商仔细检查传出端口 (2195,2196) 是否打开或阻止。或者尝试远程登录ssl://gateway.sandbox.push.apple.com:2195
并检查您得到的响应。如果端口打开,您将被连接。

于 2013-10-18T05:49:48.880 回答
0

在每个共享主机中,他们禁用 2195 端口,您可以请求启用此端口,但在大多数共享主机公司中不启用此端口,因此如果您想做 ios 推送通知,我建议您使用虚拟专用服务器(VPS)和您可以轻松配置 ios 推送通知。

于 2013-10-24T09:43:34.873 回答
0

我目前的托管服务提供商遇到了同样的问题。您可以切换到其他提供商 - 或 - 只需“购买”预算 LAMP VPS(3 欧元/月)。你可以走了

于 2013-10-23T15:40:41.653 回答