2013-02-15 87 views
3

我想使用GCM一次向多個註冊設備發送多個通知,並且我知道這不能使用純文本完成,因爲它只能用於發送一個設備的通知在時間。所以不是我決定使用JSON HTTP主體內容和我設法讓下面的字符串表示JSON對象:使用JSON發送多通知到GCM

{ collapse_key : my_CollapseKey, data.message : myMessage, registration_ids : ["regid1","regid2",...] } 

但每當我發送請求我得到一個400響應其中指出錯誤的請求,並當我參考文檔GCM Architectural Overview時,它指出

響應400僅適用於JSON請求。指示請求不能被解析爲JSON,或者它包含無效的字段(例如,通過其中的一些預期的字符串)

這是從我的web應用程序的快照在ASP.Net開發了我用於發送請求:

request.ContentType = "application/json" 
     request.Headers.Add("Authorization: key=My_Server_Key") 
     request.Headers.Add("Sender: id=myProject_ID") 
     Dim collapsKey = Guid.NewGuid.ToString("n") 
     Dim data As String = "{ collapse_key : " + collapsKey + "," + " data.message : " + HttpUtility.UrlEncode(TextBox1.Text) + "}" + ", registration_ids : " + jsonids1 + "}" 
     Dim byteArray As Byte() = Encoding.UTF8.GetBytes(data) 
     request.ContentLength = byteArray.Length 
     Dim dataStream As Stream = request.GetRequestStream 
     dataStream.Write(byteArray, 0, byteArray.Length) 
     dataStream.Close() 

任何想法如何我可以正確解析我的JSON對象併發送多個通知? 任何幫助將完全讚賞。

問候

回答

6

的JSON應該是這樣的:

{ 
    "registration_ids" : ["APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",...], 
    "data" : { 
    "Team" : "Portugal", 
    "Score" : "3", 
    "Player" : "Varela", 
    }, 
} 

你忘了創建字典數據。

從GCM文檔:

數據
JSON對象,其字段表示消息的有效載荷數據的鍵 - 值對。如果存在,則有效載荷數據將作爲應用程序數據包含在意圖中,其中關鍵是 附加的名稱。例如,「data」:{「score」:「3x1」}將導致 意圖額外命名的分數,其值爲字符串3x1。儘管對消息的總大小(4kb)有限制,但對於鍵/值對的數量沒有限制 。值可以是任何JSON對象, ,但我們建議使用字符串,因爲無論如何,這些值都將在GCM服務器中轉換爲 字符串。如果您想要包含對象或其他非字符串數據類型(例如整數或布爾值),您可以使用 來進行轉換以自行處理字符串。另請注意,密鑰不能爲 爲保留字(來自或以谷歌開頭的任何單詞)。若要使 稍微複雜化,則有些有用數據中允許在技術上允許的保留字(例如 collapse_key)。但是,如果請求中還包含 字,則請求中的值將會覆蓋有效內容數據中的值 。因此,不建議在本表中使用定義爲字段名稱的字段 ,即使在技術上允許的情況下爲 。可選的。

+0

是IT registration_id或registration_ids,因爲我想在此發送多個 – 2013-02-15 16:16:02

+0

對不起,將其固定到registration_ids。 – Eran 2013-02-15 16:18:54

+0

我嘗試了你的建議,但沒有奏效,我真的沒有意識到爲數據創建字典 – 2013-02-15 16:38:50