GCM推送通知返回错误:字段数据必须是json数组

时间:2015-12-04 06:59:35

标签: php json wordpress push-notification google-cloud-messaging

当我使用GCM进行推送通知时,我收到错误返回:field" data"必须是JSON数组。 当用户创建新帖子时,通知将发送到所有已注册的设备。任何人都知道如何解决它?谢谢。

function Notification($post) {
    global $wpdb;
    $pub_post = get_post($post_ID);
    $post_title=$pub_post->post_title;
    $totalrecord = $this->get_allrecord(); 

     $message = "Your New post, " .$post_title." has been published";
      if (count($totalrecord) > 0) {
        //$display_row = null;
        foreach ($totalrecord as $row) {
        $a = $row->token;
        $this->sendPushNotification($a, $message);

            }
        } 
     } 

function get_allrecord(){
  global $wpdb;
  $results =$wpdb->get_results('SELECT token FROM wp_push_tokens ', OBJECT);
  return $results;
  }

 function sendPushNotification($registration_ids, $message) {
    $apiKey = "xxxxxxxxxxxxxxxxxxxxxxx";
     $headers = array("Content-Type:" . "application/json", "Authorization:" . "key=" .   $apiKey);
     $fields = array(
        'register' =>$registration_ids,
        'data' =>$message  );

     $ch = curl_init();
// Set the url, number of POST vars, POST data

curl_setopt($ch, CURLOPT_URL, "https://android.googleapis.com/gcm/send");
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, wp_json_encode($fields));
// Execute post
$result = curl_exec($ch);
   if($result === false)
        die('Curl failed ' . curl_error());
// Close connection
curl_close($ch);
return $result;

}

1 个答案:

答案 0 :(得分:1)

您的内容类型为"application/json",这意味着"data"字段必须是格式的JSON:

"data": {
    "message": "your message"
}

请注意,此示例中的"message"键是自定义的。您可以使用任何您想要的密钥,并且您的应用程序必须在收到消息时搜索这些密钥。

我不了解PHP,但这样的事情可能有用:

 $fields = array(
    'registration_ids' =>$registration_ids,
    'data' => array('message' => $message));