Unauthorized when calling Google GCM

15,787

Solution 1

Daniel - Dude there is an issue with the GCM documentation ! Use Browser key as the authorization key at the place of Server API key . It will work.

Solution 2

OK, i am just shooting in the dark here. Take a look at this line:

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

Shouldn't it be:

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

Since you're telling it this is a Authorization header, there's no need to add 'Authorization: ' again, does it?

Also, make sure the string constant 'HttpRequestHeader.Authorization' is 'Authorization'.

Share:
15,787
Daniel
Author by

Daniel

Updated on June 14, 2022

Comments

  • Daniel
    Daniel almost 2 years

    I trying to use Google GCM for sending push notifications. But get a WebException that says that the remote server returns 401 unautorized. I can't foung why it doen't work.

    Anyone that knows why it doesn't work?

    Here is my code:

                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