JSON_PARSING_ERROR: неожиданный символ (d) в позиции 0. при отправке запроса GCM от GAS

Это очень похоже на ряд других вопросов, и кажется очевидным, что ошибка указывает на то, что что-то не так с моей полезной нагрузкой JSON. Но я не понимаю, почему.

Я запускаю скрипт Google Apps, чтобы проверить отправку сообщения в Google Firebase Cloud Messaging.

Мой код:

function SendGCMessage() {
  var url = "https://gcm-http.googleapis.com/gcm/send";
  var apiKey = "AbCdEfG";
  var to = "ZyXwVuT:ToKeNtOkEnToKeNtOkEnToKeNtOkEn"
  var payload = {
    "data": {
      "message" : "This is the message"
    },
    "to":to
  };

  var sendCount = 1;
    var headers = {
      "Content-Type": "application/json",
      "Authorization": "key=" + apiKey
    };
    var params = {
      headers: headers,
      method: "post",
      payload: payload
    };

    var response = UrlFetchApp.fetch(url, params);
  return {message: "send completed: " + response.getContentText()};
}

Когда я запускаю это в режиме отладки, полезная нагрузка объекта выглядит нормально - как обычный объект Javascript. params тоже. UrlFetchApp принимает объект Javascript, а не строку в нотации JSON. Однако я попробовал "JSON.stringify (params)" и получил ошибку. Что я сделал не так?

Примечание: параметры выглядят так, когда я приостанавливаю их в отладчике:

{"заголовки": {"Content-Type": "application / json", "Authorization": "key = AbCdEfG"}, "method": "post", "payload": {"data": {"message" : "Это сообщение"}, "кому": "ZyXwVuT: ToKeNtOkEnToKeNtOkEnToKeNtOkEn"}}


comment
Вы пробовали создавать полезную нагрузку в виде литерала объекта js?   -  person Tyr    schedule 10.04.2016
comment
Разве это не то, что я сделал?   -  person Scott    schedule 10.04.2016


Ответы (1)


Я обнаружил проблему благодаря https://stackoverflow.com/a/10894233/3576831

параметр 'payload' должен быть строкой, как указано здесь: https://developers.google.com/apps-script/class_urlfetchapp?hl=fr-FR#fetch.

Настройка этого раздела скрипта работает:

var params = {
  headers: headers,
  method: "post",
  payload: JSON.stringify(payload)
};
person Scott    schedule 10.04.2016
comment
Это сработало для меня !! В моем случае я использую обмен сообщениями Firebase Cloud. Я добавил JSON.stringify в свою полезную нагрузку и начал работать. - person Juan Pablo; 03.11.2016