7

Tôi đang cố sử dụng Google GCM để gửi thông báo đẩy. Nhưng nhận được một WebException nói rằng máy chủ từ xa trả về 401 không được tự động hóa. Tôi không thể phạm lỗi tại sao nó không hoạt động.Không được ủy quyền khi gọi Google GCM

Bất kỳ ai biết lý do tại sao nó không hoạt động?

Đây là mã của tôi:

  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

Biến ValidateServerCertificate là gì? –

Trả lời

11

Daniel - Dude có một vấn đề với các tài liệu GCM! Sử dụng phím Trình duyệt làm khóa ủy quyền tại vị trí của khóa API máy chủ. Nó sẽ hoạt động.

+0

Tôi đã thử điều đó, nhưng không chắc chắn nếu nó chính xác để xác định địa chỉ ip của tôi trên các trang web. Nhưng tại sao tôi lại có ngoại lệ trên GetResponse chứ không phải mã phản hồi? – Daniel

+0

@Daniel - Dude u không cần! Đối với khóa trình duyệt, tự động tạo và bạn có thể sử dụng khóa này. Thứ hai, tôi đang đối mặt với vấn đề tương tự đã được giải quyết bằng cách sử dụng phím trình duyệt làm khóa ủy quyền. – bhuvin

+0

Tôi gặp lỗi tương tự với phím trình duyệt. Tôi đã thêm hình ảnh vào bài đăng ở trên. – Daniel

10

OK, tôi chỉ đang chụp trong bóng tối ở đây. Hãy nhìn vào dòng này:

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

nên không nó là:

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

Vì bạn đang nói với nó đây là một tiêu đề ủy quyền, không có cần phải thêm 'Authorization:' một lần nữa, Phải không?

Ngoài ra, hãy đảm bảo chuỗi liên tục 'HttpRequestHeader.Authorization' là 'Authorization'.

+0

Có nó souinds đúng. Tôi đã thay đổi nó và tôi vẫn có một WebException, nhưng lần này nó sẽ là 400 Bad Request. – Daniel

+0

400 nghĩa là không thể phân tích cú pháp tải trọng JSON của bạn bằng máy chủ GCM. Thay đổi định dạng JSON của bạn từ dấu nháy đơn thành dấu ngoặc kép. – azgolfer

+0

Cảm ơn bạn, bây giờ nó hoạt động !! – Daniel

Các vấn đề liên quan