7

我试图使用Google GCM发送推送通知。但是得到一个WebException,它说远程服务器返回401 unautorized。我不能为什么它不起作用。未经授权拨打Google GCM

任何知道为什么它不起作用的人?

这里是我的代码:

  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(); 

enter image description here

+0

什么是ValidateServerCertificate变量? – 2012-09-06 14:45:08

回答

11

丹尼尔 - 多德没有与GCM文件的问题!在服务器API密钥的位置使用浏览器密钥作为授权密钥。它会工作。

+0

我试过了,但不确定在网站上指定我的IP地址是否正确。但是,为什么我在GetResponse上得到一个异常而不是一个响应代码呢? – Daniel 2012-07-11 12:22:14

+0

@Daniel - Dude你不需要!对于浏览器的关键是自动生成,你可以使用它。其次,我正面临着使用浏览器密钥作为授权密钥解决的类似问题。 – bhuvin 2012-07-11 12:27:57

+0

我得到了与浏览器键相同的错误。我在上面的帖子中添加了一张图片。 – Daniel 2012-07-11 13:02:31

10

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

Request.Headers.Add(HttpRequestHeader.Authorization, "Authorization: key=AIzaSyCEygavdzrNM3pWNPtvaJXpvW66CKnjH_Y"); 

它不应该是:

Request.Headers.Add(HttpRequestHeader.Authorization, "key=AIzaSyCEygavdzrNM3pWNPtvaJXpvW66CKnjH_Y"); 

既然你告诉它这是一个Authorization头,没有必要添加的授权:“再次,可以?

此外,请确保字符串常量'HttpRequestHeader.Authorization'是'授权'。

+0

是的,它是对的。我改变了它,但仍然有一个WebException,但这次它将是400错误请求。 – Daniel 2012-07-12 05:46:03

+0

400意味着GCM服务器无法分析您的JSON负载。将您的JSON格式从单引号更改为双引号。 – azgolfer 2012-07-12 15:00:52

+0

谢谢,现在它正在工作! – Daniel 2012-07-13 08:25:30

相关问题