无法连接到 ssl://gateway.push.apple.com:2195

发布于 2024-09-19 08:01:59 字数 2414 浏览 12 评论 0原文

你好,我正在使用 php 开发网络服务。在此,我需要使用 APNS 在设备上生成通知,但它给出以下错误:无法连接到 ssl://gateway.push.apple.com:2195

我的代码如下,请帮助我,

<?php
echo '<pre>';
echo 'APNCRON: Started at '.date("Y-m-d H:i:s")."\n";

$apnsHost = 'gateway.push.apple.com'; //gateway.push.apple.com //gateway.sandbox.push.apple.com
$apnsPort = 2195;
$apnsCert = 'apns-dev.pem'; //replace with the appropriate production cert.

//include config.php here
      $con = mysql_connect('localhost','sunil_myapns','fIgBMQ?(G?T_') or die("Could not connect to host.");
      $database = mysql_select_db('sunil_myapns',$con) or die("Could not find database.");    

/**
loop the result 
send payload
*/
/*$sql = 'SELECT p.dev_token, 
        (SELECT COUNT(id) FROM tbl_news s WHERE s.created_date > p.last_access_time) AS cnt
        FROM
        tbl_apn p';*/ //This sql to give you an idea
//echo $sql; 
$sql = 'SELECT * from person';
//echo $sql;
$result = mysql_query($sql);

if(!result)
{
    echo 'APNCRON: Error while executing the query :'.mysql_error();//exit;
}

$rows = mysql_num_rows($result);
//echo $noDev2Push;exit;
if(!$rows)
{
    echo 'APNCRON: No update'; exit;
}

$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'tcp', 'local_cert', $apnsCert);

$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 120, STREAM_CLIENT_CONNECT, $streamContext);

$i=0;

while($row = mysql_fetch_array($result))
{

    $deviceToken    = 'abcbc12f8d7006be4a544237428f071697bb342608f6408af725ca94ae848ee5'; // remember that devToken is 64 char string
    $cntUpdate = $row['id'];


    $payload = array();
    $payload['aps'] = array(
                                //'alert' => '',    //we are not sending popup alerts 
                                'badge' => (int) $cntUpdate, 
                                'sound' => 'default'
                            );

    $payload = json_encode($payload);
    $i++;
    //echo $payload; echo "\n";

    $apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken)) . chr(0) . chr(strlen($payload)) . $payload;

    //echo $apnsMessage; echo "\n";

    fwrite($apns, $apnsMessage);
}

fclose($apns);

echo 'APNCRON: Completed at '.date("Y-m-d H:i:s")."\n";
echo 'Sent APN to '.$i.' device(s) ';//.date("Y-m-d H:i:s")."\n";
//socket_close($apns);


?>

提前致谢

hi i am working on web services using php. in this i need to generate notification on the device using APNS but its gives following error unable to connect to ssl://gateway.push.apple.com:2195

my code is following plz help me

<?php
echo '<pre>';
echo 'APNCRON: Started at '.date("Y-m-d H:i:s")."\n";

$apnsHost = 'gateway.push.apple.com'; //gateway.push.apple.com //gateway.sandbox.push.apple.com
$apnsPort = 2195;
$apnsCert = 'apns-dev.pem'; //replace with the appropriate production cert.

//include config.php here
      $con = mysql_connect('localhost','sunil_myapns','fIgBMQ?(G?T_') or die("Could not connect to host.");
      $database = mysql_select_db('sunil_myapns',$con) or die("Could not find database.");    

/**
loop the result 
send payload
*/
/*$sql = 'SELECT p.dev_token, 
        (SELECT COUNT(id) FROM tbl_news s WHERE s.created_date > p.last_access_time) AS cnt
        FROM
        tbl_apn p';*/ //This sql to give you an idea
//echo $sql; 
$sql = 'SELECT * from person';
//echo $sql;
$result = mysql_query($sql);

if(!result)
{
    echo 'APNCRON: Error while executing the query :'.mysql_error();//exit;
}

$rows = mysql_num_rows($result);
//echo $noDev2Push;exit;
if(!$rows)
{
    echo 'APNCRON: No update'; exit;
}

$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'tcp', 'local_cert', $apnsCert);

$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 120, STREAM_CLIENT_CONNECT, $streamContext);

$i=0;

while($row = mysql_fetch_array($result))
{

    $deviceToken    = 'abcbc12f8d7006be4a544237428f071697bb342608f6408af725ca94ae848ee5'; // remember that devToken is 64 char string
    $cntUpdate = $row['id'];


    $payload = array();
    $payload['aps'] = array(
                                //'alert' => '',    //we are not sending popup alerts 
                                'badge' => (int) $cntUpdate, 
                                'sound' => 'default'
                            );

    $payload = json_encode($payload);
    $i++;
    //echo $payload; echo "\n";

    $apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken)) . chr(0) . chr(strlen($payload)) . $payload;

    //echo $apnsMessage; echo "\n";

    fwrite($apns, $apnsMessage);
}

fclose($apns);

echo 'APNCRON: Completed at '.date("Y-m-d H:i:s")."\n";
echo 'Sent APN to '.$i.' device(s) ';//.date("Y-m-d H:i:s")."\n";
//socket_close($apns);


?>

thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

破晓 2024-09-26 08:01:59

我可以使用 telnet 从我的家用计算机连接到该主机:端口。最有可能的是您端的防火墙屏蔽了该 IP/端口,或者 Apple 和/或 Akamai 由于某种原因阻止了您。

I'm able to use telnet to connect to that host:port just fine from my home machine. Most likely something firewalled away that ip/port on your end, or Apple and/or Akamai have blocked you off for some reason.

要走干脆点 2024-09-26 08:01:59

如果您只是重复使用旧的证书签名请求 (CSR),请确保在导出新证书和私钥(作为 p12 文件)之前删除过期/旧的 APNs 证书。

If you're just reusing an old Certificate Signing Request (CSR), make sure to remove the expired/old APNs certificate before exporting the new one and the private key (as p12 file).

流年已逝 2024-09-26 08:01:59

使用curl函数访问外部链接并从中获取响应

Use curl function for access external link and get back response from that

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文