1

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

Praveen kalal
  • 2,148
  • 4
  • 19
  • 33

3 Answers3

2

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.

Marc B
  • 356,200
  • 43
  • 426
  • 500
  • i second that, seems like its a firewall issue more than anything. – Sabeen Malik Sep 11 '10 at 04:42
  • Your code is most likely fine, and it's something else that's causing this problem, most likely a firewall. Apple may have blocked you for abusing the connection, for one. – Marc B Sep 11 '10 at 13:08
  • thanks for your interest. but please tell me whats the solution of this. – Praveen kalal Sep 14 '10 at 12:46
  • Switch to a different ISP? There's nothing to do. If Apple/Akamai have blocked you, then you have to deal with them to lift the block, or figure out how broad it is (single IP, block of IPs, entire country...) and move your system somewhere outside of the block's limits. – Marc B Sep 14 '10 at 13:34
0

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).

MkVal
  • 1,044
  • 1
  • 11
  • 17
-2

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