2013-01-10 200 views
1

我使用Google示例項目推送通知,我已經成功構建並部署了客戶端和服務器應用程序,並且能夠在服務器端註冊設備,當我嘗試發送通知時,它會顯示該消息已被推送,但我沒有通知設備或模擬器。Android中的GCM推送通知

客戶端應用程序被編譯並與IDE Eclipse和樣品Server應用程序部署是通過ANT建設者建立和Tomcat的7部署

我使用的Android 4.2谷歌API和仿真器使用Gmail配置設備。

+0

顯示你的代碼(包括服務器和客戶端) –

+0

如果你有安裝SDK和更新爲谷歌附加功能,然後按照此http://developer.android.com/google/gcm/demo.html和你eill找到客戶端和服務器代碼 – Puneet

+0

我使用我的應用程序訪問代碼和發件人ID – Puneet

回答

0

要發送GCM推,你不需要在berween有第三方服務器。 這就是C2M的GCM的最佳部分。

 HttpClient httpclient = new DefaultHttpClient(); 

    HttpPost httppost = new HttpPost("https://android.googleapis.com/gcm/send"); 
    httppost.setHeader("Authorization", "key=" + GCM_AUTH_KEY); 
    httppost.setHeader("Content-Type", "application/json"); 

    try { 

     String reqBody = DATA_YOU_WANNA_SEND_INJSON_FORMAT; 

     BasicHttpEntity e = new BasicHttpEntity(); 

     ByteArrayInputStream is = new ByteArrayInputStream(reqBody.getBytes()); 
     e.setContent(is); 
     httppost.setEntity(e); 
     Log.d("@@ Data being sent via push : " + reqBody); 

     return httpclient.execute(httppost); 
    } catch (ClientProtocolException e) { 
     Log.e(e.getMessage()); 
    } catch (IOException e) { 
     Log.e(e.getMessage()); 
    } 

通過這種方法,您可以發送推送消息。

如果你談論爲什麼演示程序沒有發送推送,那麼當我執行時我也試過了,我面臨同樣的問題。

但是使用這種方法你總是可以發送GCM,只有你的設備必須被註冊。 。

此外,結果可以經由可以看出:

INT的StatusCode = response.getStatusLine()getStatusCode(); Log.d(「@@ response status code ::」+ statusCode);

 if (statusCode == 200) { 
      callback.onSuccess(); 
     } else { 
      String reason = response.getStatusLine().getReasonPhrase(); 
      Log.d("@@ response reason phrase :: " + reason); 
      callback.onFailure(reason); 
     } 
     Log.d("@@ complete response object : " + EntityUtils.toString(response.getEntity())); 
+0

您好我已經完成了GCM並顯示多個通知,現在我需要將來自相同API訪問密鑰的所有通知放在同一組中,是否有可能? – Puneet

+0

現在的問題是不同的。但可以做到。我不確定是否在接收Push消息信息(如訪問密鑰)的同時提供了該消息,但您始終可以將其發送到消息數據中,並且在解析接收方的結尾後,您可以根據需要 – akkilis

2

在這篇文章中,我將嘗試解釋我們如何整合Android的推送通知服務,使用ASP.NET和C#。我們都知道移動應用正在蓬勃發展的市場趨勢。某些自定義移動應用程序使用推送通知服務爲應用程序用戶提供更新。在這裏我將解釋我們如何使用Google的GCM推送通知服務。

類文件 「AndroidGCMPushNotification.cs」

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 
    using System.Net; 
    using System.Text; 
    using System.IO; 
    using System.Security.Cryptography.X509Certificates; 
    using System.Net.Security; 
    using System.Collections.Specialized; 


public class AndroidGCMPushNotification 
{ 
    public AndroidGCMPushNotification() 
    { 
     // 
     // TODO: Add constructor logic here 
     // 
    } 
    public string SendNotification(string deviceId, string message) 
    { 
     string GoogleAppID = "google application id";   
     var SENDER_ID = "9999999999"; 
     var value = message; 
     WebRequest tRequest; 
     tRequest = WebRequest.Create("https://android.googleapis.com/gcm/send"); 
     tRequest.Method = "post"; 
     tRequest.ContentType = " application/x-www-form-urlencoded;charset=UTF-8"; 
     tRequest.Headers.Add(string.Format("Authorization: key={0}", GoogleAppID)); 

     tRequest.Headers.Add(string.Format("Sender: id={0}", SENDER_ID)); 

     string postData = "collapse_key=score_update&time_to_live=108&delay_while_idle=1&data.message=" + value + "&data.time=" + System.DateTime.Now.ToString() + "®istration_id=" + deviceId + ""; 
     Console.WriteLine(postData); 
     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(); 
     return sResponseFromServer; 
    } 
} 

你可以通過設備ID和信息調用sendNotification的功能。

AndroidGCMPushNotification apnGCM = new AndroidGCMPushNotification(); 

string strResponse = 
apnGCM.SendNotification("123123xxxxxxxxxxxxxxxxxxxxxxxx", 
"Test Push Notification message "); 
-1

檢查您的Android模擬器是否使用Google API,並且您已安裝Google Play服務。

安裝谷歌播放服務: enter image description here

選擇谷歌的API Android模擬器目標: enter image description here