如果您不能使用端口2195,如何使用Apple推送通知?

时间:2013-10-16 02:19:31

标签: php iphone sockets apple-push-notifications

我使用stream_socket_client()开发了一个脚本,它可以在我的本地主机上运行但是当我尝试在线使用它时(使用 Fatcow.com 虚拟主机)它将无法正常工作。我收到以下错误:

  

警告: stream_socket_client()[function.stream-socket-client]:无法连接到ssl://gateway.sandbox.push.apple.com:2195   (连接被拒绝) ... / 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()功能会起作用但到目前为止都没有成功。

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

5 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分: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);

可在此处找到更多信息:Apple push notification with cURL

答案 2 :(得分:0)

尝试使用端口2196。

我也遇到过类似的问题,即使有了cURL,你也会遇到这个问题。请与您的托管服务提供商仔细检查是否已打开或阻止外发端口(2195,2196)。 或者尝试telnet ssl://gateway.sandbox.push.apple.com:2195
并检查你得到的回复。如果端口打开,您将被连接。

答案 3 :(得分:0)

我当前的托管服务提供商遇到了同样的问题。 您可以切换到另一个提供商 - 要么 - 只需'购买'预算LAMP VPS(3欧元/月)。 而你很高兴

答案 4 :(得分:0)

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