Subodh Ghulaxe Subodh Ghulaxe - 1 year ago 268
PHP Question

Sending multiple iphone push notifications + APNS + PHP + Tutorial

I am working on a php website + iphone application and API for iphone application, has a messaging system for students and doctors, when any one sends message(from website or iphone) the other user should get push notification on his iphone. For example if student adds a new question for teacher, a push notification on teachers iphone/ipad will be send to teacher andwhen teacher reply to student's answer, student will get a push notification. Since there is no restriction on number of teachers and student registering to website. So my question is how to send push messages to registered users iphone, I want to send push message as soon as some one reply or add question. Please provide me php code for sending multiple push messages.
I am saving device token for each user while registration.

When teacher reply to question I am sending mail to student, I want to send a push notification too to student and vice versa so please specify code able to manage error conditions.

Please suggest any tutorial for sending push notifications on iOS.

Answer Source

This is the way I have done it finally

  1. Downloaded apns-php
  2. PHP Code

    $root_path = "add your root path here"; 

        global $obj_basic;           
        // Basic settings

        $timezone = new DateTimeZone('America/New_York');
        $date = new DateTime();
        $time =  $date->format('H:i:s');

        //Get notifications data to send push notifications
        $queueQuery = " SELECT `notifications`.*, `messages`.`mes_message`, `messages`.`user_id`, `messages`.`mes_originated_from`  FROM `notifications`
                                        INNER JOIN `messages`
                                        ON `notifications`.`message_id` = `messages`.`mes_id`

                                        WHERE `notifications`.`created` <= NOW()";

        $queueData = $obj_basic->get_query_data($queueQuery);

        if(!empty($queueData)) {

        // Put your private key's passphrase here:
        $passphrase = 'Push';

        $ctx = stream_context_create();
        stream_context_set_option($ctx, 'ssl', 'local_cert', '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://', $err,

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

        echo '<br>'.date("Y-m-d H:i:s").' Connected to APNS' . PHP_EOL;

            foreach($queueData as $val) {
                    // Put your device token here (without spaces):
                    $deviceToken = $val['device_token'];

                    // Create message

                        // Get senders name
                        $sql = "SELECT `name` FROM `users` WHERE id =".$val['user_id'];
                        $name = $obj_basic->get_query_data($sql);
                        $name = $name[0]['name']; 
                        $message = $name." : ";

                        // Get total unread messaged for receiver
                        $query = "SELECT COUNT(*)  as count FROM `messages`  WHERE mes_parent = 0 AND user_id = ".$val['user_id']." AND mes_readstatus_doc != 0 AND mes_status = 1";
                        $totalUnread = $obj_basic->get_query_data($query);
                        $totalUnread = $totalUnread[0]['count']; 

                        $message .= " This is a test message.";

                    // Create the payload body
                    $body['aps'] = array(
                            'alert'         => $message,
                            'badge'     => $totalUnread,
                            '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 '<br>'.date("Y-m-d H:i:s").' Message not delivered' . PHP_EOL;  
                    } else {
                        $sqlDelete = "DELETE FROM `notifications` WHERE id = ".$val['id'];
                        $query_delete = $obj_basic->run_query($sqlDelete,'DELETE');

                        echo '<br>'.date("Y-m-d H:i:s").' Message successfully delivered' . PHP_EOL;
            // Close the connection to the server
            echo '<br>'.date("Y-m-d H:i:s").' Connection closed to APNS' . PHP_EOL;
        } else {
            echo '<br>'.date("Y-m-d H:i:s").' Queue is empty!';
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download