user2509333
user2509333

Reputation: 199

Issue in sending APNS push notifications to multiple device tokens in PHP

I need help in implementing the PHP APNS push notification. I am facing the problem in sending the notifications to multiple device tokens. for the single device token it is working good. Following is the my code. Any help will be really appreciated

// password:
    $passphrase = '1234';

    // Put your alert message here:
    $message = 'New Message';
       ////////////////////////////////////////////////////////////////////////////////

    $ctx = stream_context_create();
    stream_context_set_option($ctx, 'ssl', 'local_cert', $this->apnsDir.'server_certificates_bundle_sandbox.pem');
    stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

    // Open a connection to the APNS server
    $fp = stream_socket_client(
                               'ssl://gateway.sandbox.push.apple.com:2195', $err,
                               $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

    if (!$fp)
    exit("Failed to connect: $err $errstr" . PHP_EOL);

    echo 'Connected to APNS' . PHP_EOL;


    $activeGames = $this->Game_model->fnAllUserActiveGameCnt();

    if($activeGames) {

        foreach($activeGames as $gameCntList) {
            $gameCnt = $gameCntList['game_cnt'];
            $deviceToken = trim($gameCntList['device_token']);

             // Create the payload body
            $body['aps'] = array(
                        'alert'     => $message,
                        'badge'     => $gameCnt,
                        'sound'     => 'default'
                 );

            // Encode the payload as JSON
            $payload = json_encode($body);

            // Build the binary notification
            $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;

            // Send it to the server
            $result = fwrite($fp, $msg, strlen($msg));

            if (!$result)
            echo 'Message not delivered' . PHP_EOL;
            else
            echo 'Message successfully delivered' . PHP_EOL;
        } // end foreach  
    }


    // Close the connection to the server
    fclose($fp);

Upvotes: 3

Views: 3392

Answers (1)

Amar Banerjee
Amar Banerjee

Reputation: 5012

Try this its work for me.

while($res = mysql_fetch_assoc($sql_device_token))
            {    
                $deviceToken = $res['devicetoken'];
                //Pushnotification($deviceToken,$message);

               /*#################################### Push Notification ####################*/


               $ctx = stream_context_create();
                                stream_context_set_option($ctx, 'ssl', 'local_cert', 'ckipad.pem');
                                stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

                                $fp = stream_socket_client(
                                    'ssl://gateway.sandbox.push.apple.com:2195', $err,
                                    $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

                                //if (!$fp)
                                    //exit("Failed to connect amarnew: $err $errstr" . PHP_EOL);

                                //echo 'Connected to APNS' . PHP_EOL;

                                // Create the payload body
                                $body['aps'] = array(
                                    'badge' => +1,
                                    'alert' => $message,
                                    'sound' => 'default'
                                    );

                                    $payload = json_encode($body);
                                    // Build the binary notification
                                    $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
                                    // Send it to the server
                                    $result = fwrite($fp, $msg, strlen($msg));

                                if (!$result)
                                    echo 'Message not delivered' . PHP_EOL;
                                else
                                    echo 'Message successfully delivered amar'.$message. PHP_EOL;

                                // Close the connection to the server
                                fclose($fp);




                                $ctx = stream_context_create();
                                stream_context_set_option($ctx, 'ssl', 'local_cert', 'ckiphone.pem');
                                stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

                                $fp = stream_socket_client(
                                    'ssl://gateway.sandbox.push.apple.com:2195', $err,
                                    $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

                                //if (!$fp)
                                    //exit("Failed to connect amarnew: $err $errstr" . PHP_EOL);

                                //echo 'Connected to APNS' . PHP_EOL;

                                // Create the payload body
                                $body['aps'] = array(
                                    'badge' => +1,
                                    'alert' => $message,
                                    'sound' => 'default'
                                    );

                                    $payload = json_encode($body);
                                    // Build the binary notification
                                    $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
                                    // Send it to the server
                                    $result = fwrite($fp, $msg, strlen($msg));

                                if (!$result)
                                    echo 'Message not delivered' . PHP_EOL;
                                else
                                    echo 'Message successfully delivered amar'.$message. PHP_EOL;

                                // Close the connection to the server
                                fclose($fp);


                        /*############################# ##############################################*/

                $sql_notification = " INSERT INTO push_notification set `primary_physician_id` = '".$res['clientid']."',`devicetoken`='".$deviceToken."', `push_purpose`='Charge Note', `sned_time`='".time()."' ";
                mysql_query($sql_notification);
            }

Here you can see that I am keeping this thing in loop.

 $ctx = stream_context_create();
    stream_context_set_option($ctx, 'ssl', 'local_cert', $this->apnsDir.'server_certificates_bundle_sandbox.pem');
    stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

    // Open a connection to the APNS server
    $fp = stream_socket_client(
                               'ssl://gateway.sandbox.push.apple.com:2195', $err,
                               $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

So for you keep it inside loop.

Upvotes: 4

Related Questions