2013-06-10 2 views
2

Я пытаюсь сделать уведомление толчка на моем андроиде приложения с помощью этого обучающей программыОтправка Push Notification на нескольких устройствах

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; 
    } 

} 

?> 

ответ

4

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

Сделать массив идентификаторов и положить в registration_ids.

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

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

в send_notification($registatoin_ids, $message).

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

+0

меня тоже, у меня нет опыта использования php. Я уже несколько раз меняю эту строку, но все равно не получаю правильные коды. –

+0

Вы пробовали со статическим массивом? –

+0

да, но все еще не работает –

Смежные вопросы