2016-10-04 1 views
0

私はこのチュートリアルチュートリアルはに接続するためのかなりまっすぐ進むのコードを持っているhereから401無断

次のAndroidクライアントにプッシュ通知を送信するために、コンソールベースのサーバアプリケーションを作成しようとしていますそのようなもので、クライアントに通知を送信するためのGCMサービス:

public const string API_KEY = "AIzaS...jhqOydFCU"; 
    public const string MESSAGE = "Hello!"; 

    static void Main(string[] args) 
    { 
     var jGcmData = new JObject(); 
     var jData = new JObject(); 

     jData.Add("message", MESSAGE); 
     jGcmData.Add("to", "/topics/global"); 
     jGcmData.Add("data", jData); 

     var url = new Uri("https://gcm-http.googleapis.com/gcm/send"); 
     try 
     { 
      using (var client = new HttpClient()) 
      { 
       client.DefaultRequestHeaders.Accept.Add(
        new MediaTypeWithQualityHeaderValue("application/json")); 

       client.DefaultRequestHeaders.TryAddWithoutValidation(
        "Authorization", "key=" + API_KEY); 

       Task.WaitAll(client.PostAsync(url, 
        new StringContent(jGcmData.ToString(), Encoding.Default, "application/json")) 
         .ContinueWith(response => 
         { 
          Console.WriteLine(response); 
          Console.WriteLine("Message sent: check the client device notification tray."); 
         })); 
      } 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine("Unable to send GCM message:"); 
      Console.Error.WriteLine(e.StackTrace); 
     } 
    } 

私は、サーバーからの応答ヘッダーで401不正エラーが発生します。私は別のAPIキーを試しましたが、結果は同じです。私はこれの理由が何であるか分かりません。私のクライアントアプリケーションは、サーバーから送信された通知を受け取りません。

+0

Fiddler経由でリクエストを試しましたか?参照:http://stackoverflow.com/a/11903863/2779990 –

+0

gcmサービスが有効になっていないケースもありました。今はうまくいきます! –

答えて

0

これは既にあなたのために働いています。

以前のケースでは、サーバーキーを使用しないことが原因です。しかし、今度は開発者コンソールが更新されました。これは通常、開発者がAPIキーをWebサービスやIPアドレスに制限(ホワイトリスト)し、変更が有効になるまで約5分間待つことを目指しています。

Only Server API keysはGCM/FCMで動作します。しかし、開発者コンソールの最近の変更で、私が提案できるのは、それを呼び出すサーバーをホワイトリストに登録することです(ローカル/リモートホストされた)。

関連する問題