我正在尝试使用Google Apps Script服务器在Google Cloud Messaging 上创建一个用户通知组。 我在这里按照指示进行操作:http://developer.android.com/google/gcm/notifications.html
我收到以下错误:
请求失败 https://android.googleapis.com/gcm/notification 返回代码 400。截断的服务器响应: {"错误":"NOT_A_JSON_REQUEST"}(使用 muteHttpExceptions 选项来 检查完整响应)(第 86 行,文件"代码")
function SetUserNotification(data) {
var url = "https://android.googleapis.com/gcm/notification";
var apiKey = "<MyApiKey>";
var projectID = "<MyProjectId>";
var registrationId = data[2];
var headers = {
"Content-Type": "application/json",
"project_id": projectID,
"Authorization": "key=" + apiKey
};
var payload = {
"operation": "create",
"notification_key_name": "ST-User" + data[3],
"registration_ids": registrationId
};
var params = {
headers: headers,
method: "post",
payload: payload
};
var response = UrlFetchApp.fetch(url, params);
Logger.log("response = " + response.getContentText());
return {message: "send completed: " + response.getContentText()};
}
我做错了什么? 我找不到任何在线创建通知密钥的示例,只是似乎是不完整的说明。
更新:这是来自 fetch 函数的执行脚本。请注意,第 87 行是获取调用。
[15-01-25 21:55:11:877 EST] UrlFetchApp.fetch([https://android.googleapis.com/gcm/notification, {headers={Authorization=key=MYAUTHKEY, project_id=MYPROJID, 内容类型=应用程序/json}, payload={"operation":"create","notification_key_name":"ST-User1","registration_ids":"[abcdefgblahblah]"}, 方法=发布}]) [0.015 秒]
[15-01-25 21:55:11:879 EST] 执行失败:请求失败 https://android.googleapis.com/gcm/notification 返回代码 400。 截断的服务器响应:{"错误":"NOT_A_JSON_REQUEST"} (使用 muteHttpExceptions 选项用于检查完整响应)(第 87 行,文件 "代码") [0.019 秒总运行时间]
您需要将有效负载转换为 JSON,因为这不会自动完成。 使用 javascript 的内置 JSON 对象执行此操作,如下所示。
此外,不能像在代码中那样通过 Headers 参数重写内容类型标头。 必须改用单独的 contentType 参数。
var headers = {
"project_id": projectID,
"Authorization": "key=" + apiKey
};
var params = {
headers: headers,
method: "post",
contentType: 'application/json',
payload: JSON.stringify(payload)
};
请参阅此处的高级参数部分:https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetch(String,Object)
和 JSON 文档在这里:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON#Methods
我发现了!!
function registerForKey(){
var url = "https://android.googleapis.com/gcm/notification";
var headers = {"content-type": "application/json","project_id": proj, "Authorization": "key=" + api };
var request = {"operation": "create", "notification_key_name": groupname, "registration_ids": [id]};
var pay = JSON.stringify(request);
var params = {"headers": headers,"method": "POST", "payload": pay };
var respo = UrlFetchApp.fetch(url,params)
Logger.log(respo);
}
请注意a)在标题中,内容类型必须如何编写,所有微小的和特征之间;b) 有效载荷需要串化;c) 插入一个真实 ID 作为请求 ID,否则会给出错误!
因此,只需复制此代码段,插入所需的所有变量,运行然后进行 CTRL+Enter 和...瞧!:)
享受:D