Comment envoyer une notification Push à plusieurs appareils?

C'est la première fois que j'utilise la notification push dans mon application.J'ai passé en revue des exemples d'applications ainsi que des livres et j'ai obtenu comment envoyer notification push à un seul appareil.Mais je ne reçois pas exactement ce que les changements que je devrais faire dans mon programme pour envoyer la notification push à plusieurs appareils.J'utilise L'application' PushMeBaby ' pour le codage côté serveur. S'il vous plaît,Aidez-moi. Merci à l'Avance.

22
demandé sur malinois 2011-04-12 08:42:41

3 réponses

essayez ce code d'exemple et modifiez pour votre environnement.

    $apnsHost = '<APNS host>';
    $apnsPort = <port num>;
    $apnsCert = '<cert>';

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

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

    $payload['aps'] = array('alert' => 'some notification', 'badge' => 0, 'sound' => 'none');
    $payload = json_encode($payload);

// Note: $device_tokens_array has list of 5 devices' tokens

    for($i=0; $i<5; $i++)
    {
            $apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $device_tokens_array[i])) . chr(0) . chr(strlen($payload)) . $payload;

            fwrite($apns, $apnsMessage);
    }?>

cet article Aide à vérifier la connexion de goutte et le statut de connexion: Apple Push Notification: L'envoi de volumes élevés de messages

autres liens de référence:

Comment puis-je envoyer une notification push à plusieurs appareils en une seule fois sur iPhone? et comment manipuler plusieurs dispositifs quand utiliser la notification Push?

28
répondu Priyank 2017-05-23 11:46:08

j'ai trouvé que vous devez créer un nouveau stream_context_create pour chaque fwrite pour empêcher apple de fermer la connexion pour un mauvais token.

2
répondu DigiMee 2013-01-15 16:34:01

C'est ce que j'ai fait ici

<?php 
        set_time_limit(0);
        $root_path = "add your root path here"; 
        require_once($root_path."webroot\cron\library\config.php");
        require_once($root_path."Vendor\ApnsPHP\Autoload.php");

            global $obj_basic;           
            // Basic settings

            $timezone = new DateTimeZone('America/New_York');
            $date = new DateTime();
            $date->setTimezone($timezone);
            $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://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 '<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
                fclose($fp);
                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!';
            }
1
répondu Subodh Ghulaxe 2017-05-23 12:00:10