11

我正在使用以下webservice從Android發送推送通知。當我第一次撥打此網絡服務時,需要很長時間並且推送通知不會在Android設備上傳送。它只有在從Android調用時纔會發生。它完美地作爲web服務。Android通過.net webservices發送推送通知

[WebMethod] 

    public string SendGcm(String serviceKey,String registrationId ,string message) { 
     WebClient wc=new WebClient(); 
     wc.Headers.Add("Authorization", "key=" + serviceKey); 
     NameValueCollection nameValues=new NameValueCollection 
      { 
       {"registration_id", registrationId}, 
       {"collapse_key", Guid.NewGuid().ToString()}, 
       {"data.payload", message} 
      }; 

     var resp=wc.UploadValues("https://android.googleapis.com/gcm/send", 
        nameValues); 

     var respMessage = Encoding.Default.GetString(resp); 
       return respMessage; 
    } 
+0

理想的情況下它不應該,但你可以檢查你的代碼與測試回聲服務器,而不是谷歌服務器的工作原理也是如此。 – the100rabh

+0

可能是由於限制http://developer.android.com/google/gcm/adv.html#throttling – Slartibartfast

回答

0

使用此 - :

public void MakeNotificationForAndroid(string DeviceToken, string Body, string Sound, string CustomFrom, string CustomeMsg) 
     { 
      String DeviceID = ""; 

      DeviceID = DeviceToken; 
      WebRequest tRequest; 
      tRequest = WebRequest.Create("https://android.googleapis.com/gcm/send"); 
      tRequest.Method = "post"; 
      tRequest.ContentType = "application/x-www-form-urlencoded"; 
      tRequest.Headers.Add(string.Format("Authorization: key={0}", "AIzaSyBX1gD47uiVp0W_UjNxhwtVsQCNJYfg5vI")); 

      String collaspeKey = Guid.NewGuid().ToString("n"); 
      //String postData=string.Format("registration_id={0}&data.payload={1}&collapse_key={2}", DeviceID, "Pickup Message", collaspeKey); 
      String postData = string.Format("registration_id={0}&data.message={1}&collapse_key={2}&data.sound={3}&data.type={4}", DeviceID, Body, collaspeKey, Sound, CustomeMsg); 

      Byte[] byteArray = Encoding.UTF8.GetBytes(postData); 
      tRequest.ContentLength = byteArray.Length; 

      Stream dataStream = tRequest.GetRequestStream(); 
      dataStream.Write(byteArray, 0, byteArray.Length); 
      dataStream.Close(); 

      WebResponse tResponse = tRequest.GetResponse(); 

      dataStream = tResponse.GetResponseStream(); 

      StreamReader tReader = new StreamReader(dataStream); 

      String sResponseFromServer = tReader.ReadToEnd(); 

      tReader.Close(); 
      dataStream.Close(); 
      tResponse.Close(); 
     }