2016-10-04 128 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。但是,随着开发者控制台中的最近更改,我可以建议的是将调用它的服务器列为白名单(本地/远程托管)。