2013-02-15 69 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