通过JavaScript发送GCM消息

4
我希望能够通过JavaScript代码发送GCM消息。为此,我们需要发布一个JSON对象。
在GCM文档中给出了URL和JSON对象格式:http://developer.android.com/google/gcm/adv.html
为了测试目的,我编写了一段Java代码,它可以完美地工作。但是JavaScript代码不起作用。如果有人有一些可用的示例工作代码(JavaScript for GCM),请发表。
String body = "registration_id=proper_id&data.number=12345678";
byte[] bytes = body.getBytes();
HttpURLConnection conn = getConnection(url);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setFixedLengthStreamingMode(bytes.length);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
conn.setRequestProperty("Authorization", "key=" + key);
OutputStream out = conn.getOutputStream();
out.write(bytes);

Javascript代码:

var http = new XMLHttpRequest();
var url = "https://android.googleapis.com/gcm/send";
http.onreadystatechange = function() {
if (http.readyState == 4 && http.status == 200) {        document.getElementById("target").innerHTML =    http.responseText;
}
}
http.open("POST", url, false);
http.setRequestHeader("Content-type", "application/json");
http.setRequestHeader("Authorization", "key=proper_api_key");
var data = '{ "collapse_key": "qcall","time_to_live": 108, "delay_while_idle": true,"data": {"number":"12345678"},"registration_ids":["proper_id"]}';
http.send(data);
1个回答

3

由于同源策略(Same-origin Policy),这个方法不起作用。

在计算机中,同源策略是一种重要的安全概念,适用于多个浏览器端编程语言,例如JavaScript。该策略允许从相同站点(方案、主机名和端口号的组合)起源的页面上运行的脚本互相访问彼此的方法和属性,没有特定的限制,但阻止跨站点页面之间的大多数方法和属性的访问。

简而言之:您不能向除了您的脚本执行的站点以外的其他域发送HTTP Post请求。

在这里,您可以查看同源策略的规则

您需要使用Java代码,或者如果您的主机不支持Java,则可以使用PHP。关于GCM和PHP的这个问题似乎有一个可行的GCM PHP脚本。

祝你好运


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接