使用JSON将多重通知发送到GCM

Hus*_*adi 3 android json push-notification google-cloud-messaging

我想使用GCM一次向多个注册设备发送多个通知,我知道使用纯文本无法完成,因为它只能用于一次发送一个设备的通知.所以我决定使用JSON创建HTTP正文内容,并设法生成以下代表JSON对象的字符串:

{ collapse_key : my_CollapseKey, data.message : myMessage,  registration_ids : ["regid1","regid2",...] }
Run Code Online (Sandbox Code Playgroud)

但每当我发送请求时,我都会得到400响应,其中声明了错误请求,当我参考GCM架构概述文档时,它指出

响应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()
Run Code Online (Sandbox Code Playgroud)

知道如何正确解析我的JSON对象并发送多个通知吗?任何帮助将完全赞赏.

问候

Era*_*ran 6

JSON应该如下所示:

{
  "registration_ids" : ["APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",...],
  "data" : {
    "Team" : "Portugal",
    "Score" : "3",
    "Player" : "Varela",
  },
}
Run Code Online (Sandbox Code Playgroud)

您忘了为数据创建字典.

来自GCM文档:

data
一个JSON对象,其字段表示消息的有效内容数据的键值对.如果存在,有效载荷数据将作为应用程序数据包含在Intent中,其中键是额外的名称.例如,"data":{"score":"3x1"}将导致意图额外命名得分,其值为字符串3x1.虽然对消息的总大小(4kb)有限制,但对键/值对的数量没有限制.值可以是任何JSON对象,但我们建议使用字符串,因为无论如何,值都将转换为GCM服务器中的字符串.如果要包含对象或其他非字符串数据类型(例如整数或布尔值),则必须自行转换为字符串.另请注意,密钥不能是保留字(来自或以谷歌开头的任何单词).为了使事情略微复杂化,有一些保留字(例如collapse_key)在技术上允许在有效载荷数据中.但是,如果请求还包含该单词,则请求中的值将覆盖有效负载数据中的值.因此,建议不要使用在此表中定义为字段名称的单词,即使在技术上允许的情况下也是如此.可选的.