2

Когда я использую GCM для push-уведомления, я получил сообщение об ошибке: поля «data» должны быть массивом JSON. Когда пользователь создает новое сообщение, уведомление будет отправлено всем зарегистрированным устройствам. У кого-нибудь есть представление о том, как его решить? Спасибо.Ошибка возврата уведомления о возврате GCM: данные поля должны быть массивом 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

Ваш тип контента "application/json", что означает, что "data" поле должно быть в формате JSON формы:

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

Обратите внимание, что "message" ключ в этом примере является обычай. Вы можете использовать любые ключи, которые хотите, и вашему приложению придется искать эти ключи при получении сообщения.

Я не знаю PHP, но что-то подобное может работать:

$fields = array(
    'registration_ids' =>$registration_ids, 
    'data' => array('message' => $message)); 
Смежные вопросы