GCM 消息的正确 JSON 格式

Posted

技术标签:

【中文标题】GCM 消息的正确 JSON 格式【英文标题】:Correct JSON format for GCM message 【发布时间】:2013-09-02 05:06:24 【问题描述】:

这是我的 JSON

   var postData = 
                     " \"registration_ids\": [ \"" + pushNotificationState.RegistrationId + "\" ], "+
                         "\"data\": \""+ pushNotificationState.NotificationData.NotificationData + "\"";

注册 ID 和通知数据是变量。我从 GCM 服务器收到 400 响应,说 JSON 格式不正确。谁能挑出我哪里出错了?

干杯

【问题讨论】:

【参考方案1】:

您有一个打开的,但有两个关闭的

var postData = " \"registration_ids\": [ \"" + pushNotificationState.RegistrationId + "\" ], " + "\"data\": \""+ pushNotificationState.NotificationData.NotificationData + "\"";

【讨论】:

为回复和帮助欢呼,但服务器仍然保持错误的 json 格式。 我认为你应该添加一个断点来查看 postData 的确切值,并确认格式。检查它是否是格式良好的 JSON 字符串的简单方法是由一些 JSON 查看器查看,例如 jsonviewer.stack.hu 您可以将调试值发送到我的收件箱,以便我为您检查格式 我得到registration_ids不是一个数组。这很奇怪,因为在示例格式中它看起来不像一个数组。 它是在一个简单的字符串数组之后。我的错。【参考方案2】:

使用一些Json 工具,而不是手动创建字符串。否则,如果某些字符串变量包含" 等,您将遇到问题。

var json = JsonConvert.DeserializeObject(
            new 
                registration_ids = new[]  pushNotificationState.RegistrationId ,
                data = pushNotificationState.NotificationData.NotificationData
            );

【讨论】:

【参考方案3】:
   var postData =      " \"registration_ids\": [ \"" + pushNotificationState.RegistrationId + "\" ], "+
                             "\"data\": \""+ pushNotificationState.NotificationData.NotificationData + "\"";

尝试用那个替换它。

【讨论】:

【参考方案4】:

您可以使用以下代码创建请求对象,然后转换为json。

public  class GCMRequest

    public GCMRequest()
    
        data = new PayLoad();
    
    public List<string> registration_ids;
    public PayLoad data;

public class PayLoad

    public string key;

您可以创建如下请求

GCMRequest req = new GCMRequest();
List<string> tokens = new List<string>();
// .. fill the tokens to the 'tokens' list
req.registration_ids = tokens;
req.data.key = "Hi, how are you"; // message you want to send
string json = new javascriptSerializer().Serialize(req);

希望这会有所帮助。

【讨论】:

PayLoad 类的用途是什么?

以上是关于GCM 消息的正确 JSON 格式的主要内容,如果未能解决你的问题,请参考以下文章

消息传递/不正确​​-gcm-sender-id firebase PWA

GCM 向多个设备发送消息

GCM 未在通知中使用来自 JSON 有效负载的数据

GCM 是如何工作的? (适用于 Android 的谷歌云消息传递)

发送 gcm 消息的错误请求

GCM CCS 上游消息是不是强制重新连接到 GCM 网络?