Отправка Push-уведомления на нескольких устройствах

Я пытаюсь сделать push-уведомление в своем приложении для Android, следуя этому руководству

http://www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gcm-php-and-mysql/

У меня уже есть этот учебник, но моя проблема. Он отправляет уведомление только один за другим. Мне нужно отправить уведомление всем gcm_id или зарегистрированным идентификатором, просто отправив один раз.

Кто-нибудь уже решил эту проблему?

вот мой index.php

<!-- To change this template, choose Tools | Templates and open the template in the editor. --> <!DOCTYPE html> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ }); function sendPushNotification(id){ var data = $('form#'+id).serialize(); $('form#'+id).unbind('submit'); $.ajax({ url: "send_message.php", type: 'GET', data: data, beforeSend: function() { }, success: function(data, textStatus, xhr) { $('.txt_message').val(""); }, error: function(xhr, textStatus, errorThrown) { } }); return false; } </script> <style type="text/css"> .container{ width: 950px; margin: 0 auto; padding: 0; } h1{ font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 24px; color: #777; } div.clear{ clear: both; } ul.devices{ margin: 0; padding: 0; } ul.devices li{ float: left; list-style: none; border: 1px solid #dedede; padding: 10px; margin: 0 15px 25px 0; border-radius: 3px; -webkit-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.35); -moz-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.35); box-shadow: 0 1px 5px rgba(0, 0, 0, 0.35); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; color: #555; } ul.devices li label, ul.devices li span{ font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; color: #393939; display: block; float: left; } ul.devices li label{ height: 25px; width: 50px; } ul.devices li textarea{ float: left; resize: none; } ul.devices li .send_btn{ background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#0096FF), to(#005DFF)); background: -webkit-linear-gradient(0% 0%, 0% 100%, from(#0096FF), to(#005DFF)); background: -moz-linear-gradient(center top, #0096FF, #005DFF); background: linear-gradient(#0096FF, #005DFF); text-shadow: 0 1px 0 rgba(0, 0, 0, 0.3); border-radius: 3px; color: #fff; } </style> </head> <body> <?php include_once 'db_functions.php'; $db = new DB_Functions(); $users = $db->getAllUsers(); if ($users != false) $no_of_users = mysql_num_rows($users); else $no_of_users = 0; ?> <div class="container"> <h1>No of Devices Registered: <?php echo $no_of_users; ?></h1> <hr/> <ul class="devices"> <?php if ($no_of_users > 0) { ?> <?php while ($row = mysql_fetch_array($users)) { ?> <li> <form id="<?php echo $row["id"] ?>" name="" method="post" onsubmit="return sendPushNotification('<?php echo $row["id"] ?>')"> <label>Name: </label> <span><?php echo $row["name"] ?></span> <div class="clear"></div> <label>Email:</label> <span><?php echo $row["email"] ?></span> <div class="clear"></div> <div class="send_container"> <textarea rows="3" name="message" cols="25" class="txt_message" placeholder="Type message here"></textarea> <input type="hidden" name="regId" value="<?php echo $row["gcm_regid"] ?>"/> <input type="submit" class="send_btn" value="Send" onclick=""/> </div> </form> </li> <?php } } else { ?> <li> No Users Registered Yet! </li> <?php } ?> </ul> </div> </body> </html> 

send_message.php

 <?php /* * To change this template, choose Tools | Templates * and open the template in the editor. */ if (isset($_GET["regId"]) && isset($_GET["message"])) { $regId = $_GET["regId"]; $message = $_GET["message"]; include_once './GCM.php'; $gcm = new GCM(); $registatoin_ids = array($regId); $message = array("price" => $message); $result = $gcm->send_notification($registatoin_ids, $message); echo $result; } ?> 

GCM.php

 <?php /* * To change this template, choose Tools | Templates * and open the template in the editor. */ /** * Description of GCM * * @author Ravi Tamada */ class GCM { //put your code here // constructor function __construct() { } /** * Sending Push Notification */ public function send_notification($registatoin_ids, $message) { // include config include_once './config.php'; // Set POST variables $url = 'https://android.googleapis.com/gcm/send'; $fields = array( 'registration_ids' => $registatoin_ids, 'data' => $message, ); $headers = array( 'Authorization: key=' . GOOGLE_API_KEY, 'Content-Type: application/json' ); // Open connection $ch = curl_init(); // Set the url, number of POST vars, POST data curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Disabling SSL Certificate support temporarly curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields)); // Execute post $result = curl_exec($ch); if ($result === FALSE) { die('Curl failed: ' . curl_error($ch)); } // Close connection curl_close($ch); echo $result; } } ?> 

У меня нет опыта в PHP, но я могу рассказать вам места, где вы можете изменить свой код.

Создайте массив идентификаторов и поместите в registration_ids .

В конце вы должны иметь все идентификаторы в registatoin_ids на

 $fields = array( 'registration_ids' => $registatoin_ids, // HERE IT IS 'data' => $message, ); 

в send_notification($registatoin_ids, $message) .

В текущем он имеет единственный reg_id, поэтому он отправляет уведомление на одно устройство.