发送 gcm 消息的错误请求
Posted
技术标签:
【中文标题】发送 gcm 消息的错误请求【英文标题】:Bad Request sending gcm message 【发布时间】:2012-08-12 12:16:09 【问题描述】:我正在尝试通过 C#
发送 gcm 消息。
我尝试了几次,但在尝试以 json 方法发送时得到http:400-Bad request
。
当我尝试以文本形式发送时,我无法阅读(rtl 语言) - 这就是我尝试 JSON
的原因。
有人知道是什么问题吗?
谢谢!
私有静态字符串 SendNotificationJson2(string id, string msg) var AuthString = "AIzaSyDAtmaqSdutBQemqmd4dQgf33B_6ssbvXA"; var RegistrationID = id; var 消息 = 味精; //-- 创建 C2DM Web 请求对象的 GCM 请求 --// HttpWebRequest 请求 = (HttpWebRequest)WebRequest.Create("https://android.googleapis.com/gcm/send"); Request.Method = "POST"; Request.KeepAlive = false; //-- 创建查询字符串 --// 字典 dict = new Dictionary(); dict.Add("registration_ids", RegistrationID); dict.Add("数据", 消息); dict.Add("collapse_key", "1"); 字符串 postData = GetPostStringFrom(dict); byte[] byteArray = Encoding.UTF8.GetBytes(postData); Request.ContentType = "应用程序/json"; Request.ContentLength = byteArray.Length; Request.Headers.Add("授权", "key=" + AuthString); //-- 委托建模以验证服务器证书 --// ServicePointManager.ServerCertificateValidationCallback += 委托( 目的 发件人, System.Security.Cryptography.X509Certificates.X509Certificate p证书, System.Security.Cryptography.X509Certificates.X509Chain pChain, System.Net.Security.SslPolicyErrors pSSLPolicyErrors) 返回真; ; //-- 创建流以写入字节数组 --// 流数据流 = Request.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.Length); 数据流。关闭(); //-- 发布消息--// WebResponse 响应 = Request.GetResponse(); HttpStatusCode ResponseCode = ((HttpWebResponse)Response).StatusCode; if (ResponseCode.Equals(HttpStatusCode.Unauthorized) || ResponseCode.Equals(HttpStatusCode.Forbidden)) 返回“未经授权 - 需要新令牌”; 否则如果(!ResponseCode.Equals(HttpStatusCode.OK)) 返回“来自网络服务的响应不正常”; //Console.WriteLine("来自 Web 服务的响应不正常:"); //Console.WriteLine(((HttpWebResponse)Response).StatusDescription); StreamReader Reader = new StreamReader(Response.GetResponseStream()); 字符串 responseLine = Reader.ReadLine(); Reader.Close(); 返回“确定”; 私有静态字符串 GetPostStringFrom(DictionarypostFieldNameValue) // return Newtonsoft.Json.JsonConvert.SerializeObject(postFieldNameValue); return "\"data\": \"Message\": \"" + postFieldNameValue["data"] + "\",\"registration_ids\":[\"" + postFieldNameValue["registration_ids"] + " \"]";
【问题讨论】:
【参考方案1】:您忘记了 Json 数据中的第一个括号
使用
return "\"data\": \"Message\": \"" + postFieldNameValue["data"] + "\",\"registration_ids\":[\"" + postFieldNameValue["registration_ids"] + "\"]";
而不是
return "\"data\": \"Message\": \"" + postFieldNameValue["data"] + "\",\"registration_ids\":[\"" + postFieldNameValue["registration_ids"] + "\"]";
【讨论】:
【参考方案2】:您的注册 ID 需要是 JSON 数组,因此请使用列表而不是单个字符串。
【讨论】:
以上是关于发送 gcm 消息的错误请求的主要内容,如果未能解决你的问题,请参考以下文章