tags:

views:

219

answers:

3

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 see on link http://www.openxcellaus.info/praveenApns/myapns.php

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

+2  A: 

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
i second that, seems like its a firewall issue more than anything.
Sabeen Malik
plz some body help
Praveen kalal
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
thanks for your interest. but please tell me whats the solution of this.
Praveen kalal
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
thanks i will try let u inform
Praveen kalal
A: 

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

Mehul Panchal