firebase消息传递api php订阅主题411错误

kru*_*ens 1 php firebase http-status-code-411 firebase-cloud-messaging

我正在尝试将通知实施到我的Web应用程序中。我有这个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 );
  }
?>
Run Code Online (Sandbox Code Playgroud)

现在,我要做的是向主题发送通知,而不是发送单个ID。在此页面上,显示了如何为主题订阅ID。这是我为此创建的函数:

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 );
}
Run Code Online (Sandbox Code Playgroud)

我从Google收到此错误,但无法弄清楚出了什么问题:

  1. 那是一个错误。

POST请求需要Content-length标头。我们知道的就这些。

有什么帮助吗?

Bob*_*der 5

文档中的示例显示了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
Run Code Online (Sandbox Code Playgroud)

将其添加到您的请求中:

$headers = array (
    'Authorization: key=' . $MY_KEY,
    'Content-Length: 0'
);
Run Code Online (Sandbox Code Playgroud)