我使用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()
功能会起作用但到目前为止都没有成功。
我真的很感激能指出正确的方向。
答案 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推送通知。