【问题标题】:GCM request in Asp.netAsp.net 中的 GCM 请求
【发布时间】:2016-02-06 03:57:55
【问题描述】:

我已经引用了这个链接来发送 GCM 请求,它工作得很好。 gcm-push-notification-with-asp-net

我又推荐了一个链接发帖JSONhow-to-post-json-to-the-server

在第二个链接的基础上,我尝试了以下代码。

        var httprequest = (HttpWebRequest)WebRequest.Create("https://gcm-http.googleapis.com/gcm/send");
        httprequest.ContentType = "application/json";
        httprequest.Method = "POST";
        httprequest.Headers.Add(string.Format("Authorization: key={0}", GCM.APIKey));
        httprequest.Headers.Add(string.Format("Sender: id={0}", GCM.ProjectNo));

        using (var streamWriter = new StreamWriter(httprequest.GetRequestStream()))
        {
            string json = new JavaScriptSerializer().Serialize(new GCMValues
            {
                delay_while_idle = false,
                priority = "high",
                registration_id = regId,
                data = new MessagesValues
                {
                    message = message
                }
            });

            streamWriter.Write(json);
            streamWriter.Flush();
            streamWriter.Close();
        }

        var httpResponse = (HttpWebResponse)httprequest.GetResponse();
        using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
        {
            var result = streamReader.ReadToEnd();
        }

我使用过的属性

public class GCMValues
{
    public Object data { get; set; }
    public bool delay_while_idle { get; set; }
    public String priority { get; set; }
    public String registration_id { get; set; }
}
public class MessagesValues
{
    public String message { get; set; }
    public DateTime? time { get; set; }
}

我面临的问题是var httpResponse =(HttpWebResponse)httprequest.GetResponse();

我收到了错误请求的响应。 我哪里出错了,或者可以做些什么来以JSON 格式为GCM 发布请求传递值。 提前致谢。

【问题讨论】:

    标签: asp.net json google-cloud-messaging


    【解决方案1】:

    JSON 中需要 registration_ids(复数)而不是 registration_id(单数)。它是一个字符串数组,而不是单个字符串值。

    如果您检查GCM documentation,它会提供所有 JSON 选项。

    文档的其他地方详细说明了如何使用to,如果您只有一个令牌可以向其发送通知,如下例所示:

      {
        "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
        "notification" : {
          "body" : "great match!",
          "title" : "Portugal vs. Denmark",
          "icon" : "myicon"
        }
      }
    

    【讨论】:

    • 谢谢你提供的提示我已经使用了,它成功了
    【解决方案2】:

    我使用了以下方法来完成它,并且成功了。

    var httprequest = (HttpWebRequest)WebRequest.Create("https://gcm-http.googleapis.com/gcm/send");
            httprequest.ContentType = "application/json";
            httprequest.Method = "POST";
            httprequest.Headers.Add(string.Format("Authorization: key={0}", GCM.APIKey));
            httprequest.Headers.Add(string.Format("Sender: id={0}", GCM.ProjectNo));
            String[] regid = regId.Split(',');
    
            using (var streamWriter = new StreamWriter(httprequest.GetRequestStream()))
            {
                string json = new JavaScriptSerializer().Serialize(new GCMValues
                {
                    delay_while_idle = false,
                    priority = "high",
                    registration_ids = regid,
                    data = new MessagesValues
                    {
                        message = message
                    }
                });
    
                streamWriter.Write(json);
                streamWriter.Flush();
                streamWriter.Close();
            }
    
            var httpResponse = (HttpWebResponse)httprequest.GetResponse();
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                var result = streamReader.ReadToEnd();
                if (result.Contains("Error"))
                {
                    return false;
                }
            }
    

    我使用过的属性

    public class GCMValues
    {
        public Object data { get; set; }
        public bool delay_while_idle { get; set; }
        public String priority { get; set; }
        public String[] registration_ids { get; set; }
    }
    public class MessagesValues
    {
        public String message { get; set; }
        public DateTime? time { get; set; }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多