2016-10-04 384 views
0

我試圖按照本教程here在C#發送推送通知與GCM - 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。但是,隨着開發者控制檯中的最近更改,我可以建議的是將調用它的服務器列爲白名單(本地/遠程託管)。