2014-01-29 246 views
1

我正在使用GCM推送消息的Android項目。 我想只使用PHP而不是HTML發送通知。我如何實現這一目標?我試過的方法是把gcm_regid和消息作爲參數放到$ gcm-> send_notification($ registration_ids,$ msg),但是我總是收到一個錯誤消息: - 字段「data」必須是JSON數組:[「You Have A Notification!「]Google雲消息傳遞 - 使用PHP向Android發送推消息

」你有通知!「是我的味精!請幫忙!!謝謝!

代碼send_notification是

public function send_notification($registatoin_ids, $message) { 

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

} 

這是用於使用上點擊按鈕的發送消息的index.php文件。然而,我需要在後臺自動執行此操作,而無需按任何按鈕,並且希望在PHP中實現它。

<!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> 
+0

具有u使用下面我給出的答案發送成功通知M還面臨着同樣的問題 – user3233280

+0

@ user3233280是的!這是很久以前,所以不記得位置,但我認爲GCM PHP在發送消息函數中有一個參數,叫做price,需要將其更改爲我在android接收函數中設置的變量名稱。 希望我清楚! – 4kshay

回答

9

也許這將工作:

$fields = array(
    'registration_ids' => $registatoin_ids, 
    'data' => array("message" => $message), 
); 
+0

似乎是解決方案,但它不發送消息。它發送一條空白消息而不是指定的消息。我會盡力弄清楚這一點!謝謝 :) – 4kshay

0

您將需要太嵌入registration_id數組。

$fields = array(
    'registration_ids' => array($registatoin_ids), 
    'data' => array("message" => $message), 
); 
0
$fields[] = array(
      'registration_ids' =>$registatoin_ids, 
      'data' =>$message 
     ); 

使用方括號與$領域,這將使它成爲一個JSON數組

相關問題