Firebase обмена сообщениями API PHP подписаться на тему 411 ошибка

Я пытаюсь внедрить уведомления в мое веб-приложение. У меня есть этот php-файл, в который я отправляю уведомления:

<?php
  function sendGCM($title,$message, $id) {
    $url = 'https://fcm.googleapis.com/fcm/send';

    $fields = array (
        'registration_ids' => array (
                $id
        ),
        "notification" => array(
            "title" => $title,
            "body" => $message,
            "click_action" => "https://google.com"
        )
    );
    $fields = json_encode ( $fields );

    $headers = array (
        'Authorization: key=' . $MY_KEY,
        'Content-Type: application/json'
    );

    $ch = curl_init ();
    curl_setopt ( $ch, CURLOPT_URL, $url );
    curl_setopt ( $ch, CURLOPT_POST, true );
    curl_setopt ( $ch, CURLOPT_HTTPHEADER, $headers );
    curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt ( $ch, CURLOPT_POSTFIELDS, $fields );

    $result = curl_exec ( $ch );
    echo $result;
    curl_close ( $ch );
  }
?>

Теперь я хочу отправить уведомление в тему вместо отдельных идентификаторов. На этой странице показано, как вы можете подписать идентификатор на тему. Вот функция, которую я создал для этого:

function createTopic($topic,$id) {
  $url = 'https://iid.googleapis.com/iid/v1/' . $id . '/rel/topics/' . $topic;
  $headers = array (
    'Authorization: key=MY_KEY'
  );
  $ch = curl_init ();
  curl_setopt ( $ch, CURLOPT_URL, $url );
  curl_setopt ( $ch, CURLOPT_POST, true );
  curl_setopt ( $ch, CURLOPT_HTTPHEADER, $headers );
  curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );

  $result = curl_exec ( $ch );
  echo $result;
  curl_close ( $ch );
}

Я получаю эту ошибку от Google и не могу понять, что происходит не так:

  1. Это ошибка.

Для запросов POST требуется заголовок Content-length. Это все, что мы знаем.

Любая помощь?

1 ответ

Решение

Пример в документации показывает использование Content-Length заголовок:

https://iid.googleapis.com/iid/v1/nKctODamlM4:CKrh_PC8kIb7O...clJONHoA/rel/topics/movies
Content-Type:application/json
Content-Length: 0
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

Добавьте это к вашему запросу:

$headers = array (
    'Authorization: key=' . $MY_KEY,
    'Content-Length: 0'
);
Другие вопросы по тегам