2013-04-11 48 views
4

我想通過javascript代碼發送gcm消息。爲此,我們需要發佈一個json對象。gcm message to javascript

url和json對象格式在gcm文檔中給出: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); 

回答

3

這不會工作,由於Same-origin Policy

在計算中,同源策略是許多瀏覽器的一個重要的安全理念 的編程語言,如 JavaScript。該策略允許腳本在來自同一站點(來自方案,主機名和端口號 號碼的組合)的來自 的頁面上運行,以訪問彼此的方法和屬性,但沒有 特定限制,但阻止訪問跨頁面的大多數方法和 屬性在不同的網站上。

簡而言之:您不能將HTTP Post發送到其他域,而不是腳本執行的域。

在這裏你可以看到rules of the Same-origin Policy

您將需要用戶Java代碼,或者如果您的託管供應商不支持Java,你可以使用PHP。 This question about GCM and PHP似乎有一個可用於GCM的PHP腳本。

好運