我想使用GCM一次向多个注册设备发送多个通知,我知道使用纯文本无法完成,因为它只能用于一次发送一个设备的通知。所以我决定使用JSON制作HTTP正文内容,并设法创建以下代表JSON对象的字符串:
{ collapse_key : my_CollapseKey, data.message : myMessage, registration_ids : ["regid1","regid2",...] }
但每当我发送请求时,我都会得到400响应,声明错误请求,当我参考GCM Architectural Overview的文档时,它指出
响应400仅适用于JSON请求。表示请求无法解析为JSON,或者包含无效字段(例如,传递一个字符串,其中包含预期的数字)
以下是我在ASP.Net中开发的Web应用程序的快照,用于发送请求:
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对象并发送多个通知吗? 任何帮助将完全赞赏。
问候
答案 0 :(得分:6)
JSON应如下所示:
{
"registration_ids" : ["APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",...],
"data" : {
"Team" : "Portugal",
"Score" : "3",
"Player" : "Varela",
},
}
您忘了为数据创建字典。
来自GCM文档:
数据强>
一个JSON对象,其字段表示消息的有效负载数据的键值对。如果存在,它将是有效载荷数据 作为应用程序数据包含在Intent中,其中键为 额外的名字。例如,“数据”:{“得分”:“3x1”}将导致 意图额外命名得分,其值为字符串3x1。没有 限制键/值对的数量,尽管有一个限制 消息的总大小(4kb)。值可以是任何JSON对象, 但我们建议使用字符串,因为值将转换为 无论如何,GCM服务器中的字符串。如果要包含对象或 你有其他非字符串数据类型(如整数或布尔值) 做转换为自己串。还要注意关键不能 是一个保留字(来自或以谷歌开头的任何单词)。至 稍微复杂一点,有一些保留字(如 collapse_key)在技术上允许在有效载荷数据中。然而, 如果请求还包含单词,则请求中的值将为 覆盖有效负载数据中的值。因此使用的是 即使在某些情况下,也不建议在此表中定义为字段名称 他们在技术上允许的地方。可选的。