C# 调用Google GCM时未经授权

C# 调用Google GCM时未经授权,c#,android,httpwebrequest,unauthorized,google-cloud-messaging,C#,Android,Httpwebrequest,Unauthorized,Google Cloud Messaging,我正在尝试使用Google GCM发送推送通知。但是得到一个WebException,它表示远程服务器返回401未经验证的数据。我不明白它为什么不起作用 有人知道它为什么不起作用吗 这是我的密码: ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateServerCertificate);

我正在尝试使用Google GCM发送推送通知。但是得到一个WebException,它表示远程服务器返回401未经验证的数据。我不明白它为什么不起作用

有人知道它为什么不起作用吗

这是我的密码:

            ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateServerCertificate);

           HttpWebRequest Request = (HttpWebRequest)WebRequest.Create("https://android.googleapis.com/gcm/send");


            Request.Method = "POST";
            Request.KeepAlive = false;
            
            string postData = "{ 'registration_ids': [ '"+registrationId+"' ], 'data': {'message': '"+message+"'}}";

            byte[] byteArray = Encoding.UTF8.GetBytes(postData);

            Request.ContentType = "application/json";
            //Request.ContentLength = byteArray.Length;


            //Request.Headers.Add(HttpRequestHeader.Authorization, "GoogleLogin auth=" + AuthString);
            Request.Headers.Add(HttpRequestHeader.Authorization, "Authorization: key=AIzaSyCEygavdzrNM3pWNPtvaJXpvW66CKnjH_Y");
            //-- Delegate Modeling to Validate Server Certificate --//
           

            //-- Create Stream to Write Byte Array --// 
            Stream dataStream = Request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();

            //-- Post a Message --//
            WebResponse Response = Request.GetResponse();
            HttpStatusCode ResponseCode = ((HttpWebResponse)Response).StatusCode;
            if (ResponseCode.Equals(HttpStatusCode.Unauthorized) || ResponseCode.Equals(HttpStatusCode.Forbidden))
            {
                var text = "Unauthorized - need new token";

            }
            else if (!ResponseCode.Equals(HttpStatusCode.OK))
            {
                var text =  "Response from web service isn't OK";
            }

            StreamReader Reader = new StreamReader(Response.GetResponseStream());
            string responseLine = Reader.ReadLine();
            Reader.Close();

丹尼尔-杜德GCM文档有问题!在服务器API密钥处使用浏览器密钥作为授权密钥。会有用的。

好的,我只是在黑暗中拍摄。请看这一行:

Request.Headers.Add(HttpRequestHeader.Authorization, "Authorization: key=AIzaSyCEygavdzrNM3pWNPtvaJXpvW66CKnjH_Y");
难道不是:

Request.Headers.Add(HttpRequestHeader.Authorization, "key=AIzaSyCEygavdzrNM3pWNPtvaJXpvW66CKnjH_Y");
既然您告诉它这是一个授权头,就没有必要再添加“Authorization:”了,是吗


另外,请确保字符串常量“HttpRequestHeader.Authorization”为“Authorization”。

我已经尝试过了,但不确定在网站上指定我的ip地址是否正确。但是为什么我在GetResponse上得到一个异常而不是一个响应代码?@Daniel-Dude你不需要!对于浏览器,键是自动生成的,您可以使用它。其次,我遇到了类似的问题,使用浏览器密钥作为授权密钥得到了解决。我在使用浏览器密钥时遇到了相同的错误。我在上面的帖子中添加了一个图片。你是如何使用浏览器键的?老兄…你救了我的荣誉。。。!!!!伟大的解决方案。。。!!!脱帽致敬@bhuvinYes没错。我已经更改了它,但仍然得到一个WebException,但这次将是400个错误请求。400意味着GCM服务器无法解析您的JSON负载。将JSON格式从单引号更改为双引号。在我的例子中,显示错误401。有人能帮我吗?ValidateServerCertificate变量是什么?