7

पर कॉल करते समय अनधिकृत I पुश नोटिफिकेशन भेजने के लिए Google GCM का उपयोग करने का प्रयास कर रहा हूं। लेकिन एक WebException प्राप्त करें जो कहता है कि रिमोट सर्वर 401 unautorized लौटाता है। मैं नहीं कर सकता कि यह क्यों काम नहीं करता है।Google GCM

कोई भी जो जानता है कि यह क्यों काम नहीं करता है? Dude वहाँ 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

मान्य प्रमाणीकरण प्रमाण पत्र क्या है? –

उत्तर

11

डैनियल:

यहाँ मेरी कोड है! सर्वर एपीआई कुंजी के स्थान पर प्राधिकरण कुंजी के रूप में ब्राउज़र कुंजी का उपयोग करें। यह काम करेगा।

+0

मैंने कोशिश की है, लेकिन यह सुनिश्चित नहीं है कि वेबसाइटों पर मेरा आईपी पता निर्दिष्ट करना सही है या नहीं। लेकिन मुझे GetResponse पर अपवाद क्यों मिला और एक प्रतिक्रिया कोड नहीं? – Daniel

+0

@ डैनियल - दोस्त आपको इसकी आवश्यकता नहीं है! ब्राउज़र कुंजी के लिए ऑटो उत्पन्न होता है और आप इसका उपयोग कर सकते हैं। दूसरा, मुझे उसी मुद्दे का सामना करना पड़ रहा था जिसे ब्राउज़र कुंजी का उपयोग प्राधिकरण कुंजी के रूप में हल किया गया था। – bhuvin

+0

मुझे ब्राउजर कुंजी के साथ एक ही त्रुटि मिली। मैंने उपरोक्त पद में एक छवि जोड़ा। – Daniel

10

ठीक है, मैं बस अंधेरे में शूटिंग कर रहा हूं। इस लाइन पर एक नज़र डालें:

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

यह हो नहीं करना चाहिए:

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

आप इस एक प्राधिकरण शीर्षक है यह कह रहे हैं के बाद से, जोड़ने के लिए कोई आवश्यकता नहीं है 'प्राधिकरण:' फिर से, क्या यह?

साथ ही, सुनिश्चित करें कि स्ट्रिंग निरंतर 'HttpRequestHeader.Authorization' 'प्रमाणीकरण' है।

+0

हां यह सही लगता है। मैंने इसे बदल दिया है और मुझे अभी भी एक वेब अपवाद मिला है, लेकिन इस बार यह 400 खराब अनुरोध होगा। – Daniel

+0

400 का मतलब है कि आपका JSON पेलोड जीसीएम सर्वर द्वारा पार्स नहीं किया जा सकता है। एकल उद्धरण से डबल कोट्स में अपना JSON स्वरूपण बदलें। – azgolfer

+0

धन्यवाद, अब यह काम कर रहा है !! – Daniel

संबंधित मुद्दे