7

プッシュ通知の送信にGoogle GCMを使用しようとしています。しかし、WebExceptionを取得すると、リモートサーバーは401を返しません。なぜそれが働かないのか分からない。Google GCMを呼び出すときに許可されていない

なぜ動作しないのですか?デュード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変数とは何ですか? –

答えて

11

ダニエル:

は、ここに私のコードです!サーバーAPIキーの場所で、ブラウザキーを認証キーとして使用します。それが動作します。

+0

私はそれを試みましたが、ウェブサイトで私のIPアドレスを指定するのが正しいかどうかは分かりません。しかし、なぜ私はGetResponseで応答コードではなく例外を取得しましたか? – Daniel

+0

@ダニエル - デュード必要はありません!ブラウザのキーが自動生成され、これを使用することができます。次に、ブラウザキーを認証キーとして使用して解決した同様の問題に直面していました。 – bhuvin

+0

ブラウザキーで同じエラーが発生しました。上記の投稿に画像を追加しました。 – Daniel

10

いいえ、ここでは暗いところで撮影しています。この行を見てみましょう:

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

は、それはすべきではない:

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

追加する必要はありません、これはAuthorizationヘッダーであることを言っているので、「認可:」もう一度、それは?

また、文字列定数 'HttpRequestHeader.Authorization'が 'Authorization'であることを確認してください。

+0

はい、それは正しいです。私はそれを変更してまだWebExceptionがありますが、今回は400 Bad Requestになります。 – Daniel

+0

400は、GCONサーバーでJSONペイロードを解析できないことを意味します。 JSONの書式を一重引用符から二重引用符に変更します。 – azgolfer

+0

ありがとう、今それは働いている! – Daniel

関連する問題